[gssdp] Make get_device_list properly portable



commit 3b085a7e2c94119519d848c4f4f1434bbea3d937
Author: Jens Georg <mail jensge org>
Date:   Tue Mar 12 21:46:01 2019 +0100

    Make get_device_list properly portable
    
    Fixes #3

 libgssdp/gssdp-net-posix.c | 19 +++++++++++--------
 1 file 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;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]