OSDN Git Service

h8300: O_DIRECT and O_DIRECTIRY swapping.
[uclinux-h8/uclibc-ng.git] / test / nptl / tst-basic4.c
1 /* Copyright (C) 2003 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <errno.h>
20 #include <pthread.h>
21 #include <signal.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <unistd.h>
25 #include <sys/wait.h>
26
27
28 static void
29 final_test (void)
30 {
31   puts ("final_test has been called");
32
33 #define THE_SIGNAL SIGUSR1
34   kill (getpid (), SIGUSR1);
35 }
36
37
38 static void *
39 tf (void *a)
40 {
41   pid_t pid = fork ();
42   if (pid == -1)
43     {
44       puts ("fork failed");
45       exit (1);
46     }
47
48   if (pid == 0)
49     {
50       atexit (final_test);
51
52       pthread_exit (NULL);
53     }
54
55   int r;
56   int e = TEMP_FAILURE_RETRY (waitpid (pid, &r, 0));
57   if (e != pid)
58     {
59       puts ("waitpid failed");
60       exit (1);
61     }
62
63   if (! WIFSIGNALED (r))
64     {
65       puts ("child not signled");
66       exit (1);
67     }
68
69   if (WTERMSIG (r) != THE_SIGNAL)
70     {
71       puts ("child's termination signal wrong");
72       exit (1);
73     }
74
75   return NULL;
76 }
77
78
79 int
80 do_test (void)
81 {
82   pthread_t th;
83
84   if (pthread_create (&th, NULL, tf, NULL) != 0)
85     {
86       puts ("create failed");
87       _exit (1);
88     }
89
90   if (pthread_join (th, NULL) != 0)
91     {
92       puts ("join failed");
93       exit (1);
94     }
95
96   return 0;
97 }
98
99 #define TEST_FUNCTION do_test ()
100 #include "../test-skeleton.c"