[util] Fix memory issue

This commit is contained in:
Behdad Esfahbod 2014-07-04 18:09:29 -04:00
parent 14a4a9d649
commit 2306ad46dc
2 changed files with 11 additions and 4 deletions

View File

@ -371,15 +371,15 @@ void
output_options_t::add_options (option_parser_t *parser)
{
const char *text;
char *text_free = NULL;
if (NULL == supported_formats)
text = "Set output format";
else
{
char *items = g_strjoinv ("/", const_cast<char **> (supported_formats));
text = text_free = g_strdup_printf ("Set output format\n\n Supported formats are: %s", items);
text = g_strdup_printf ("Set output format\n\n Supported output formats are: %s", items);
g_free (items);
parser->free_later ((char *) text);
}
GOptionEntry entries[] =
@ -393,8 +393,6 @@ output_options_t::add_options (option_parser_t *parser)
"Output options:",
"Options controlling the output",
this);
g_free (text_free);
}

View File

@ -85,11 +85,14 @@ struct option_parser_t
memset (this, 0, sizeof (*this));
usage_str = usage;
context = g_option_context_new (usage);
to_free = g_ptr_array_new ();
add_main_options ();
}
~option_parser_t (void) {
g_option_context_free (context);
g_ptr_array_foreach (to_free, (GFunc) g_free, NULL);
g_ptr_array_free (to_free, TRUE);
}
void add_main_options (void);
@ -100,6 +103,10 @@ struct option_parser_t
const gchar *help_description,
option_group_t *option_group);
void free_later (char *p) {
g_ptr_array_add (to_free, p);
}
void parse (int *argc, char ***argv);
G_GNUC_NORETURN void usage (void) {
@ -107,8 +114,10 @@ struct option_parser_t
exit (1);
}
private:
const char *usage_str;
GOptionContext *context;
GPtrArray *to_free;
};