diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-06-11 15:34:47 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-06-11 15:34:47 +0000 |
commit | 57855dabe0eab60dc4090309d07ba4c1aee3e0e2 (patch) | |
tree | c9968bc8bebb749854f6d71feb25fb220ba7658a /libdaemon/dfork.c | |
parent | b45cd330549c234d0c061602d6239b083ddb9978 (diff) |
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
Diffstat (limited to 'libdaemon/dfork.c')
-rw-r--r-- | libdaemon/dfork.c | 19 |
1 files changed, 14 insertions, 5 deletions
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; } |