summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2009-08-21 07:22:12 -0600
committerEric Blake <ebb9@byu.net>2009-08-21 07:22:12 -0600
commit9076085f888c8abc5c80ea344be0ad504a26cc0f (patch)
tree9ba7b71fa91f8ec8dacdfef9c5719349ee278db6
parent45b8409ffe3828d32d20281f1038816573e753df (diff)
downloadgnulib-9076085f888c8abc5c80ea344be0ad504a26cc0f.tar.gz
test-popen-safer: split from test-popen
* tests/test-popen.c (main): Move... * tests/test-popen.h: ...into new file. * tests/test-popen-safer2.c: New file. * modules/popen-tests (Files): Add test-popen.h. * modules/popen-safer-tests (Files): Add test-popen-safer2.c. Suggested by Bruno Haible. Signed-off-by: Eric Blake <ebb9@byu.net>
-rw-r--r--ChangeLog8
-rw-r--r--modules/popen-safer-tests6
-rw-r--r--modules/popen-tests1
-rw-r--r--tests/test-popen-safer2.c24
-rw-r--r--tests/test-popen.c88
-rw-r--r--tests/test-popen.h103
6 files changed, 141 insertions, 89 deletions
diff --git a/ChangeLog b/ChangeLog
index 7b9bb01eef..410e38c48b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2009-08-21 Eric Blake <ebb9@byu.net>
+ test-popen-safer: split from test-popen
+ * tests/test-popen.c (main): Move...
+ * tests/test-popen.h: ...into new file.
+ * tests/test-popen-safer2.c: New file.
+ * modules/popen-tests (Files): Add test-popen.h.
+ * modules/popen-safer-tests (Files): Add test-popen-safer2.c.
+ Suggested by Bruno Haible.
+
test-fcntl-safer: split from test-open
* tests/test-open.c (main): Move...
* tests/test-open.h: ...into new file.
diff --git a/modules/popen-safer-tests b/modules/popen-safer-tests
index 3dd67f24be..0e1b93a314 100644
--- a/modules/popen-safer-tests
+++ b/modules/popen-safer-tests
@@ -1,5 +1,7 @@
Files:
+tests/test-popen.h
tests/test-popen-safer.c
+tests/test-popen-safer2.c
Depends-on:
dup2
@@ -8,5 +10,5 @@ sys_wait
configure.ac:
Makefile.am:
-TESTS += test-popen-safer
-check_PROGRAMS += test-popen-safer
+TESTS += test-popen-safer test-popen-safer2
+check_PROGRAMS += test-popen-safer test-popen-safer2
diff --git a/modules/popen-tests b/modules/popen-tests
index ee7760e3fa..9d22fca5b5 100644
--- a/modules/popen-tests
+++ b/modules/popen-tests
@@ -1,4 +1,5 @@
Files:
+tests/test-popen.h
tests/test-popen.c
Depends-on:
diff --git a/tests/test-popen-safer2.c b/tests/test-popen-safer2.c
new file mode 100644
index 0000000000..4df1e367b1
--- /dev/null
+++ b/tests/test-popen-safer2.c
@@ -0,0 +1,24 @@
+/* Test of opening a subcommand stream.
+ Copyright (C) 2009 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake <ebb9@byu.net>, 2009. */
+
+#include <config.h>
+
+/* Specification. */
+#include "stdio--.h"
+
+#include "test-popen.h"
diff --git a/tests/test-popen.c b/tests/test-popen.c
index 4e43bd70ea..342e363044 100644
--- a/tests/test-popen.c
+++ b/tests/test-popen.c
@@ -21,90 +21,4 @@
/* Specification. */
#include <stdio.h>
-/* Helpers. */
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#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"
diff --git a/tests/test-popen.h b/tests/test-popen.h
new file mode 100644
index 0000000000..9364c5afa5
--- /dev/null
+++ b/tests/test-popen.h
@@ -0,0 +1,103 @@
+/* Test of opening a subcommand stream.
+ Copyright (C) 2009 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake <ebb9@byu.net>, 2009. */
+
+/* Include <config.h> and a form of <stdio.h> first. */
+
+/* Helpers. */
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#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;
+}