X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsd-daemon.c;h=33970f6c41bb1bccc2b10b58d95db4966fbc7cda;hp=cb568b5e65194a08ea088d8bf03e60f7c1095220;hb=28695e0facfa14d54223f2805df19e44a17f3a7e;hpb=40473a70cf5ac6743d9e4e70f3229203a278ff9c diff --git a/src/sd-daemon.c b/src/sd-daemon.c index cb568b5e6..33970f6c4 100644 --- a/src/sd-daemon.c +++ b/src/sd-daemon.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** Copyright 2010 Lennart Poettering @@ -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; @@ -325,7 +325,7 @@ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t } int sd_notify(int unset_environment, const char *state) { -#if defined(DISABLE_SYSTEMD) || !defined(__linux__) +#if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC) return 0; #else int fd = -1, r; @@ -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;