Fixed file initialization semantic (don't leak memory on error)
This commit is contained in:
parent
80359fb155
commit
430ec0bf8b
2 changed files with 16 additions and 7 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue