From 92bbf083434f09f04877f787487c25f5f407dde9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 6 Jul 2022 08:54:28 +0530 Subject: [PATCH] Fix socket connect call on non-linux --- prewarm-launcher.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/prewarm-launcher.c b/prewarm-launcher.c index cac09a2c0..3f00076e6 100644 --- a/prewarm-launcher.c +++ b/prewarm-launcher.c @@ -117,13 +117,7 @@ safe_write(int fd, void *buf, size_t n) { return ret; } -static size_t -strnlength(const char* s, size_t n) { - const char* found = memchr(s, '\0', n); - return found ? (size_t)(found-s) : n; -} - -bool +static bool set_blocking(int fd, bool blocking) { if (fd < 0) return false; int flags = fcntl(fd, F_GETFL, 0); @@ -136,9 +130,13 @@ static int connect_to_socket_synchronously(const char *addr) { struct sockaddr_un sock_addr = {.sun_family=AF_UNIX}; strncpy(sock_addr.sun_path, addr, sizeof(sock_addr.sun_path) - 1); - const size_t addrlen = strnlength(sock_addr.sun_path, sizeof(sock_addr.sun_path)) + sizeof(sock_addr.sun_family); - if (sock_addr.sun_path[0] == '@') sock_addr.sun_path[0] = 0; int fd = socket(AF_UNIX, SOCK_STREAM, 0); +#ifdef __linux__ + const size_t addrlen = strnlen(sock_addr.sun_path, sizeof(sock_addr.sun_path)) + sizeof(sock_addr.sun_family); + if (sock_addr.sun_path[0] == '@') sock_addr.sun_path[0] = 0; +#else + const size_t addrlen = sizeof(sock_addr); +#endif if (connect(fd, (struct sockaddr*)&sock_addr, addrlen) != 0) { if (errno != EINTR && errno != EINPROGRESS) return -1; struct pollfd poll_data = {.fd=fd, .events=POLLOUT};