[Libosinfo] [libosinfo PATCH] Use g_list_free_full where easily possible

Pino Toscano ptoscano at redhat.com
Thu Dec 20 09:56:25 UTC 2018


Use g_list_free_full instead of g_list_foreach + g_list_free, so the
lists are cleared with a single call.

test-isodetect gets a void* wrapper, so there is no need to add casts
everywhere.
---
 osinfo/osinfo_deployment.c |  8 +-------
 osinfo/osinfo_loader.c     |  3 +--
 tests/test-isodetect.c     | 17 +++++++++++------
 3 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/osinfo/osinfo_deployment.c b/osinfo/osinfo_deployment.c
index 7191ac3..a79b32f 100644
--- a/osinfo/osinfo_deployment.c
+++ b/osinfo/osinfo_deployment.c
@@ -114,18 +114,12 @@ osinfo_deployment_get_property(GObject *object,
 
 
 
-static void osinfo_device_link_free(gpointer data, gpointer opaque G_GNUC_UNUSED)
-{
-    g_object_unref(OSINFO_DEVICELINK(data));
-}
-
 static void
 osinfo_deployment_finalize(GObject *object)
 {
     OsinfoDeployment *deployment = OSINFO_DEPLOYMENT(object);
 
-    g_list_foreach(deployment->priv->deviceLinks, osinfo_device_link_free, NULL);
-    g_list_free(deployment->priv->deviceLinks);
+    g_list_free_full(deployment->priv->deviceLinks, g_object_unref);
 
     g_object_unref(deployment->priv->os);
     g_object_unref(deployment->priv->platform);
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index dbff95b..77ca5ea 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -2002,8 +2002,7 @@ static void osinfo_loader_entity_files_free(OsinfoLoaderEntityFiles *files)
 {
     if (!files)
         return;
-    g_list_foreach(files->extensions, (GFunc)g_object_unref, NULL);
-    g_list_free(files->extensions);
+    g_list_free_full(files->extensions, g_object_unref);
     if (files->master)
         g_object_unref(files->master);
     g_free(files);
diff --git a/tests/test-isodetect.c b/tests/test-isodetect.c
index 717b822..db7b108 100644
--- a/tests/test-isodetect.c
+++ b/tests/test-isodetect.c
@@ -45,6 +45,14 @@ static void free_iso(struct ISOInfo *info)
     g_free(info);
 }
 
+/* void* wrapper for free_iso, so it can be used where a void* parameter
+ * is required (e.g. g_list_free_full), with no need for casts.
+ */
+static void free_iso_void(void *info)
+{
+    free_iso((struct ISOInfo *)info);
+}
+
 static gboolean load_langs(GFile *file, struct ISOInfo *info, GError **error)
 {
     char *path;
@@ -243,8 +251,7 @@ static GList *load_distro(GFile *dir, const gchar *shortid, GError **error) {
     return ret;
 
  error:
-    g_list_foreach(ret, (GFunc)free_iso, NULL);
-    g_list_free(ret);
+    g_list_free_full(ret, free_iso_void);
     ret = NULL;
     goto cleanup;
 }
@@ -289,8 +296,7 @@ static GList *load_distros(GFile *dir, GError **error)
     return ret;
 
  error:
-    g_list_foreach(ret, (GFunc)free_iso, NULL);
-    g_list_free(ret);
+    g_list_free_full(ret, free_iso_void);
     ret = NULL;
     goto cleanup;
 }
@@ -410,8 +416,7 @@ static void test_one(const gchar *vendor)
         test_langs(info);
     }
 
-    g_list_foreach(isos, (GFunc)free_iso, NULL);
-    g_list_free(isos);
+    g_list_free_full(isos, free_iso_void);
 
     g_object_unref(loader);
 }
-- 
2.17.2




More information about the Libosinfo mailing list