diff options
-rw-r--r-- | src/fb.c | 26 | ||||
-rw-r--r-- | src/fb.h | 2 | ||||
-rw-r--r-- | src/settings.c | 53 | ||||
-rw-r--r-- | src/settings.h | 4 |
4 files changed, 46 insertions, 39 deletions
@@ -239,22 +239,26 @@ void fb_get_put_pages_count(fb_t *fb, unsigned *count) /* free the fb and associated resources */ -void fb_free(fb_t *fb) +fb_t * fb_free(fb_t *fb) { - if (fb->active_page) - fb_release(fb); + if (fb) { + if (fb->active_page) + fb_release(fb); - /* TODO: free all the pages */ + /* TODO: free all the pages */ - if (fb->ops->shutdown && fb->ops_context) - fb->ops->shutdown(fb, fb->ops_context); + if (fb->ops->shutdown && fb->ops_context) + fb->ops->shutdown(fb, fb->ops_context); - pthread_mutex_destroy(&fb->ready_mutex); - pthread_cond_destroy(&fb->ready_cond); - pthread_mutex_destroy(&fb->inactive_mutex); - pthread_cond_destroy(&fb->inactive_cond); + pthread_mutex_destroy(&fb->ready_mutex); + pthread_cond_destroy(&fb->ready_cond); + pthread_mutex_destroy(&fb->inactive_mutex); + pthread_cond_destroy(&fb->inactive_cond); - free(fb); + free(fb); + } + + return NULL; } @@ -47,7 +47,7 @@ typedef struct fb_ops_t { fb_page_t * fb_page_get(fb_t *fb); void fb_page_put(fb_t *fb, fb_page_t *page); -void fb_free(fb_t *fb); +fb_t * fb_free(fb_t *fb); void fb_get_put_pages_count(fb_t *fb, unsigned *count); int fb_new(const fb_ops_t *ops, settings_t *settings, int n_pages, fb_t **res_fb); void * fb_context(fb_t *fb); diff --git a/src/settings.c b/src/settings.c index 3ba4f15..e54a690 100644 --- a/src/settings.c +++ b/src/settings.c @@ -119,20 +119,21 @@ settings_t * settings_new(const char *settings_string) /* free structure attained via settings_new() */ -void settings_free(settings_t *settings) +settings_t * settings_free(settings_t *settings) { - unsigned i; - assert(settings); + if (settings) { + for (unsigned i = 0; i < settings->num; i++) { + free((void *)settings->keys[i]); + free((void *)settings->values[i]); + } - for (i = 0; i < settings->num; i++) { - free((void *)settings->keys[i]); - free((void *)settings->values[i]); + free((void *)settings->keys); + free((void *)settings->values); + free(settings); } - free((void *)settings->keys); - free((void *)settings->values); - free(settings); + return NULL; } @@ -282,28 +283,30 @@ int setting_desc_clone(const setting_desc_t *desc, setting_desc_t **res_desc) } -void setting_desc_free(setting_desc_t *desc) +setting_desc_t * setting_desc_free(setting_desc_t *desc) { - free((void *)desc->name); - free((void *)desc->key); - free((void *)desc->regex); - free((void *)desc->preferred); - - if (desc->values) { - unsigned i; - - for (i = 0; desc->values[i]; i++) { - free((void *)desc->values[i]); + if (desc) { + free((void *)desc->name); + free((void *)desc->key); + free((void *)desc->regex); + free((void *)desc->preferred); + + if (desc->values) { + for (unsigned i = 0; desc->values[i]; i++) { + free((void *)desc->values[i]); + + if (desc->annotations) + free((void *)desc->annotations[i]); + } - if (desc->annotations) - free((void *)desc->annotations[i]); + free((void *)desc->values); + free((void *)desc->annotations); } - free((void *)desc->values); - free((void *)desc->annotations); + free(desc); } - free(desc); + return NULL; } diff --git a/src/settings.h b/src/settings.h index c538531..9916ebb 100644 --- a/src/settings.h +++ b/src/settings.h @@ -24,7 +24,7 @@ typedef struct setting_desc_generator_t { typedef struct settings_t settings_t; settings_t * settings_new(const char *settings); -void settings_free(settings_t *settings); +settings_t * settings_free(settings_t *settings); const char * settings_get_value(const settings_t *settings, const char *key); const char * settings_get_key(const settings_t *settings, unsigned pos); int settings_add_value(settings_t *settings, const char *key, const char *value); @@ -32,7 +32,7 @@ char * settings_as_arg(const settings_t *settings); int settings_apply_desc_generators(const settings_t *settings, const setting_desc_generator_t generators[], unsigned n_generators, void *setup_context, setting_desc_t **next_setting); int setting_desc_clone(const setting_desc_t *desc, setting_desc_t **res_desc); -void setting_desc_free(setting_desc_t *desc); +setting_desc_t * setting_desc_free(setting_desc_t *desc); int setting_desc_check(const setting_desc_t *desc, const char *value); #ifndef SETTINGS_STR |