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