X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-popen.c;h=342e36304455104c5de721274f98787bbe8d5abb;hb=c26924950a3a546112e35c99aad85c0855f4664a;hp=3d689e9a92b675daee878dd81684ef72f614065f;hpb=a8f637e3c49275e6789c05d67c1fbd1751e5610a;p=gnulib.git diff --git a/tests/test-popen.c b/tests/test-popen.c index 3d689e9a9..342e36304 100644 --- a/tests/test-popen.c +++ b/tests/test-popen.c @@ -21,86 +21,4 @@ /* Specification. */ #include -/* Helpers. */ -#include -#include -#include -#include - -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) - -int -main (int argc, char **argv) -{ - size_t len; - char *cmd; - int i; - - /* Children - use the pipe. */ - if (argc > 1) - { - if (*argv[1] == 'r') /* Parent is reading, so we write. */ - ASSERT (putchar ('c') == 'c'); - else /* Parent is writing, so we read. */ - ASSERT (getchar () == 'p'); - /* Test that parent can read non-zero status. */ - return 42; - } - - /* Parent - create read and write child, once under normal - circumstances and once with stdin and stdout closed. */ - len = strlen (argv[0]); - cmd = malloc (len + 3); /* Adding " r" and NUL. */ - ASSERT (cmd); - /* We count on argv[0] not containing any shell metacharacters. */ - strcpy (cmd, argv[0]); - cmd[len] = ' '; - cmd[len + 2] = '\0'; - for (i = 0; i < 2; i++) - { - FILE *child; - int status; - - if (i) - { - ASSERT (fclose (stdin) == 0); - ASSERT (fclose (stdout) == 0); - } - - cmd[len + 1] = 'r'; - ASSERT (child = popen (cmd, "r")); - ASSERT (fgetc (child) == 'c'); - status = pclose (child); - ASSERT (WIFEXITED (status)); - ASSERT (WEXITSTATUS (status) == 42); - if (i) - { - ASSERT (dup2 (STDIN_FILENO, STDIN_FILENO) == -1); - ASSERT (dup2 (STDOUT_FILENO, STDOUT_FILENO) == -1); - } - - cmd[len + 1] = 'w'; - ASSERT (child = popen (cmd, "w")); - ASSERT (fputc ('p', child) == 'p'); - status = pclose (child); - ASSERT (WIFEXITED (status)); - ASSERT (WEXITSTATUS (status) == 42); - if (i) - { - ASSERT (dup2 (STDIN_FILENO, STDIN_FILENO) == -1); - ASSERT (dup2 (STDOUT_FILENO, STDOUT_FILENO) == -1); - } - } - free (cmd); - return 0; -} +#include "test-popen.h"