Fixed file initialization semantic (don't leak memory on error)

This commit is contained in:
Christian Thaeter 2008-12-08 20:39:00 +01:00
parent 80359fb155
commit 430ec0bf8b
2 changed files with 16 additions and 7 deletions

View file

@ -40,12 +40,15 @@ lumiera_file_init (LumieraFile self, const char* name, int flags)
{
TRACE (file);
llist_init (&self->node);
if (self)
{
llist_init (&self->node);
if (!(self->descriptor = lumiera_filedescriptor_acquire (name, flags, &self->node)))
return NULL;
if (!(self->descriptor = lumiera_filedescriptor_acquire (name, flags, &self->node)))
return NULL;
self->name = lumiera_strndup (name, PATH_MAX);
self->name = lumiera_strndup (name, PATH_MAX);
}
return self;
}
@ -66,7 +69,13 @@ lumiera_file_new (const char* name, int flags)
{
TRACE (file);
LumieraFile self = lumiera_malloc (sizeof (lumiera_file));
return lumiera_file_init (self, name, flags);
if (!lumiera_file_init (self, name, flags))
{
lumiera_free (self);
self = NULL;
}
return self;
}
void

View file

@ -80,7 +80,7 @@ struct lumiera_file_struct
* @param self pointer to the file structure
* @param name filename
* @param flags open flags
* @return self
* @return self or NULL in case of an error
*/
LumieraFile
lumiera_file_init (LumieraFile self, const char* name, int flags);
@ -102,7 +102,7 @@ lumiera_file_destroy (LumieraFile self);
* Allocate a new file structure.
* @param name filename
* @param flags open flags
* @return new file structure
* @return new file structure or NULL in case of an error
*/
LumieraFile
lumiera_file_new (const char* name, int flags);