On Mon, Aug 19, 2013 at 12:32:05PM +0200, Peter Krempa wrote: > 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 | 34 +++++++++++++++++++++++++++++++--- > src/util/virdbus.h | 1 + > 3 files changed, 33 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..1ef78ce 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,33 @@ 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; > +} > + > + > +DBusConnection *virDBusHasSystemBus(void) > +{ > + DBusConnection *bus; > + > + if (!(bus = virDBusGetSystemBusInternal())) > + VIR_DEBUG("System DBus not available: %s", NULLSTR(systemdbuserr.message)); > + > + return bus; > } > > > @@ -1195,6 +1215,14 @@ DBusConnection *virDBusGetSystemBus(void) > return NULL; > } > > + > +DBusConnection *virDBusHasSystemBus(void) > +{ > + VIR_DEBUG("DBus support not compiled into this binary"); > + return NULL; > +} > + > + > DBusConnection *virDBusGetSessionBus(void) > { > virReportError(VIR_ERR_INTERNAL_ERROR, > diff --git a/src/util/virdbus.h b/src/util/virdbus.h > index 39de479..63908fe 100644 > --- a/src/util/virdbus.h > +++ b/src/util/virdbus.h > @@ -32,6 +32,7 @@ > # include "internal.h" > > DBusConnection *virDBusGetSystemBus(void); > +DBusConnection *virDBusHasSystemBus(void); This should be a returning a 'bool' IMHO. eg usage would be if (virDBusHasSystemBus()) { DBusConnection conn = virDBusGetSystemBus() ....dbus code path... } else { ... non-dbus code path... } Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list