From 430ec0bf8b3b6a7fbdce88ce388f154e6c37e045 Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Mon, 8 Dec 2008 20:39:00 +0100 Subject: [PATCH] Fixed file initialization semantic (don't leak memory on error) --- src/backend/file.c | 19 ++++++++++++++----- src/backend/file.h | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) 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);