forked from osmocom/wireshark
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:
parent
00a710afe7
commit
645516b041
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
35
extcap.c
35
extcap.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue