From 2781384efc02836d14b5f7169ba2c4025fd08144 Mon Sep 17 00:00:00 2001 Message-Id: <2781384efc02836d14b5f7169ba2c4025fd08144.1381871412.git.jdenemar@redhat.com> From: Peter Krempa Date: Mon, 14 Oct 2013 16:45:11 +0100 Subject: [PATCH] virdbus: Add virDBusHasSystemBus() For https://bugzilla.redhat.com/show_bug.cgi?id=1018730 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. (cherry picked from commit 2398dd3d3ea2e060318abd3d9346ad65df910803) Signed-off-by: Jiri Denemark --- src/libvirt_private.syms | 1 + src/util/virdbus.c | 36 +++++++++++++++++++++++++++++++++--- src/util/virdbus.h | 1 + 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index e6c23e4..47e989c 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..62c31be 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,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, 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