From 57855dabe0eab60dc4090309d07ba4c1aee3e0e2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 11 Jun 2007 15:34:47 +0000 Subject: Make sure that we always return a sensible errno git-svn-id: file:///home/lennart/svn/public/libdaemon/trunk@117 153bfa13-eec0-0310-be40-b0cb6a0e1b4b --- libdaemon/dfork.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'libdaemon/dfork.c') diff --git a/libdaemon/dfork.c b/libdaemon/dfork.c index ad7a77f..7a8e0bf 100644 --- a/libdaemon/dfork.c +++ b/libdaemon/dfork.c @@ -280,8 +280,10 @@ void daemon_retval_done(void) { int daemon_retval_send(int i) { ssize_t r; - if (_daemon_retval_pipe[1] < 0) + if (_daemon_retval_pipe[1] < 0) { + errno = EINVAL; return -1; + } r = atomic_write(_daemon_retval_pipe[1], &i, sizeof(i)); @@ -291,8 +293,10 @@ int daemon_retval_send(int i) { if (r < 0) daemon_log(LOG_ERR, "write() failed while writing return value to pipe: %s", strerror(errno)); - else + else { daemon_log(LOG_ERR, "write() too short while writing return value from pipe"); + errno = EINVAL; + } return -1; } @@ -319,8 +323,10 @@ int daemon_retval_wait(int timeout) { if (s < 0) daemon_log(LOG_ERR, "select() failed while waiting for return value: %s", strerror(errno)); - else + else { + errno = ETIMEDOUT; daemon_log(LOG_ERR, "Timeout reached while wating for return value"); + } return -1; } @@ -330,10 +336,13 @@ int daemon_retval_wait(int timeout) { if (r < 0) daemon_log(LOG_ERR, "read() failed while reading return value from pipe: %s", strerror(errno)); - else if (r == 0) + else if (r == 0) { daemon_log(LOG_ERR, "read() failed with EOF while reading return value from pipe."); - else if (r > 0) + errno = EINVAL; + } else if (r > 0) { daemon_log(LOG_ERR, "read() too short while reading return value from pipe."); + errno = EINVAL; + } return -1; } -- cgit