diff --git a/ChangeLog b/ChangeLog index a964df5b4..82f1b839a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-09-01 Anders Carlsson + + * glib/goption.c: (g_option_context_free), (print_help), + (g_option_context_parse): + Handle option contexts without a main group. + + * tests/option-test.c: (empty_test2), (main): + Add test case for that. + 2004-08-30 Anders Carlsson * glib/goption.c: (g_option_context_parse): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index a964df5b4..82f1b839a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2004-09-01 Anders Carlsson + + * glib/goption.c: (g_option_context_free), (print_help), + (g_option_context_parse): + Handle option contexts without a main group. + + * tests/option-test.c: (empty_test2), (main): + Add test case for that. + 2004-08-30 Anders Carlsson * glib/goption.c: (g_option_context_parse): diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index a964df5b4..82f1b839a 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,12 @@ +2004-09-01 Anders Carlsson + + * glib/goption.c: (g_option_context_free), (print_help), + (g_option_context_parse): + Handle option contexts without a main group. + + * tests/option-test.c: (empty_test2), (main): + Add test case for that. + 2004-08-30 Anders Carlsson * glib/goption.c: (g_option_context_parse): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index a964df5b4..82f1b839a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +2004-09-01 Anders Carlsson + + * glib/goption.c: (g_option_context_free), (print_help), + (g_option_context_parse): + Handle option contexts without a main group. + + * tests/option-test.c: (empty_test2), (main): + Add test case for that. + 2004-08-30 Anders Carlsson * glib/goption.c: (g_option_context_parse): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index a964df5b4..82f1b839a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2004-09-01 Anders Carlsson + + * glib/goption.c: (g_option_context_free), (print_help), + (g_option_context_parse): + Handle option contexts without a main group. + + * tests/option-test.c: (empty_test2), (main): + Add test case for that. + 2004-08-30 Anders Carlsson * glib/goption.c: (g_option_context_parse): diff --git a/glib/goption.c b/glib/goption.c index 85c08d5f4..b619546ed 100644 --- a/glib/goption.c +++ b/glib/goption.c @@ -133,7 +133,8 @@ g_option_context_free (GOptionContext *context) g_list_foreach (context->groups, (GFunc)g_option_group_free, NULL); g_list_free (context->groups); - g_option_group_free (context->main_group); + if (context->main_group) + g_option_group_free (context->main_group); free_changes_list (context, FALSE); free_pending_nulls (context, FALSE); @@ -357,8 +358,9 @@ print_help (GOptionContext *context, g_print ("%s\n", _("Application Options:")); - for (i = 0; i < context->main_group->n_entries; i++) - print_entry (context->main_group, max_length, &context->main_group->entries[i]); + if (context->main_group) + for (i = 0; i < context->main_group->n_entries; i++) + print_entry (context->main_group, max_length, &context->main_group->entries[i]); while (list != NULL) { @@ -836,7 +838,7 @@ g_option_context_parse (GOptionContext *context, list = list->next; } - if (context->main_group->pre_parse_func) + if (context->main_group && context->main_group->pre_parse_func) { if (!(* context->main_group->pre_parse_func) (context, context->main_group, context->main_group->user_data, error)) @@ -900,7 +902,8 @@ g_option_context_parse (GOptionContext *context, } } - if (!parse_long_option (context, context->main_group, &i, arg, + if (context->main_group && + !parse_long_option (context, context->main_group, &i, arg, argc, argv, error, &parsed)) goto fail; @@ -942,7 +945,8 @@ g_option_context_parse (GOptionContext *context, { parsed = FALSE; - if (!parse_short_option (context, context->main_group, + if (context->main_group && + !parse_short_option (context, context->main_group, i, &new_i, arg[j], argc, argv, error, &parsed)) { @@ -1034,7 +1038,7 @@ g_option_context_parse (GOptionContext *context, list = list->next; } - if (context->main_group->post_parse_func) + if (context->main_group && context->main_group->post_parse_func) { if (!(* context->main_group->post_parse_func) (context, context->main_group, context->main_group->user_data, error)) @@ -1080,7 +1084,7 @@ g_option_context_parse (GOptionContext *context, list = list->next; } - if (context->main_group->error_func) + if (context->main_group && context->main_group->error_func) (* context->main_group->error_func) (context, context->main_group, context->main_group->user_data, error); diff --git a/tests/option-test.c b/tests/option-test.c index 4dff3ddd7..847119f0c 100644 --- a/tests/option-test.c +++ b/tests/option-test.c @@ -428,6 +428,17 @@ empty_test1 (void) g_option_context_free (context); } +void +empty_test2 (void) +{ + GOptionContext *context; + + context = g_option_context_new (NULL); + g_option_context_parse (context, NULL, NULL, NULL); + + g_option_context_free (context); +} + int main (int argc, char **argv) { @@ -454,6 +465,7 @@ main (int argc, char **argv) /* Test parsing empty args */ empty_test1 (); + empty_test2 (); return 0; }