virdbus: Add virDBusHasSystemBus()

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.
This commit is contained in:
Peter Krempa 2013-08-19 11:24:04 +02:00
parent 39d963d1c0
commit 2398dd3d3e
3 changed files with 35 additions and 3 deletions

View File

@ -1294,6 +1294,7 @@ virConfWriteMem;
virDBusCallMethod;
virDBusGetSessionBus;
virDBusGetSystemBus;
virDBusHasSystemBus;
virDBusMessageDecode;
virDBusMessageEncode;
virDBusMessageRead;

View File

@ -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,34 @@ 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 +1216,15 @@ 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,

View File

@ -32,6 +32,7 @@
# include "internal.h"
DBusConnection *virDBusGetSystemBus(void);
bool virDBusHasSystemBus(void);
DBusConnection *virDBusGetSessionBus(void);
int virDBusCallMethod(DBusConnection *conn,