From 618b231e1929c9cb067b55a27604fe34aeeb1583 Mon Sep 17 00:00:00 2001 From: Chris Maynard Date: Thu, 22 Dec 2011 21:52:16 +0000 Subject: [PATCH] Alphabetize the list of encapsulation types via "mergecap -T" as well as the list of capture file types via "mergecap -F". svn path=/trunk/; revision=40282 --- mergecap.c | 71 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/mergecap.c b/mergecap.c index 0061622b95..bb95f2aaf3 100644 --- a/mergecap.c +++ b/mergecap.c @@ -135,28 +135,65 @@ usage(void) fprintf(stderr, " -v verbose output.\n"); } -static void list_capture_types(void) { - int i; +struct string_elem { + const char *sstr; /* The short string */ + const char *lstr; /* The long string */ +}; - fprintf(stderr, "mergecap: The available capture file types for \"F\":\n"); - for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) { - if (wtap_dump_can_open(i)) - fprintf(stderr, " %s - %s\n", - wtap_file_type_short_string(i), wtap_file_type_string(i)); - } +static gint +string_compare(gconstpointer a, gconstpointer b) +{ + return strcmp(((const struct string_elem *)a)->sstr, + ((const struct string_elem *)b)->sstr); } -static void list_encap_types(void) { - int i; - const char *string; +static void +string_elem_print(gpointer data, gpointer not_used _U_) +{ + fprintf(stderr, " %s - %s\n", + ((struct string_elem *)data)->sstr, + ((struct string_elem *)data)->lstr); +} - fprintf(stderr, "mergecap: The available encapsulation types for \"T\":\n"); - for (i = 0; i < WTAP_NUM_ENCAP_TYPES; i++) { - string = wtap_encap_short_string(i); - if (string != NULL) - fprintf(stderr, " %s - %s\n", - string, wtap_encap_string(i)); +static void +list_capture_types(void) { + int i; + struct string_elem *captypes; + GSList *list = NULL; + + captypes = g_malloc(sizeof(struct string_elem) * WTAP_NUM_FILE_TYPES); + + fprintf(stderr, "mergecap: The available capture file types for the \"-F\" flag are:\n"); + for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) { + if (wtap_dump_can_open(i)) { + captypes[i].sstr = wtap_file_type_short_string(i); + captypes[i].lstr = wtap_file_type_string(i); + list = g_slist_insert_sorted(list, &captypes[i], string_compare); } + } + g_slist_foreach(list, string_elem_print, NULL); + g_slist_free(list); + g_free(captypes); +} + +static void +list_encap_types(void) { + int i; + struct string_elem *encaps; + GSList *list = NULL; + + encaps = g_malloc(sizeof(struct string_elem) * WTAP_NUM_ENCAP_TYPES); + fprintf(stderr, "mergecap: The available encapsulation types for the \"-T\" flag are:\n"); + for (i = 0; i < WTAP_NUM_ENCAP_TYPES; i++) { + encaps[i].sstr = wtap_encap_short_string(i); + if (encaps[i].sstr != NULL) { + encaps[i].lstr = wtap_encap_string(i); + list = g_slist_insert_sorted(list, &encaps[i], string_compare); + } + } + g_slist_foreach(list, string_elem_print, NULL); + g_slist_free(list); + g_free(encaps); } int