chiark / gitweb /
Assume that /proc/meminfo can be missing
[elogind.git] / src / shared / specifier.c
index 599027cd47e795f7ffc42304601ccddcbf017cf4..bb8859fdfd8b6e6480fb81c5fe841f890fc6eab3 100644 (file)
@@ -20,6 +20,7 @@
 ***/
 
 #include <string.h>
+#include <sys/utsname.h>
 
 #include "macro.h"
 #include "util.h"
@@ -109,3 +110,50 @@ char *specifier_printf(const char *text, const Specifier table[], void *userdata
 char* specifier_string(char specifier, void *data, void *userdata) {
         return strdup(strempty(data));
 }
+
+char *specifier_machine_id(char specifier, void *data, void *userdata) {
+        sd_id128_t id;
+        char *buf;
+        int r;
+
+        r = sd_id128_get_machine(&id);
+        if (r < 0)
+                return NULL;
+
+        buf = new(char, 33);
+        if (!buf)
+                return NULL;
+
+        return sd_id128_to_string(id, buf);
+}
+
+char *specifier_boot_id(char specifier, void *data, void *userdata) {
+        sd_id128_t id;
+        char *buf;
+        int r;
+
+        r = sd_id128_get_boot(&id);
+        if (r < 0)
+                return NULL;
+
+        buf = new(char, 33);
+        if (!buf)
+                return NULL;
+
+        return sd_id128_to_string(id, buf);
+}
+
+char *specifier_host_name(char specifier, void *data, void *userdata) {
+        return gethostname_malloc();
+}
+
+char *specifier_kernel_release(char specifier, void *data, void *userdata) {
+        struct utsname uts;
+        int r;
+
+        r = uname(&uts);
+        if (r < 0)
+                return NULL;
+
+        return strdup(uts.release);
+}