struct stat st_path;
memset(&st_path, 0, sizeof(st_path));
- if (fstat(fd, &st_path) < 0) {
+ if (stat(path, &st_path) < 0) {
if (errno == ENOENT || errno == ENOTDIR)
return 0;
goto finish;
}
- if (!(e = getenv("NOTIFY_SOCKET"))) {
- r = 0;
- goto finish;
- }
+ if (!(e = getenv("NOTIFY_SOCKET")))
+ return 0;
/* Must be an abstract socket, or an absolute path */
if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
goto finish;
}
- r = 0;
+ r = 1;
finish:
if (unset_environment)
return r;
#endif
}
+
+int sd_booted(void) {
+#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
+ return 0;
+#else
+
+ struct stat a, b;
+
+ /* We simply test whether the systemd cgroup hierarchy is
+ * mounted */
+
+ if (lstat("/cgroup", &a) < 0)
+ return 0;
+
+ if (lstat("/cgroup/systemd", &b) < 0)
+ return 0;
+
+ return a.st_dev != b.st_dev;
+#endif
+}