2.9
[glibc/nacl-glibc.git] / posix / test-vfork.c
blobc4904e36e130d928f7d6eecb53e4e6c2940ed936
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <error.h>
5 #include <errno.h>
6 #include <sys/wait.h>
8 void __attribute_noinline__ noop (void);
10 #define NR 2 /* Exit code of the child. */
12 int
13 main (void)
15 pid_t pid;
16 int status;
18 printf ("Before vfork\n");
19 fflush (stdout);
20 pid = vfork ();
21 if (pid == 0)
23 /* This will clobber the return pc from vfork in the parent on
24 machines where it is stored on the stack, if vfork wasn't
25 implemented correctly, */
26 noop ();
27 _exit (NR);
29 else if (pid < 0)
30 error (1, errno, "vfork");
31 printf ("After vfork (parent)\n");
32 if (waitpid (0, &status, 0) != pid
33 || !WIFEXITED (status) || WEXITSTATUS (status) != NR)
34 exit (1);
36 return 0;
39 void
40 noop ()