1 /*
2 *
3 * Copyright (c) International Business Machines Corp., 2001
4 * Copyright (c) 2012 Cyril Hrubis <chrubis@suse.cz>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14 * the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 /*
22 * wait402 - check for ECHILD errno when using an illegal pid value
23 */
24
25 #include "test.h"
26
27 #include <errno.h>
28 #define _USE_BSD
29 #include <sys/types.h>
30 #include <sys/resource.h>
31 #include <sys/wait.h>
32 #include <stdlib.h>
33 #include <string.h>
34
35 char *TCID = "wait402";
36 int TST_TOTAL = 1;
37
38 static void cleanup(void);
39 static void setup(void);
40
get_pid_max(void)41 static long get_pid_max(void)
42 {
43 long pid_max;
44
45 SAFE_FILE_SCANF(NULL, "/proc/sys/kernel/pid_max", "%ld", &pid_max);
46
47 return pid_max;
48 }
49
main(int ac,char ** av)50 int main(int ac, char **av)
51 {
52 int lc;
53 pid_t epid = get_pid_max() + 1;
54
55 int status = 1;
56 struct rusage rusage;
57
58 tst_parse_opts(ac, av, NULL, NULL);
59
60 setup();
61
62 for (lc = 0; TEST_LOOPING(lc); lc++) {
63 tst_count = 0;
64
65 TEST(wait4(epid, &status, 0, &rusage));
66
67 if (TEST_RETURN == 0) {
68 tst_brkm(TFAIL, cleanup,
69 "call failed to produce expected error - errno = %d - %s",
70 TEST_ERRNO, strerror(TEST_ERRNO));
71 }
72
73 switch (TEST_ERRNO) {
74 case ECHILD:
75 tst_resm(TPASS,
76 "received expected failure - errno = %d - %s",
77 TEST_ERRNO, strerror(TEST_ERRNO));
78 break;
79 default:
80 tst_brkm(TFAIL, cleanup,
81 "call failed to produce expected "
82 "error - errno = %d - %s", TEST_ERRNO,
83 strerror(TEST_ERRNO));
84 }
85 }
86
87 cleanup();
88 tst_exit();
89 }
90
setup(void)91 static void setup(void)
92 {
93
94 tst_sig(FORK, DEF_HANDLER, cleanup);
95
96 TEST_PAUSE;
97 }
98
cleanup(void)99 static void cleanup(void)
100 {
101 }
102