diff options
Diffstat (limited to 'src/helpers/SdDaemon.cpp')
| -rw-r--r-- | src/helpers/SdDaemon.cpp | 77 |
1 files changed, 37 insertions, 40 deletions
diff --git a/src/helpers/SdDaemon.cpp b/src/helpers/SdDaemon.cpp index 80944794..018165c0 100644 --- a/src/helpers/SdDaemon.cpp +++ b/src/helpers/SdDaemon.cpp @@ -4,59 +4,56 @@ #include <fcntl.h> #include <unistd.h> -#include <errno.h> +#include <cerrno> #include <sys/socket.h> #include <sys/un.h> -#include <string.h> -#include <stdlib.h> +#include <cstdlib> #include <cstring> -namespace Systemd { - int SdBooted(void) { - if (!faccessat(AT_FDCWD, "/run/systemd/system/", F_OK, AT_SYMLINK_NOFOLLOW)) - return true; +int NSystemd::sdBooted() { + if (!faccessat(AT_FDCWD, "/run/systemd/system/", F_OK, AT_SYMLINK_NOFOLLOW)) + return true; - if (errno == ENOENT) - return false; + if (errno == ENOENT) + return false; - return -errno; - } + return -errno; +} - int SdNotify(int unsetEnvironment, const char* state) { - int fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); - if (fd < 0) - return -errno; +int NSystemd::sdNotify(int unsetEnvironment, const char* state) { + int fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); + if (fd < 0) + return -errno; - constexpr char envVar[] = "NOTIFY_SOCKET"; + constexpr char envVar[] = "NOTIFY_SOCKET"; - auto cleanup = [unsetEnvironment, envVar](int* fd) { - if (unsetEnvironment) - unsetenv(envVar); - close(*fd); - }; - std::unique_ptr<int, decltype(cleanup)> fdCleaup(&fd, cleanup); + auto cleanup = [unsetEnvironment, envVar](const int* fd) { + if (unsetEnvironment) + unsetenv(envVar); + close(*fd); + }; + std::unique_ptr<int, decltype(cleanup)> fdCleaup(&fd, cleanup); - const char* addr = getenv(envVar); - if (!addr) - return 0; + const char* addr = getenv(envVar); + if (!addr) + return 0; - // address length must be at most this; see man 7 unix - size_t addrLen = strnlen(addr, 107); + // address length must be at most this; see man 7 unix + size_t addrLen = strnlen(addr, 107); - struct sockaddr_un unixAddr; - unixAddr.sun_family = AF_UNIX; - strncpy(unixAddr.sun_path, addr, addrLen); - if (unixAddr.sun_path[0] == '@') - unixAddr.sun_path[0] = '\0'; + struct sockaddr_un unixAddr; + unixAddr.sun_family = AF_UNIX; + strncpy(unixAddr.sun_path, addr, addrLen); + if (unixAddr.sun_path[0] == '@') + unixAddr.sun_path[0] = '\0'; - if (connect(fd, (const sockaddr*)&unixAddr, sizeof(struct sockaddr_un)) < 0) - return -errno; + if (connect(fd, (const sockaddr*)&unixAddr, sizeof(struct sockaddr_un)) < 0) + return -errno; - // arbitrary value which seems to be enough for s-d messages - ssize_t stateLen = strnlen(state, 128); - if (write(fd, state, stateLen) == stateLen) - return 1; + // arbitrary value which seems to be enough for s-d messages + ssize_t stateLen = strnlen(state, 128); + if (write(fd, state, stateLen) == stateLen) + return 1; - return -errno; - } + return -errno; } |
