| #include <stdio.h> | 
 | #include <string.h> | 
 | #include <unistd.h> | 
 |  | 
 | static int | 
 | do_test (void) | 
 | { | 
 |   int fd = dup (fileno (stdout)); | 
 |   if (fd <= 1) | 
 |     { | 
 |       puts ("dup failed"); | 
 |       return 1; | 
 |     } | 
 |  | 
 |   FILE *f1 = fdopen (fd, "w"); | 
 |   if (f1 == NULL) | 
 |     { | 
 |       printf ("fdopen failed: %m\n"); | 
 |       return 1; | 
 |     } | 
 |  | 
 |   fclose (stdout); | 
 |  | 
 |   FILE *f2 = popen ("echo test1", "r"); | 
 |   if (f2 == NULL) | 
 |     { | 
 |       fprintf (f1, "1st popen failed: %m\n"); | 
 |       return 1; | 
 |     } | 
 |   FILE *f3 = popen ("echo test2", "r"); | 
 |   if (f2 == NULL || f3 == NULL) | 
 |     { | 
 |       fprintf (f1, "2nd popen failed: %m\n"); | 
 |       return 1; | 
 |     } | 
 |  | 
 |   char *line = NULL; | 
 |   size_t len = 0; | 
 |   int result = 0; | 
 |   if (getline (&line, &len, f2) != 6) | 
 |     { | 
 |       fputs ("could not read line from 1st popen\n", f1); | 
 |       result = 1; | 
 |     } | 
 |   else if (strcmp (line, "test1\n") != 0) | 
 |     { | 
 |       fprintf (f1, "read \"%s\"\n", line); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   if (getline (&line, &len, f2) != -1) | 
 |     { | 
 |       fputs ("second getline did not return -1\n", f1); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   if (getline (&line, &len, f3) != 6) | 
 |     { | 
 |       fputs ("could not read line from 2nd popen\n", f1); | 
 |       result = 1; | 
 |     } | 
 |   else if (strcmp (line, "test2\n") != 0) | 
 |     { | 
 |       fprintf (f1, "read \"%s\"\n", line); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   if (getline (&line, &len, f3) != -1) | 
 |     { | 
 |       fputs ("second getline did not return -1\n", f1); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   int ret = pclose (f2); | 
 |   if (ret != 0) | 
 |     { | 
 |       fprintf (f1, "1st pclose returned %d\n", ret); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   ret = pclose (f3); | 
 |   if (ret != 0) | 
 |     { | 
 |       fprintf (f1, "2nd pclose returned %d\n", ret); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   return result; | 
 | } | 
 |  | 
 | #define TEST_FUNCTION do_test () | 
 | #include "../test-skeleton.c" |