Blob Blame History Raw
From 2781384efc02836d14b5f7169ba2c4025fd08144 Mon Sep 17 00:00:00 2001
Message-Id: <2781384efc02836d14b5f7169ba2c4025fd08144.1381871412.git.jdenemar@redhat.com>
From: Peter Krempa <pkrempa@redhat.com>
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 <jdenemar@redhat.com>
---
 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