X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsd-daemon.c;h=3bb258d3418570fe6c5ac8540c47c089a77b703e;hp=e6b9a6f3c217ca2fff601929627ac4cb648c98f4;hb=3b6fdb5b5afebc49a7e987e3e3bf7aa2615d1671;hpb=08bfb8106b3a337ebf9a4bf3a8ddd2e494d18b48 diff --git a/src/sd-daemon.c b/src/sd-daemon.c index e6b9a6f3c..3bb258d34 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; @@ -381,7 +381,11 @@ int sd_notify(int unset_environment, const char *state) { memset(&msghdr, 0, sizeof(msghdr)); msghdr.msg_name = &sockaddr; - msghdr.msg_namelen = sizeof(struct sockaddr_un); + msghdr.msg_namelen = sizeof(sa_family_t) + strlen(e); + + if (msghdr.msg_namelen > sizeof(struct sockaddr_un)) + msghdr.msg_namelen = sizeof(struct sockaddr_un); + msghdr.msg_iov = &iovec; msghdr.msg_iovlen = 1; msghdr.msg_control = &control; @@ -426,3 +430,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 +}