[PATCH 1/2] interface_udev: Replace udevNumOfInterfacesByStatus by udevListInterfacesByStatus

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

 



Make the array-filling operation of udevListInterfacesByStatus optional
and replace the completely redundant udevNumOfInterfacesByStatus by it.

Further patches fixing the listing will not need to be duplicated.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/interface/interface_backend_udev.c | 76 ++++++++------------------
 1 file changed, 22 insertions(+), 54 deletions(-)

diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c
index 4091483060..826f486049 100644
--- a/src/interface/interface_backend_udev.c
+++ b/src/interface/interface_backend_udev.c
@@ -137,55 +137,21 @@ udevGetDevices(struct udev *udev, virUdevStatus status)
     return enumerate;
 }

-static int
-udevNumOfInterfacesByStatus(virConnectPtr conn, virUdevStatus status,
-                            virInterfaceObjListFilter filter)
-{
-    struct udev *udev = udev_ref(driver->udev);
-    struct udev_enumerate *enumerate = NULL;
-    struct udev_list_entry *devices;
-    struct udev_list_entry *dev_entry;
-    int count = 0;
-
-    enumerate = udevGetDevices(udev, status);
-
-    if (!enumerate) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("failed to get number of %1$s interfaces on host"),
-                       virUdevStatusString(status));
-        count = -1;
-        goto cleanup;
-    }
-
-    /* Do the scan to load up the enumeration */
-    udev_enumerate_scan_devices(enumerate);
-
-    /* Get a list we can walk */
-    devices = udev_enumerate_get_list_entry(enumerate);
-
-    /* For each item so we can count */
-    udev_list_entry_foreach(dev_entry, devices) {
-        struct udev_device *dev;
-        const char *path;
-        g_autoptr(virInterfaceDef) def = NULL;
-
-        path = udev_list_entry_get_name(dev_entry);
-        dev = udev_device_new_from_syspath(udev, path);
-
-        def = udevGetMinimalDefForDevice(dev);
-        if (filter(conn, def))
-            count++;
-        udev_device_unref(dev);
-    }
-
- cleanup:
-    if (enumerate)
-        udev_enumerate_unref(enumerate);
-    udev_unref(udev);
-
-    return count;
-}

+/**
+ * udevListInterfacesByStatus:
+ *
+ * @conn: connection object
+ * @names: optional pointer to array to be filled with interface names
+ * @names_len: size of @names
+ * @status: status of interfaces to be listed
+ * @filter: ACL filter function
+ *
+ * Lists interfaces with status matching @status filling them into @names (if
+ * non-NULL) and returns the number of such interfaces.
+ *
+ * In case of an error -1 is returned and no interfaces are filled into @names.
+ */
 static int
 udevListInterfacesByStatus(virConnectPtr conn,
                            char **const names,
@@ -222,7 +188,7 @@ udevListInterfacesByStatus(virConnectPtr conn,
         g_autoptr(virInterfaceDef) def = NULL;

         /* Ensure we won't exceed the size of our array */
-        if (count >= names_len)
+        if (names && count >= names_len)
             break;

         path = udev_list_entry_get_name(dev_entry);
@@ -230,7 +196,8 @@ udevListInterfacesByStatus(virConnectPtr conn,

         def = udevGetMinimalDefForDevice(dev);
         if (filter(conn, def)) {
-            names[count] = g_strdup(udev_device_get_sysname(dev));
+            if (names)
+                names[count] = g_strdup(udev_device_get_sysname(dev));
             count++;
         }
         udev_device_unref(dev);
@@ -242,14 +209,15 @@ udevListInterfacesByStatus(virConnectPtr conn,
     return count;
 }

+
 static int
 udevConnectNumOfInterfaces(virConnectPtr conn)
 {
     if (virConnectNumOfInterfacesEnsureACL(conn) < 0)
         return -1;

-    return udevNumOfInterfacesByStatus(conn, VIR_UDEV_IFACE_ACTIVE,
-                                       virConnectNumOfInterfacesCheckACL);
+    return udevListInterfacesByStatus(conn, NULL, 0, VIR_UDEV_IFACE_ACTIVE,
+                                      virConnectNumOfInterfacesCheckACL);
 }

 static int
@@ -271,8 +239,8 @@ udevConnectNumOfDefinedInterfaces(virConnectPtr conn)
     if (virConnectNumOfDefinedInterfacesEnsureACL(conn) < 0)
         return -1;

-    return udevNumOfInterfacesByStatus(conn, VIR_UDEV_IFACE_INACTIVE,
-                                       virConnectNumOfDefinedInterfacesCheckACL);
+    return udevListInterfacesByStatus(conn, NULL, 0, VIR_UDEV_IFACE_INACTIVE,
+                                      virConnectNumOfDefinedInterfacesCheckACL);
 }

 static int
-- 
2.44.0
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux