summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2019-03-12 21:46:01 +0100
committerJens Georg <mail@jensge.org>2019-03-12 21:46:06 +0100
commit3b085a7e2c94119519d848c4f4f1434bbea3d937 (patch)
tree9afad2be4e2a85901181eaf7c0ce619d39d17294
parent615517535c1a5bb2c2bb5d5460f92e7e7944df6a (diff)
downloadgssdp-3b085a7e2c94119519d848c4f4f1434bbea3d937.tar.gz
Make get_device_list properly portable
Fixes #3
-rw-r--r--libgssdp/gssdp-net-posix.c19
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;
}