]> git.ozlabs.org Git - ccan/blobdiff - ccan/daemonize/test/run.c
base64: fix for unsigned chars (e.g. ARM).
[ccan] / ccan / daemonize / test / run.c
index a471268d3ef172995fd4a0088cd70c9266c75383..73f021118a8c77505136fe25e0b6a3eb9b2eeed8 100644 (file)
@@ -5,6 +5,7 @@
 #include <unistd.h>
 #include <err.h>
 #include <errno.h>
+#include <string.h>
 
 struct child_data {
        pid_t pid;
@@ -19,7 +20,7 @@ int main(int argc, char *argv[])
        struct child_data daemonized;
        pid_t pid;
 
-       plan_tests(6);
+       plan_tests(5);
 
        if (pipe(fds) != 0)
                err(1, "Failed pipe");
@@ -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)
@@ -57,11 +64,13 @@ int main(int argc, char *argv[])
                err(1, "Failed read");
 
        ok1(daemonized.pid != pid);
+#if 0  /* Believe it or not, this fails under Ubuntu 13.10 (Upstart) */
        ok1(daemonized.ppid == 1);
+#endif
        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();
 }