extcap: Sort extcap interfaces alphabetically

The interface list is not sorted at all, leading to
a very chaotic list. This sorts it alphabetically, as
well as correct a type in extcap_init_interfaces.

Bug: 11998
Change-Id: Ib5381a1761e8f07f9ba7996b3e6276da063b3932
Reviewed-on: https://code.wireshark.org/review/13220
Petri-Dish: Roland Knall <rknall@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Roland Knall <rknall@gmail.com>
This commit is contained in:
Roland Knall 2016-01-12 10:47:19 +01:00 committed by Roland Knall
parent 00a710afe7
commit 645516b041
3 changed files with 20 additions and 19 deletions

View File

@ -392,7 +392,7 @@ sync_pipe_start(capture_options *capture_opts, capture_session *cap_session, inf
cap_session->fork_child = WS_INVALID_PID; cap_session->fork_child = WS_INVALID_PID;
#ifdef HAVE_EXTCAP #ifdef HAVE_EXTCAP
if (!extcaps_init_initerfaces(capture_opts)) { if (!extcap_init_interfaces(capture_opts)) {
report_failure("Unable to init extcaps. (tmp fifo already exists?)"); report_failure("Unable to init extcaps. (tmp fifo already exists?)");
return FALSE; return FALSE;
} }

View File

@ -57,7 +57,7 @@ static HANDLE pipe_h = NULL;
/* internal container, for all the extcap interfaces that have been found. /* internal container, for all the extcap interfaces that have been found.
* will be resetted by every call to extcap_interface_list() and is being * will be resetted by every call to extcap_interface_list() and is being
* used in extcap_get_if_* as well as extcaps_init_initerfaces to ensure, * used in extcap_get_if_* as well as extcap_init_interfaces to ensure,
* that only extcap interfaces are being given to underlying extcap programs * that only extcap interfaces are being given to underlying extcap programs
*/ */
static GHashTable *ifaces = NULL; static GHashTable *ifaces = NULL;
@ -345,6 +345,19 @@ static gboolean interfaces_cb(const gchar *extcap, gchar *output, void *data,
return TRUE; return TRUE;
} }
static gint
if_info_compare(gconstpointer a, gconstpointer b)
{
gint comp = 0;
if_info_t * if_a = (if_info_t *)a;
if_info_t * if_b = (if_info_t *)b;
if ( (comp = g_strcmp0(if_a->name, if_b->name)) == 0 )
return g_strcmp0(if_a->friendly_name, if_b->friendly_name);
return comp;
}
GList * GList *
extcap_interface_list(char **err_str) { extcap_interface_list(char **err_str) {
gchar *argv; gchar *argv;
@ -366,12 +379,7 @@ extcap_interface_list(char **err_str) {
g_free(argv); g_free(argv);
return ret; return g_list_sort ( ret, if_info_compare );
}
static void g_free_1(gpointer data, gpointer user_data _U_)
{
g_free(data);
} }
static void extcap_free_if_configuration(GList *list) static void extcap_free_if_configuration(GList *list)
@ -380,15 +388,8 @@ static void extcap_free_if_configuration(GList *list)
for (elem = g_list_first(list); elem; elem = elem->next) for (elem = g_list_first(list); elem; elem = elem->next)
{ {
GList *arg_list; if (elem->data != NULL)
if (elem->data == NULL) g_list_free_full(g_list_first((GList *)elem->data), g_free);
{
continue;
}
arg_list = g_list_first((GList *)elem->data);
g_list_foreach(arg_list, g_free_1, NULL);
g_list_free(arg_list);
} }
g_list_free(list); g_list_free(list);
} }
@ -568,7 +569,7 @@ static void extcap_child_watch_cb(GPid pid, gint status _U_, gpointer user_data)
/* call mkfifo for each extcap, /* call mkfifo for each extcap,
* returns FALSE if there's an error creating a FIFO */ * returns FALSE if there's an error creating a FIFO */
gboolean gboolean
extcaps_init_initerfaces(capture_options *capture_opts) extcap_init_interfaces(capture_options *capture_opts)
{ {
guint i; guint i;
interface_options interface_opts; interface_options interface_opts;

View File

@ -75,7 +75,7 @@ extcap_get_win32_handle();
#endif #endif
gboolean gboolean
extcaps_init_initerfaces(capture_options * capture_opts); extcap_init_interfaces(capture_options * capture_opts);
gboolean gboolean
extcap_create_pipe(char ** fifo); extcap_create_pipe(char ** fifo);