X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsd-daemon.c;h=5df70e38d524d2f5866c31f54eb84e854761d941;hb=71a6f7538199f571b92e0c9fbb5819f8ce0e0d20;hp=0dad73f94d6064e39bad7b84cadf3dea8b3f8b57;hpb=8c47c7325fa1ab72febf807f8831ff24c75fbf45;p=elogind.git diff --git a/src/sd-daemon.c b/src/sd-daemon.c index 0dad73f94..5df70e38d 100644 --- a/src/sd-daemon.c +++ b/src/sd-daemon.c @@ -141,7 +141,7 @@ int sd_is_fifo(int fd, const char *path) { 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; @@ -344,10 +344,8 @@ int sd_notify(int unset_environment, const char *state) { 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) { @@ -394,7 +392,7 @@ int sd_notify(int unset_environment, const char *state) { goto finish; } - r = 0; + r = 1; finish: if (unset_environment) @@ -428,3 +426,23 @@ int sd_notifyf(int unset_environment, const char *format, ...) { 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 +}