From: Harald Hoyer <[email protected]>

in_initrd() checks, if the stat() for the device for "/" is 1, which it
is for the initramfs.
---
 src/shared/util.c |   15 +++++++++++++++
 src/shared/util.h |    1 +
 2 files changed, 16 insertions(+)

diff --git a/src/shared/util.c b/src/shared/util.c
index a8c361c..bfa9509 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -5610,3 +5610,18 @@ int can_sleep(const char *type) {
         free(p);
         return found;
 }
+
+bool in_initrd(void) {
+        static bool checked=false;
+        static bool is_in_initrd=false;
+
+        if (!checked) {
+                struct stat sb;
+                if (stat("/", &sb) == 0) {
+                        is_in_initrd = (sb.st_dev == 1);
+                        checked = true;
+                }
+        }
+
+        return is_in_initrd;
+}
diff --git a/src/shared/util.h b/src/shared/util.h
index a7ddb6c..58db27f 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -509,4 +509,5 @@ int getenv_for_pid(pid_t pid, const char *field, char 
**_value);
 
 int can_sleep(const char *type);
 
+bool in_initrd(void);
 #endif
-- 
1.7.10.1

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to