]> git.ozlabs.org Git - ccan/blobdiff - ccan/daemonize/test/run.c
daemonize: set stderr to /dev/null.
[ccan] / ccan / daemonize / test / run.c
index a471268d3ef172995fd4a0088cd70c9266c75383..9bb966da240b722e33dd29f9ea4cfc399f159b5d 100644 (file)
@@ -5,6 +5,7 @@
 #include <unistd.h>
 #include <err.h>
 #include <errno.h>
+#include <string.h>
 
 struct child_data {
        pid_t pid;
@@ -34,14 +35,20 @@ int main(int argc, char *argv[])
                char buffer[2];
                pid = getpid();
                daemonize();
+               /* Keep valgrind happy about uninitialized bytes. */
+               memset(&daemonized, 0, sizeof(daemonized));
                daemonized.pid = getpid();
                daemonized.in_root_dir = (getcwd(buffer, 2) != NULL);
                daemonized.read_from_stdin
                        = read(STDIN_FILENO, buffer, 1) == -1 ? errno : 0;
                daemonized.write_to_stdout
                        = write(STDOUT_FILENO, buffer, 1) == -1 ? errno : 0;
-               daemonized.write_to_stderr
-                       = write(STDERR_FILENO, buffer, 1) == -1 ? errno : 0;
+               if (write(STDERR_FILENO, buffer, 1) != 1) {
+                       daemonized.write_to_stderr = errno;
+                       if (daemonized.write_to_stderr == 0)
+                               daemonized.write_to_stderr = -1;
+               } else
+                       daemonized.write_to_stderr = 0;
 
                /* Make sure parent exits. */
                while (getppid() == pid)
@@ -61,7 +68,7 @@ int main(int argc, char *argv[])
        ok1(daemonized.in_root_dir);
        ok1(daemonized.read_from_stdin == EBADF);
        ok1(daemonized.write_to_stdout == EBADF);
-       ok1(daemonized.write_to_stderr == EBADF);
+       ok1(daemonized.write_to_stderr == 0);
 
        return exit_status();
 }