chiark / gitweb /
bus: use new property retrieval calls everywhere
[elogind.git] / src / shared / util.c
index ef3b67b597594597e0c005fa628565158b493076..7d41a7ae8db891dcbdf52186ee5c3c51a57ccdb5 100644 (file)
@@ -5466,6 +5466,7 @@ const char *draw_special_char(DrawSpecialChar ch) {
                         [DRAW_TREE_RIGHT]         = "\342\224\224\342\224\200", /* └─ */
                         [DRAW_TREE_SPACE]         = "  ",                       /*    */
                         [DRAW_TRIANGULAR_BULLET]  = "\342\200\243 ",            /* ‣  */
+                        [DRAW_BLACK_CIRCLE]       = "\342\227\217 ",            /* ●  */
                 },
                 /* ASCII fallback */ {
                         [DRAW_TREE_VERT]          = "| ",
@@ -5473,6 +5474,7 @@ const char *draw_special_char(DrawSpecialChar ch) {
                         [DRAW_TREE_RIGHT]         = "`-",
                         [DRAW_TREE_SPACE]         = "  ",
                         [DRAW_TRIANGULAR_BULLET]  = "> ",
+                        [DRAW_BLACK_CIRCLE]       = "* ",
                 }
         };
 
@@ -5992,24 +5994,36 @@ int split_pair(const char *s, const char *sep, char **l, char **r) {
         return 0;
 }
 
-bool restore_state(void) {
+int shall_restore_state(void) {
         _cleanup_free_ char *line;
         char *w, *state;
-        int r;
         size_t l;
+        int r;
 
-        if (detect_container(NULL) > 0)
-                return true;
+        r = proc_cmdline(&line);
+        if (r < 0)
+                return r;
+        if (r == 0) /* Container ... */
+                return 1;
 
-        r = read_one_line_file("/proc/cmdline", &line);
-        if (r < 0) {
-                log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r));
-                return true; /* something is very wrong, let's not make it worse */
+        FOREACH_WORD_QUOTED(w, l, line, state)
+                if (l == 23 && memcmp(w, "systemd.restore_state=0", 23))
+                        return 0;
+
+        return 1;
+}
+
+int proc_cmdline(char **ret) {
+        int r;
+
+        if (detect_container(NULL) > 0) {
+                *ret = NULL;
+                return 0;
         }
 
-        FOREACH_WORD_QUOTED(w, l, line, state)
-                if (strneq(w, "systemd.restore_state=0", l))
-                        return false;
+        r = read_one_line_file("/proc/cmdline", ret);
+        if (r < 0)
+                return r;
 
-        return true;
+        return 1;
 }