diff options
author | Jens Georg <mail@jensge.org> | 2019-03-12 21:46:01 +0100 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2019-03-12 21:46:06 +0100 |
commit | 3b085a7e2c94119519d848c4f4f1434bbea3d937 (patch) | |
tree | 9afad2be4e2a85901181eaf7c0ce619d39d17294 | |
parent | 615517535c1a5bb2c2bb5d5460f92e7e7944df6a (diff) | |
download | gssdp-3b085a7e2c94119519d848c4f4f1434bbea3d937.tar.gz |
Make get_device_list properly portable
Fixes #3
-rw-r--r-- | libgssdp/gssdp-net-posix.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/libgssdp/gssdp-net-posix.c b/libgssdp/gssdp-net-posix.c index e6e4f20..3da6cb9 100644 --- a/libgssdp/gssdp-net-posix.c +++ b/libgssdp/gssdp-net-posix.c @@ -556,26 +556,29 @@ GList * gssdp_net_list_devices (void) { struct ifaddrs *ifa_list, *ifa; + GHashTable *interfaces; GList *result = NULL; + interfaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + if (getifaddrs (&ifa_list) != 0) { g_warning ("Failed to retrieve list of network interfaces: %s", strerror (errno)); - return result; + goto out; } for (ifa = ifa_list; ifa != NULL; ifa = ifa->ifa_next) { - /* Filter for network devices - don't care for addresses */ - if (ifa->ifa_addr->sa_family != AF_PACKET) { - continue; - } - - result = g_list_prepend (result, g_strdup (ifa->ifa_name)); + g_hash_table_add (interfaces, g_strdup (ifa->ifa_name)); } freeifaddrs (ifa_list); - return g_list_reverse (result); +out: + result = g_hash_table_get_keys (interfaces); + g_hash_table_steal_all (interfaces); + g_hash_table_destroy (interfaces); + + return result; } |