summaryrefslogtreecommitdiff
path: root/src/shared/util.c
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2013-10-19 00:46:07 +0200
committerTom Gundersen <teg@jklm.no>2013-10-19 00:46:10 +0200
commit295edddf5a2d884222a26935b40a4e99b924543d (patch)
tree799818f5c67f5442b7878a63264a2b53017a0ea0 /src/shared/util.c
parentefc815a13d4b4cae59045c6a120a6c6f7dac2d7b (diff)
kerne-command-line: introduce option 'systemd.restore_state'
When set to 0 this will stop tools like the backlight and rfkill tools to restore state from previous boot. This is useful in case the stored state is bogus to the extent that it is preventing you from resetting it (e.g., the backlight settings cause the screen to be off on boot on a system where the backlight can not be adjusted directly from the keyboard).
Diffstat (limited to 'src/shared/util.c')
-rw-r--r--src/shared/util.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index 1822770304..d086fac7f8 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -76,6 +76,7 @@
#include "device-nodes.h"
#include "utf8.h"
#include "gunicode.h"
+#include "virt.h"
int saved_argc = 0;
char **saved_argv = NULL;
@@ -5990,3 +5991,25 @@ int split_pair(const char *s, const char *sep, char **l, char **r) {
return 0;
}
+
+bool restore_state(void) {
+ _cleanup_free_ char *line;
+ char *w, *state;
+ int r;
+ size_t l;
+
+ if (detect_container(NULL) > 0)
+ return true;
+
+ r = read_one_line_file("/proc/cmdline", &line);
+ if (r < 0) {
+ log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r));
+ return 0;
+ }
+
+ FOREACH_WORD_QUOTED(w, l, line, state)
+ if (strneq(w, "systemd.restore_state=0", l))
+ return false;
+
+ return true;
+}