X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-popen.c;h=1c31fe1fe8e42ea6263a2d8eae17978d45fa521d;hb=b0b422614cc9fda29e9675dcc6f2a377b3d517a8;hp=4e43bd70ea72ac5ee35f94a0f4270c600e0b9bb6;hpb=ccb9c6798066958dd14c1005a7d5ffc1cbd6edae;p=gnulib.git diff --git a/tests/test-popen.c b/tests/test-popen.c index 4e43bd70e..1c31fe1fe 100644 --- a/tests/test-popen.c +++ b/tests/test-popen.c @@ -1,5 +1,5 @@ /* Test of opening a subcommand stream. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,90 +21,8 @@ /* Specification. */ #include -/* Helpers. */ -#include -#include -#include -#include +#include "signature.h" +SIGNATURE_CHECK (popen, FILE *, (char const *, char const *)); +SIGNATURE_CHECK (pclose, int, (FILE *)); -#if GNULIB_POPEN_SAFER -# include "stdio--.h" -#endif - -#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"