TT#28300 use more auto cleanup variables in config_load

Change-Id: I613e1496fd46d33e95eaea14bd0b0ec8aece181c
changes/95/40795/3
Richard Fuchs 6 years ago
parent 48b33bd3dc
commit 39b04ece9d

@ -788,6 +788,7 @@ static int json_get_hash(struct redis_hash *out,
static unsigned int MAXKEYLENGTH = 512; static unsigned int MAXKEYLENGTH = 512;
char key_concatted[MAXKEYLENGTH]; char key_concatted[MAXKEYLENGTH];
int rc=0; int rc=0;
AUTO_CLEANUP_GVBUF(orig_members);
if (id == -1) { if (id == -1) {
rc = snprintf(key_concatted, MAXKEYLENGTH, "%s",key); rc = snprintf(key_concatted, MAXKEYLENGTH, "%s",key);
@ -809,7 +810,7 @@ static int json_get_hash(struct redis_hash *out,
goto err; goto err;
gchar **members = json_reader_list_members(root_reader); gchar **members = json_reader_list_members(root_reader);
gchar **orig_members = members; orig_members = members;
int nmemb = json_reader_count_members (root_reader); int nmemb = json_reader_count_members (root_reader);
for (int i=0; i < nmemb; ++i) { for (int i=0; i < nmemb; ++i) {
@ -830,13 +831,11 @@ static int json_get_hash(struct redis_hash *out,
++members; ++members;
} // for } // for
g_strfreev(orig_members);
json_reader_end_member (root_reader); json_reader_end_member (root_reader);
return 0; return 0;
err3: err3:
g_strfreev(members);
g_hash_table_destroy(out->ht); g_hash_table_destroy(out->ht);
err: err:
return -1; return -1;

@ -102,16 +102,29 @@ void config_load_free(struct rtpengine_common_config *cconfig) {
g_free(cconfig->pidfile); 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, void config_load(int *argc, char ***argv, GOptionEntry *app_entries, const char *description,
char *default_config, char *default_section, char *default_config, char *default_section,
struct rtpengine_common_config *cconfig) struct rtpengine_common_config *cconfig)
{ {
GOptionContext *c; AUTO_CLEANUP_NULL(GOptionContext *c, free_goptc);
GError *er = NULL; AUTO_CLEANUP_NULL(GError *er, free_gerror);
const char *use_section; const char *use_section;
const char *use_config; const char *use_config;
int fatal = 0; int fatal = 0;
char **saved_argv = g_strdupv(*argv); AUTO_CLEANUP(char **saved_argv, free_gvbuf) = g_strdupv(*argv);
rtpe_common_config_ptr = cconfig; 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; rtpe_common_config_ptr->log_level = LOG_DEBUG;
#endif #endif
GKeyFile *kf = g_key_file_new(); AUTO_CLEANUP(GKeyFile *kf, free_gkeyfile) = g_key_file_new();
GOptionEntry shared_options[] = { GOptionEntry shared_options[] = {
{ "version", 'v', 0, G_OPTION_ARG_NONE, &version, "Print build time and exit", NULL }, { "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 // prepend shared CLI options
unsigned int shared_len = options_length(shared_options); unsigned int shared_len = options_length(shared_options);
unsigned int app_len = options_length(app_entries); 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_options, sizeof(*entries) * shared_len);
memcpy(&entries[shared_len], app_entries, sizeof(*entries) * (app_len + 1)); 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); CONF_OPTION_GLUE(string_list, char **, NULL);
default: default:
g_option_context_free(c);
g_strfreev(saved_argv);
g_key_file_free(kf);
free(entries);
config_load_free(rtpe_common_config_ptr); config_load_free(rtpe_common_config_ptr);
abort(); abort();
@ -216,11 +225,6 @@ out:
if (rtpe_common_config_ptr->log_mark_suffix == NULL) if (rtpe_common_config_ptr->log_mark_suffix == NULL)
rtpe_common_config_ptr->log_mark_suffix = g_strdup(""); 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) { if (version) {
fprintf(stderr, "Version: %s\n", RTPENGINE_VERSION); fprintf(stderr, "Version: %s\n", RTPENGINE_VERSION);
exit(0); exit(0);
@ -246,10 +250,6 @@ out:
return; return;
err: err:
g_option_context_free(c);
g_strfreev(saved_argv);
g_key_file_free(kf);
free(entries);
config_load_free(rtpe_common_config_ptr); config_load_free(rtpe_common_config_ptr);
die("Bad command line: %s", er->message); die("Bad command line: %s", er->message);

Loading…
Cancel
Save