diff --git a/src/backend/file.c b/src/backend/file.c index e4c88189a..20ca8d698 100644 --- a/src/backend/file.c +++ b/src/backend/file.c @@ -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 diff --git a/src/backend/file.h b/src/backend/file.h index 6c7071514..7f9d2fb75 100644 --- a/src/backend/file.h +++ b/src/backend/file.h @@ -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);