Laszlo Ersek
2022-Jan-28 16:12 UTC
[Libguestfs] [v2v PATCH 3/7] convert/libosinfo: factor out v2v_osinfo_device_list_to_value_list()
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>
---
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
Richard W.M. Jones
2022-Jan-28 17:04 UTC
[Libguestfs] [v2v PATCH 3/7] convert/libosinfo: factor out v2v_osinfo_device_list_to_value_list()
On Fri, Jan 28, 2022 at 05:12:14PM +0100, Laszlo Ersek wrote:> 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> > --- > 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); > +}Patch is a bit confusing because of the necessary reordering of functions, but looks good. ACK Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW