From 39b04ece9da46115fa2a673be927d60248c47e0f Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 11 Jun 2020 09:22:07 -0400 Subject: [PATCH] TT#28300 use more auto cleanup variables in config_load Change-Id: I613e1496fd46d33e95eaea14bd0b0ec8aece181c --- daemon/redis.c | 5 ++--- lib/auxlib.c | 36 ++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/daemon/redis.c b/daemon/redis.c index 039d66f9b..59da983a1 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -788,6 +788,7 @@ static int json_get_hash(struct redis_hash *out, static unsigned int MAXKEYLENGTH = 512; char key_concatted[MAXKEYLENGTH]; int rc=0; + AUTO_CLEANUP_GVBUF(orig_members); if (id == -1) { rc = snprintf(key_concatted, MAXKEYLENGTH, "%s",key); @@ -809,7 +810,7 @@ static int json_get_hash(struct redis_hash *out, goto err; gchar **members = json_reader_list_members(root_reader); - gchar **orig_members = members; + orig_members = members; int nmemb = json_reader_count_members (root_reader); for (int i=0; i < nmemb; ++i) { @@ -830,13 +831,11 @@ static int json_get_hash(struct redis_hash *out, ++members; } // for - g_strfreev(orig_members); json_reader_end_member (root_reader); return 0; err3: - g_strfreev(members); g_hash_table_destroy(out->ht); err: return -1; diff --git a/lib/auxlib.c b/lib/auxlib.c index d0e391881..93676d688 100644 --- a/lib/auxlib.c +++ b/lib/auxlib.c @@ -102,16 +102,29 @@ void config_load_free(struct rtpengine_common_config *cconfig) { g_free(cconfig->pidfile); } +static void free_gkeyfile(GKeyFile **k) { + g_key_file_free(*k); +} +static void free_gopte(GOptionEntry **k) { + free(*k); +} +static void free_goptc(GOptionContext **k) { + g_option_context_free(*k); +} +static void free_gerror(GError **k) { + g_error_free(*k); +} + void config_load(int *argc, char ***argv, GOptionEntry *app_entries, const char *description, char *default_config, char *default_section, struct rtpengine_common_config *cconfig) { - GOptionContext *c; - GError *er = NULL; + AUTO_CLEANUP_NULL(GOptionContext *c, free_goptc); + AUTO_CLEANUP_NULL(GError *er, free_gerror); const char *use_section; const char *use_config; int fatal = 0; - char **saved_argv = g_strdupv(*argv); + AUTO_CLEANUP(char **saved_argv, free_gvbuf) = g_strdupv(*argv); rtpe_common_config_ptr = cconfig; @@ -122,7 +135,7 @@ void config_load(int *argc, char ***argv, GOptionEntry *app_entries, const char rtpe_common_config_ptr->log_level = LOG_DEBUG; #endif - GKeyFile *kf = g_key_file_new(); + AUTO_CLEANUP(GKeyFile *kf, free_gkeyfile) = g_key_file_new(); GOptionEntry shared_options[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &version, "Print build time and exit", NULL }, @@ -143,7 +156,7 @@ void config_load(int *argc, char ***argv, GOptionEntry *app_entries, const char // prepend shared CLI options unsigned int shared_len = options_length(shared_options); unsigned int app_len = options_length(app_entries); - GOptionEntry *entries = malloc(sizeof(*entries) * (shared_len + app_len + 1)); + AUTO_CLEANUP(GOptionEntry *entries, free_gopte) = malloc(sizeof(*entries) * (shared_len + app_len + 1)); memcpy(entries, shared_options, sizeof(*entries) * shared_len); memcpy(&entries[shared_len], app_entries, sizeof(*entries) * (app_len + 1)); @@ -195,10 +208,6 @@ void config_load(int *argc, char ***argv, GOptionEntry *app_entries, const char CONF_OPTION_GLUE(string_list, char **, NULL); default: - g_option_context_free(c); - g_strfreev(saved_argv); - g_key_file_free(kf); - free(entries); config_load_free(rtpe_common_config_ptr); abort(); @@ -216,11 +225,6 @@ out: if (rtpe_common_config_ptr->log_mark_suffix == NULL) rtpe_common_config_ptr->log_mark_suffix = g_strdup(""); - g_option_context_free(c); - g_strfreev(saved_argv); - g_key_file_free(kf); - free(entries); - if (version) { fprintf(stderr, "Version: %s\n", RTPENGINE_VERSION); exit(0); @@ -246,10 +250,6 @@ out: return; err: - g_option_context_free(c); - g_strfreev(saved_argv); - g_key_file_free(kf); - free(entries); config_load_free(rtpe_common_config_ptr); die("Bad command line: %s", er->message);