summaryrefslogtreecommitdiffstats
path: root/libdaemon/dfork.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-06-11 15:34:47 +0000
committerLennart Poettering <lennart@poettering.net>2007-06-11 15:34:47 +0000
commit57855dabe0eab60dc4090309d07ba4c1aee3e0e2 (patch)
treec9968bc8bebb749854f6d71feb25fb220ba7658a /libdaemon/dfork.c
parentb45cd330549c234d0c061602d6239b083ddb9978 (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.c19
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;
}