chiark / gitweb /
dbus: expose whether we have a hardware watchdog on the bus
authorLennart Poettering <lennart@poettering.net>
Fri, 13 Apr 2012 17:45:53 +0000 (19:45 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 13 Apr 2012 17:46:51 +0000 (19:46 +0200)
src/core/dbus-manager.c

index 46b47849d2d80b2a3340147f5be7a4612cd328fe..88945b5c64c214b0a778678033569c7f0534b29d 100644 (file)
         "  <property name=\"DefaultStandardOutput\" type=\"s\" access=\"read\"/>\n" \
         "  <property name=\"DefaultStandardError\" type=\"s\" access=\"read\"/>\n" \
         "  <property name=\"RuntimeWatchdogUSec\" type=\"s\" access=\"read\"/>\n" \
-        "  <property name=\"ShutdownWatchdogUSec\" type=\"s\" access=\"read\"/>\n"
+        "  <property name=\"ShutdownWatchdogUSec\" type=\"s\" access=\"read\"/>\n" \
+        "  <property name=\"HaveWatchdog\" type=\"b\" access=\"read\"/>\n"
 
 #ifdef HAVE_SYSV_COMPAT
 #define BUS_MANAGER_INTERFACE_PROPERTIES_SYSV                           \
@@ -493,6 +494,20 @@ static int bus_manager_send_unit_files_changed(Manager *m) {
         return r;
 }
 
+static int bus_manager_append_have_watchdog(DBusMessageIter *i, const char *property, void *data) {
+        dbus_bool_t b;
+
+        assert(i);
+        assert(property);
+
+        b = access("/dev/watchdog", F_OK) >= 0;
+
+        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &b))
+                return -ENOMEM;
+
+        return 0;
+}
+
 static const char systemd_property_string[] =
         PACKAGE_STRING "\0"
         DISTRIBUTION "\0"
@@ -534,6 +549,7 @@ static const BusProperty bus_manager_properties[] = {
         { "DefaultStandardError",  bus_manager_append_exec_output, "s", offsetof(Manager, default_std_error)           },
         { "RuntimeWatchdogUSec", bus_property_append_usec,         "t", offsetof(Manager, runtime_watchdog),           },
         { "ShutdownWatchdogUSec", bus_property_append_usec,        "t", offsetof(Manager, shutdown_watchdog),          },
+        { "HaveWatchdog",  bus_manager_append_have_watchdog,       "b", 0                                              },
 #ifdef HAVE_SYSV_COMPAT
         { "SysVConsole",   bus_property_append_bool,               "b", offsetof(Manager, sysv_console)                },
         { "SysVInitPath",  bus_property_append_strv,              "as", offsetof(Manager, lookup_paths.sysvinit_path), true },