Some systems may not use DBus in their system. Add a method to check if
the system bus is available that doesn't print error messages so that
code can later check for this condition and use an alternative approach.
---
src/libvirt_private.syms | 1 +
src/util/virdbus.c | 33 ++++++++++++++++++++++++++++++---
src/util/virdbus.h | 1 +
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index a958d94..c25a61f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1294,6 +1294,7 @@ virConfWriteMem;
virDBusCallMethod;
virDBusGetSessionBus;
virDBusGetSystemBus;
+virDBusHasSystemBus;
virDBusMessageDecode;
virDBusMessageEncode;
virDBusMessageRead;
diff --git a/src/util/virdbus.c b/src/util/virdbus.c
index e88dc26..1370a5d 100644
--- a/src/util/virdbus.c
+++ b/src/util/virdbus.c
@@ -73,7 +73,8 @@ static void virDBusSystemBusInit(void)
systembus = virDBusBusInit(DBUS_BUS_SYSTEM, &systemdbuserr);
}
-DBusConnection *virDBusGetSystemBus(void)
+static DBusConnection
+*virDBusGetSystemBusInternal(void)
{
if (virOnce(&systemonce, virDBusSystemBusInit) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -81,14 +82,32 @@ DBusConnection *virDBusGetSystemBus(void)
return NULL;
}
- if (!systembus) {
+ return systembus;
+}
+
+
+DBusConnection *virDBusGetSystemBus(void)
+{
+ DBusConnection *bus;
+
+ if (!(bus = virDBusGetSystemBusInternal())) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unable to get DBus system bus connection: %s"),
systemdbuserr.message ? systemdbuserr.message : "watch setup
failed");
return NULL;
}
- return systembus;
+ return bus;
+}
+
+
+bool virDBusHasSystemBus(void)
+{
+ if (virDBusGetSystemBusInternal())
+ return true;
+
+ VIR_DEBUG("System DBus not available: %s",
NULLSTR(systemdbuserr.message));
+ return false;
}
@@ -1195,6 +1214,14 @@ DBusConnection *virDBusGetSystemBus(void)
return NULL;
}
+
+bool virDBusHasSystemBus(void)
+{
+ VIR_DEBUG("DBus support not compiled into this binary");
+ return false;
+}
+
+
DBusConnection *virDBusGetSessionBus(void)
{
virReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/util/virdbus.h b/src/util/virdbus.h
index 39de479..a5aab56 100644
--- a/src/util/virdbus.h
+++ b/src/util/virdbus.h
@@ -32,6 +32,7 @@
# include "internal.h"
DBusConnection *virDBusGetSystemBus(void);
+bool virDBusHasSystemBus(void);
DBusConnection *virDBusGetSessionBus(void);
int virDBusCallMethod(DBusConnection *conn,
--
1.8.3.2