[Libguestfs] [v2v PATCH v2 3/7] convert/libosinfo: factor out v2v_osinfo_device_list_to_value_list()

Laszlo Ersek lersek at redhat.com
Tue Feb 1 12:32:15 UTC 2022


Move the guts of v2v_osinfo_os_get_all_devices() to a new static function
called v2v_osinfo_device_list_to_value_list().

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2043333
Signed-off-by: Laszlo Ersek <lersek at redhat.com>
Acked-by: Richard W.M. Jones <rjones at redhat.com>
---

Notes:
    v2:
    - pick up Rich's ACK

 convert/libosinfo-c.c | 126 +++++++++++++++++++++++-------------------
 1 file changed, 68 insertions(+), 58 deletions(-)

diff --git a/convert/libosinfo-c.c b/convert/libosinfo-c.c
index ec7c06d379e3..bc5816f6dacb 100644
--- a/convert/libosinfo-c.c
+++ b/convert/libosinfo-c.c
@@ -207,65 +207,12 @@ glist_to_value_list (GList *list)
     rv = v;
   }
 
   CAMLreturn (rv);
 }
 
-value
-v2v_osinfo_os_get_device_drivers (value osv)
-{
-  CAMLparam1 (osv);
-  CAMLlocal4 (rv, v, vi, copyv);
-  OsinfoDeviceDriverList *list;
-  gint i, len;
-
-  list = osinfo_os_get_device_drivers (OsinfoOs_t_val (osv));
-  len = osinfo_list_get_length (OSINFO_LIST(list));
-
-  rv = Val_emptylist;
-  for (i = len - 1; i >= 0; --i) {
-    OsinfoDeviceDriver *driver;
-    const gchar *str;
-    gboolean b;
-    GList *l;
-    gint64 i64;
-
-    driver = OSINFO_DEVICE_DRIVER(osinfo_list_get_nth (OSINFO_LIST(list), i));
-
-    vi = caml_alloc (6, 0);
-    str = osinfo_device_driver_get_architecture (driver);
-    copyv = caml_copy_string (str);
-    Store_field (vi, 0, copyv);
-    str = osinfo_device_driver_get_location (driver);
-    copyv = caml_copy_string (str);
-    Store_field (vi, 1, copyv);
-    b = osinfo_device_driver_get_pre_installable (driver);
-    Store_field (vi, 2, Val_bool (b));
-    b = osinfo_device_driver_get_signed (driver);
-    Store_field (vi, 3, Val_bool (b));
-#if IS_LIBOSINFO_VERSION(1, 7, 0)
-    i64 = osinfo_device_driver_get_priority (driver);
-#else
-    /* Same as OSINFO_DEVICE_DRIVER_DEFAULT_PRIORITY in libosinfo 1.7.0+. */
-    i64 = 50;
-#endif
-    copyv = caml_copy_int64 (i64);
-    Store_field (vi, 4, copyv);
-    l = osinfo_device_driver_get_files (driver);
-    Store_field (vi, 5, glist_to_value_list (l));
-    g_list_free (l);
-
-    v = caml_alloc (2, 0);
-    Store_field (v, 0, vi);
-    Store_field (v, 1, rv);
-    rv = v;
-  }
-
-  CAMLreturn (rv);
-}
-
 /* Collect OsinfoDevice properties from two levels:
  *
  * - The OSINFO_ENTITY_PROP_ID property, originating from the OsinfoEntity base
  *   class. This is a unique URI, identifying the device.
  *
  * - All currently known OSINFO_DEVICE_PROP_* properties, originating from the
@@ -285,23 +232,21 @@ static const char * const device_prop[] = {
   OSINFO_DEVICE_PROP_CLASS,
   OSINFO_DEVICE_PROP_BUS_TYPE,
   OSINFO_DEVICE_PROP_SUBSYSTEM,
 };
 #define NUM_DEVICE_PROPS (sizeof device_prop / sizeof device_prop[0])
 
-value
-v2v_osinfo_os_get_all_devices (value osv)
+static value
+v2v_osinfo_device_list_to_value_list (OsinfoDeviceList *dev_list)
 {
-  CAMLparam1 (osv);
+  CAMLparam0 ();
   CAMLlocal4 (retvalv, linkv, propsv, copyv);
-  g_autoptr (OsinfoDeviceList) dev_list = NULL;
   OsinfoList *ent_list;
   gint ent_nr;
 
   retvalv = Val_emptylist;
-  dev_list = osinfo_os_get_all_devices (OsinfoOs_t_val (osv), NULL);
   ent_list = OSINFO_LIST (dev_list);
   ent_nr = osinfo_list_get_length (ent_list);
 
   while (ent_nr > 0) {
     OsinfoEntity *ent;
     size_t prop_nr;
@@ -325,6 +270,71 @@ v2v_osinfo_os_get_all_devices (value osv)
     Store_field (linkv, 1, retvalv);
     retvalv = linkv;
   }
 
   CAMLreturn (retvalv);
 }
+
+value
+v2v_osinfo_os_get_device_drivers (value osv)
+{
+  CAMLparam1 (osv);
+  CAMLlocal4 (rv, v, vi, copyv);
+  OsinfoDeviceDriverList *list;
+  gint i, len;
+
+  list = osinfo_os_get_device_drivers (OsinfoOs_t_val (osv));
+  len = osinfo_list_get_length (OSINFO_LIST(list));
+
+  rv = Val_emptylist;
+  for (i = len - 1; i >= 0; --i) {
+    OsinfoDeviceDriver *driver;
+    const gchar *str;
+    gboolean b;
+    GList *l;
+    gint64 i64;
+
+    driver = OSINFO_DEVICE_DRIVER(osinfo_list_get_nth (OSINFO_LIST(list), i));
+
+    vi = caml_alloc (6, 0);
+    str = osinfo_device_driver_get_architecture (driver);
+    copyv = caml_copy_string (str);
+    Store_field (vi, 0, copyv);
+    str = osinfo_device_driver_get_location (driver);
+    copyv = caml_copy_string (str);
+    Store_field (vi, 1, copyv);
+    b = osinfo_device_driver_get_pre_installable (driver);
+    Store_field (vi, 2, Val_bool (b));
+    b = osinfo_device_driver_get_signed (driver);
+    Store_field (vi, 3, Val_bool (b));
+#if IS_LIBOSINFO_VERSION(1, 7, 0)
+    i64 = osinfo_device_driver_get_priority (driver);
+#else
+    /* Same as OSINFO_DEVICE_DRIVER_DEFAULT_PRIORITY in libosinfo 1.7.0+. */
+    i64 = 50;
+#endif
+    copyv = caml_copy_int64 (i64);
+    Store_field (vi, 4, copyv);
+    l = osinfo_device_driver_get_files (driver);
+    Store_field (vi, 5, glist_to_value_list (l));
+    g_list_free (l);
+
+    v = caml_alloc (2, 0);
+    Store_field (v, 0, vi);
+    Store_field (v, 1, rv);
+    rv = v;
+  }
+
+  CAMLreturn (rv);
+}
+
+value
+v2v_osinfo_os_get_all_devices (value osv)
+{
+  CAMLparam1 (osv);
+  CAMLlocal1 (retvalv);
+  g_autoptr (OsinfoDeviceList) dev_list = NULL;
+
+  dev_list = osinfo_os_get_all_devices (OsinfoOs_t_val (osv), NULL);
+  retvalv = v2v_osinfo_device_list_to_value_list (dev_list);
+  CAMLreturn (retvalv);
+}
-- 
2.19.1.3.g30247aa5d201




More information about the Libguestfs mailing list