From: Michal Privoznik Date: Fri, 17 May 2019 09:09:45 +0000 (+0200) Subject: m4: Provide default value fore UDEVADM X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=523b799d3c356b9b4ea0b117a60cfc3b603eaffa;p=libvirt.git m4: Provide default value fore UDEVADM https://bugzilla.redhat.com/show_bug.cgi?id=1710575 It may happen that the system where libvirt is built at doesn't have udevadm binary but the one where it runs does have it. If we change how udevadm is run in virWaitForDevices() then we can safely pass a default value in m4 macro. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- diff --git a/m4/virt-external-programs.m4 b/m4/virt-external-programs.m4 index 3c915e1a65..f1ae104b32 100644 --- a/m4/virt-external-programs.m4 +++ b/m4/virt-external-programs.m4 @@ -45,7 +45,7 @@ AC_DEFUN([LIBVIRT_CHECK_EXTERNAL_PROGRAMS], [ AC_PATH_PROG([DNSMASQ], [dnsmasq], [dnsmasq], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([RADVD], [radvd], [radvd], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([TC], [tc], [tc], [$LIBVIRT_SBIN_PATH]) - AC_PATH_PROG([UDEVADM], [udevadm], [], [$LIBVIRT_SBIN_PATH]) + AC_PATH_PROG([UDEVADM], [udevadm], [udevadm], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([MODPROBE], [modprobe], [modprobe], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([RMMOD], [rmmod], [rmmod], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([MMCTL], [mm-ctl], [mm-ctl], [$LIBVIRT_SBIN_PATH]) @@ -65,11 +65,8 @@ AC_DEFUN([LIBVIRT_CHECK_EXTERNAL_PROGRAMS], [ [Location or name of the mm-ctl program]) AC_DEFINE_UNQUOTED([OVSVSCTL], ["$OVSVSCTL"], [Location or name of the ovs-vsctl program]) - - if test -n "$UDEVADM"; then - AC_DEFINE_UNQUOTED([UDEVADM], ["$UDEVADM"], - [Location or name of the udevadm program]) - fi + AC_DEFINE_UNQUOTED([UDEVADM], ["$UDEVADM"], + [Location or name of the udevadm program]) if test -n "$MODPROBE"; then AC_DEFINE_UNQUOTED([MODPROBE], ["$MODPROBE"], [Location or name of the modprobe program]) diff --git a/src/util/virutil.c b/src/util/virutil.c index ecef24d2f3..b85769d936 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -1479,25 +1479,24 @@ virSetUIDGIDWithCaps(uid_t uid, gid_t gid, gid_t *groups, int ngroups, #endif -#if defined(UDEVADM) void virWaitForDevices(void) { - const char *const settleprog[] = { UDEVADM, "settle", NULL }; + VIR_AUTOPTR(virCommand) cmd = NULL; + VIR_AUTOFREE(char *) udev = NULL; int exitstatus; - if (access(settleprog[0], X_OK) != 0) + if (!(udev = virFindFileInPath(UDEVADM))) + return; + + if (!(cmd = virCommandNewArgList(udev, "settle", NULL))) return; /* * NOTE: we ignore errors here; this is just to make sure that any device * nodes that are being created finish before we try to scan them. */ - ignore_value(virRun(settleprog, &exitstatus)); + ignore_value(virCommandRun(cmd, &exitstatus)); } -#else -void virWaitForDevices(void) -{} -#endif #if WITH_DEVMAPPER bool