diff options
Diffstat (limited to 'src/client.c')
-rw-r--r-- | src/client.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/client.c b/src/client.c index 415ed79..b37b9e3 100644 --- a/src/client.c +++ b/src/client.c @@ -59,7 +59,7 @@ send_command(enum command cmd, size_t n, const char *restrict msg) ssize_t r, wrote; char *buf = NULL; signed char cmd_ = (signed char)cmd; - int saved_errno; + int eot = 0, saved_errno; /* Get socket address. */ dir = getenv("XDG_RUNTIME_DIR"), dir = (dir ? dir : "/run"); @@ -118,6 +118,7 @@ receive_again: outfd = (int)cmd_; goterr |= outfd == STDERR_FILENO; t (r = read(fd, &n, sizeof(n)), r < (ssize_t)sizeof(n)); + eot = (outfd == 127) & !n; t (!(buf = malloc(n))); while (n) { t (r = read(fd, buf, n), r < 0); @@ -143,6 +144,8 @@ fail: close(fd); free(buf); errno = saved_errno; + if (eot) + goto done; return -1; } |