diff --git a/winsup/testsuite/ChangeLog b/winsup/testsuite/ChangeLog index a08e413bb..610c532d3 100644 --- a/winsup/testsuite/ChangeLog +++ b/winsup/testsuite/ChangeLog @@ -1,3 +1,7 @@ +Thu Oct 4 22:19:39 2001 Christopher Faylor + + * winsup.api/systemcall.c: New file. Check for system call problems. + 2001-09-20 Egor Duda * libltp/lib/get_high_address.c (get_high_address): Get inaccessible diff --git a/winsup/testsuite/winsup.api/systemcall.c b/winsup/testsuite/winsup.api/systemcall.c new file mode 100644 index 000000000..8121b1277 --- /dev/null +++ b/winsup/testsuite/winsup.api/systemcall.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +int +main (int argc, char **argv) +{ + int fd, pid, n; + int fds[2]; + static char buf[4096]; + + close (1); + if ((fd = open ("/dev/null", O_WRONLY)) != 1) + { + fprintf (stderr, "couldn't redirect stdout to /dev/null, fd %d - %s\n", fd, strerror ()); + exit (1); + } + if (pipe (fds)) + { + fprintf (stderr, "pipe call failed - %s\n", strerror ()); + exit (1); + } + if ((pid = fork ()) == 0) + { + close (fds[0]); + if (dup2 (fds[1], 2) != 2) + { + fprintf (stderr, "couldn't redirect stderr to pipe - %s\n", strerror ()); + exit (1); + } + exit (system ("ls")); + } + else if (pid < 0) + { + perror ("couldn't fork"); + exit (1); + } + + close (fds[1]); + if (read (fds[0], buf, 4096) != 0) + { + fprintf (stderr, "system call failed?\n%s\n", buf); + exit (1); + } + + if (waitpid (pid, &n, 0) < 0) + { + perror ("waitpid failed"); + exit (1); + } + if (n != 0) + { + fprintf (stderr, "system() call returend %p\n", n); + exit (1); + } + exit (0); +}