[libvirt] [PATCHv2 1/3] virdbus: Add virDBusHasSystemBus()
Daniel P. Berrange
berrange at redhat.com
Mon Aug 19 10:45:09 UTC 2013
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 :|
More information about the libvir-list
mailing list