mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
interface_udev: Replace udevNumOfInterfacesByStatus by udevListInterfacesByStatus
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@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
e6a5592787
commit
bc596f2751
@ -137,55 +137,21 @@ udevGetDevices(struct udev *udev, virUdevStatus status)
|
|||||||
return enumerate;
|
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
|
static int
|
||||||
udevListInterfacesByStatus(virConnectPtr conn,
|
udevListInterfacesByStatus(virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
@ -222,7 +188,7 @@ udevListInterfacesByStatus(virConnectPtr conn,
|
|||||||
g_autoptr(virInterfaceDef) def = NULL;
|
g_autoptr(virInterfaceDef) def = NULL;
|
||||||
|
|
||||||
/* Ensure we won't exceed the size of our array */
|
/* Ensure we won't exceed the size of our array */
|
||||||
if (count >= names_len)
|
if (names && count >= names_len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
path = udev_list_entry_get_name(dev_entry);
|
path = udev_list_entry_get_name(dev_entry);
|
||||||
@ -230,7 +196,8 @@ udevListInterfacesByStatus(virConnectPtr conn,
|
|||||||
|
|
||||||
def = udevGetMinimalDefForDevice(dev);
|
def = udevGetMinimalDefForDevice(dev);
|
||||||
if (filter(conn, def)) {
|
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++;
|
count++;
|
||||||
}
|
}
|
||||||
udev_device_unref(dev);
|
udev_device_unref(dev);
|
||||||
@ -242,14 +209,15 @@ udevListInterfacesByStatus(virConnectPtr conn,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
udevConnectNumOfInterfaces(virConnectPtr conn)
|
udevConnectNumOfInterfaces(virConnectPtr conn)
|
||||||
{
|
{
|
||||||
if (virConnectNumOfInterfacesEnsureACL(conn) < 0)
|
if (virConnectNumOfInterfacesEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return udevNumOfInterfacesByStatus(conn, VIR_UDEV_IFACE_ACTIVE,
|
return udevListInterfacesByStatus(conn, NULL, 0, VIR_UDEV_IFACE_ACTIVE,
|
||||||
virConnectNumOfInterfacesCheckACL);
|
virConnectNumOfInterfacesCheckACL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -271,8 +239,8 @@ udevConnectNumOfDefinedInterfaces(virConnectPtr conn)
|
|||||||
if (virConnectNumOfDefinedInterfacesEnsureACL(conn) < 0)
|
if (virConnectNumOfDefinedInterfacesEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return udevNumOfInterfacesByStatus(conn, VIR_UDEV_IFACE_INACTIVE,
|
return udevListInterfacesByStatus(conn, NULL, 0, VIR_UDEV_IFACE_INACTIVE,
|
||||||
virConnectNumOfDefinedInterfacesCheckACL);
|
virConnectNumOfDefinedInterfacesCheckACL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user