xref: /freebsd/tools/test/stress2/testcases/openat/doat.c (revision 8a272653d9fbd9fc37691c9aad6a05089b4ecb4d)
1*8a272653SPeter Holm /*-
2*8a272653SPeter Holm  * Copyright (c) 2007 Roman Divacky <rdivacky@FreeBSD.org>
3*8a272653SPeter Holm  * All rights reserved.
4*8a272653SPeter Holm  *
5*8a272653SPeter Holm  * Redistribution and use in source and binary forms, with or without
6*8a272653SPeter Holm  * modification, are permitted provided that the following conditions
7*8a272653SPeter Holm  * are met:
8*8a272653SPeter Holm  * 1. Redistributions of source code must retain the above copyright
9*8a272653SPeter Holm  *    notice, this list of conditions and the following disclaimer.
10*8a272653SPeter Holm  * 2. Redistributions in binary form must reproduce the above copyright
11*8a272653SPeter Holm  *    notice, this list of conditions and the following disclaimer in the
12*8a272653SPeter Holm  *    documentation and/or other materials provided with the distribution.
13*8a272653SPeter Holm  *
14*8a272653SPeter Holm  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*8a272653SPeter Holm  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*8a272653SPeter Holm  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*8a272653SPeter Holm  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*8a272653SPeter Holm  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*8a272653SPeter Holm  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*8a272653SPeter Holm  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*8a272653SPeter Holm  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*8a272653SPeter Holm  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*8a272653SPeter Holm  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*8a272653SPeter Holm  * SUCH DAMAGE.
25*8a272653SPeter Holm  *
26*8a272653SPeter Holm  */
27*8a272653SPeter Holm 
28*8a272653SPeter Holm #include <sys/param.h>
29*8a272653SPeter Holm #include <sys/stat.h>
30*8a272653SPeter Holm #include <sys/syscall.h>
31*8a272653SPeter Holm #include <sys/types.h>
32*8a272653SPeter Holm #include <errno.h>
33*8a272653SPeter Holm #include <fcntl.h>
34*8a272653SPeter Holm #include <stdbool.h>
35*8a272653SPeter Holm #include <stdio.h>
36*8a272653SPeter Holm #include <stdlib.h>
37*8a272653SPeter Holm #include <string.h>
38*8a272653SPeter Holm #include <unistd.h>
39*8a272653SPeter Holm 
40*8a272653SPeter Holm union param {
41*8a272653SPeter Holm 	int		i;
42*8a272653SPeter Holm 	char		*cp;
43*8a272653SPeter Holm 	mode_t		m;
44*8a272653SPeter Holm 	dev_t		d;
45*8a272653SPeter Holm 	void		*vp;
46*8a272653SPeter Holm 	uid_t		u;
47*8a272653SPeter Holm 	gid_t		g;
48*8a272653SPeter Holm 	char		**cpp;
49*8a272653SPeter Holm };
50*8a272653SPeter Holm 
51*8a272653SPeter Holm struct testcase {
52*8a272653SPeter Holm 	int		result;
53*8a272653SPeter Holm 	union param	params[5];	// no *at syscall with more than 5 params
54*8a272653SPeter Holm };
55*8a272653SPeter Holm 
56*8a272653SPeter Holm struct test {
57*8a272653SPeter Holm 	int	syscall;
58*8a272653SPeter Holm 	int	num_of_cases;
59*8a272653SPeter Holm 	char	*name;
60*8a272653SPeter Holm 	struct testcase	tests[10];	// no more than 10 tests
61*8a272653SPeter Holm 
62*8a272653SPeter Holm };
63*8a272653SPeter Holm 
64*8a272653SPeter Holm struct test *tests;
65*8a272653SPeter Holm #define	NUM_OF_TESTS	15
66*8a272653SPeter Holm 
67*8a272653SPeter Holm char *absolute_path = NULL;
68*8a272653SPeter Holm char *relative_path = "tmp/";
69*8a272653SPeter Holm char *not_dir_path = "/bin/date";
70*8a272653SPeter Holm 
71*8a272653SPeter Holm char *file = "foo";
72*8a272653SPeter Holm char *absolute_file = NULL;
73*8a272653SPeter Holm char *relative_file = NULL;
74*8a272653SPeter Holm char *symlinkf = "link";
75*8a272653SPeter Holm char *newlink = "nlink1";
76*8a272653SPeter Holm char *newlink2 = "nlink2";
77*8a272653SPeter Holm char *newlink3 = "nlink3";
78*8a272653SPeter Holm char *newdir = "newdir";
79*8a272653SPeter Holm char *fifo = "fifo";
80*8a272653SPeter Holm char *nod = "nod";
81*8a272653SPeter Holm char *newfile = "newfile";
82*8a272653SPeter Holm char *newslink = "nslink1";
83*8a272653SPeter Holm 
84*8a272653SPeter Holm bool dir_exist = false;
85*8a272653SPeter Holm bool file_exist = false;
86*8a272653SPeter Holm bool link_exist = false;
87*8a272653SPeter Holm 
88*8a272653SPeter Holm int rel_fd, abs_fd, notd_fd, exec_fd;
89*8a272653SPeter Holm 
90*8a272653SPeter Holm struct timeval times[2];
91*8a272653SPeter Holm struct stat buf;
92*8a272653SPeter Holm char *pargv[2] = { "/bin/date", NULL };
93*8a272653SPeter Holm char cbuf[PATH_MAX];
94*8a272653SPeter Holm 
95*8a272653SPeter Holm void
setup()96*8a272653SPeter Holm setup()
97*8a272653SPeter Holm {
98*8a272653SPeter Holm 	int i, error;
99*8a272653SPeter Holm 	struct stat sb;
100*8a272653SPeter Holm 
101*8a272653SPeter Holm 	tests = calloc(NUM_OF_TESTS, sizeof(struct test));
102*8a272653SPeter Holm 	if (tests == NULL) {
103*8a272653SPeter Holm 		perror("");
104*8a272653SPeter Holm 		exit(0);
105*8a272653SPeter Holm 	}
106*8a272653SPeter Holm 
107*8a272653SPeter Holm 	absolute_path = getcwd(NULL, 0);
108*8a272653SPeter Holm 	if (absolute_path == NULL) {
109*8a272653SPeter Holm 		perror("getcwd");
110*8a272653SPeter Holm 		exit(0);
111*8a272653SPeter Holm 	}
112*8a272653SPeter Holm 
113*8a272653SPeter Holm 	absolute_path = realloc(absolute_path, strlen(absolute_path) + 5);
114*8a272653SPeter Holm 	if (absolute_path == NULL) {
115*8a272653SPeter Holm 		perror("realloc");
116*8a272653SPeter Holm 		exit(0);
117*8a272653SPeter Holm 	}
118*8a272653SPeter Holm 
119*8a272653SPeter Holm 	strcat(absolute_path, "/");
120*8a272653SPeter Holm 	strcat(absolute_path, relative_path);
121*8a272653SPeter Holm 
122*8a272653SPeter Holm 	absolute_file = malloc(strlen(absolute_path) + 1 + strlen(file));
123*8a272653SPeter Holm 	bzero(absolute_file, strlen(absolute_path) + 1 + strlen(file));
124*8a272653SPeter Holm 	if (absolute_file == NULL) {
125*8a272653SPeter Holm 		perror("malloc");
126*8a272653SPeter Holm 		exit(0);
127*8a272653SPeter Holm 	}
128*8a272653SPeter Holm 	strcpy(absolute_file, absolute_path);
129*8a272653SPeter Holm 	absolute_file[strlen(absolute_file)] = '/';
130*8a272653SPeter Holm 	strcpy(absolute_file + strlen(absolute_path), file);
131*8a272653SPeter Holm 
132*8a272653SPeter Holm 	printf("XX: %s\n", absolute_file);
133*8a272653SPeter Holm 
134*8a272653SPeter Holm 	relative_file = malloc(strlen(relative_path) + 1 + strlen(file));
135*8a272653SPeter Holm 	bzero(relative_file, strlen(relative_path) + 1 + strlen(file));
136*8a272653SPeter Holm 	if (relative_file == NULL) {
137*8a272653SPeter Holm 		perror("malloc");
138*8a272653SPeter Holm 		exit(0);
139*8a272653SPeter Holm 	}
140*8a272653SPeter Holm 	strcpy(relative_file, relative_path);
141*8a272653SPeter Holm 	relative_file[strlen(relative_file)] = '/';
142*8a272653SPeter Holm 	strcpy(relative_file + strlen(relative_path), file);
143*8a272653SPeter Holm 
144*8a272653SPeter Holm 	printf("YY: %s\n", relative_file);
145*8a272653SPeter Holm 
146*8a272653SPeter Holm 	error = mkdir(relative_path, 0744);
147*8a272653SPeter Holm 	dir_exist = (errno == EEXIST);
148*8a272653SPeter Holm 	if (error && errno != EEXIST) {
149*8a272653SPeter Holm 		perror("tmp");
150*8a272653SPeter Holm 		exit(0);
151*8a272653SPeter Holm 	}
152*8a272653SPeter Holm 
153*8a272653SPeter Holm 	error = stat("tmp/foo", &sb);
154*8a272653SPeter Holm 	file_exist = (errno != ENOENT);
155*8a272653SPeter Holm 	i = open("tmp/foo", O_RDONLY | O_CREAT, 0644);
156*8a272653SPeter Holm 	if (i == -1) {
157*8a272653SPeter Holm 		perror("foo");
158*8a272653SPeter Holm 		exit(0);
159*8a272653SPeter Holm 	}
160*8a272653SPeter Holm 
161*8a272653SPeter Holm 	rel_fd = open(relative_path, O_RDONLY);
162*8a272653SPeter Holm 	if (rel_fd == -1) {
163*8a272653SPeter Holm 		perror("relative path");
164*8a272653SPeter Holm 		exit(0);
165*8a272653SPeter Holm 	}
166*8a272653SPeter Holm 
167*8a272653SPeter Holm 	abs_fd = open(absolute_path, O_RDONLY);
168*8a272653SPeter Holm 	if (abs_fd == -1) {
169*8a272653SPeter Holm 		perror("absolute path");
170*8a272653SPeter Holm 		exit(0);
171*8a272653SPeter Holm 	}
172*8a272653SPeter Holm 
173*8a272653SPeter Holm 	notd_fd = open(not_dir_path, O_RDONLY);
174*8a272653SPeter Holm 	if (notd_fd == -1) {
175*8a272653SPeter Holm 		perror("not a directory");
176*8a272653SPeter Holm 		exit(0);
177*8a272653SPeter Holm 	}
178*8a272653SPeter Holm 
179*8a272653SPeter Holm 	exec_fd = open(not_dir_path, O_RDONLY);
180*8a272653SPeter Holm 	if (exec_fd == -1) {
181*8a272653SPeter Holm 		perror("not a directory");
182*8a272653SPeter Holm 		exit(0);
183*8a272653SPeter Holm 	}
184*8a272653SPeter Holm 
185*8a272653SPeter Holm 	error = symlink(absolute_file, symlinkf);
186*8a272653SPeter Holm 	link_exist = (errno == EEXIST);
187*8a272653SPeter Holm 	if (error && errno != EEXIST) {
188*8a272653SPeter Holm 		perror("symlink");
189*8a272653SPeter Holm 		exit(0);
190*8a272653SPeter Holm 	}
191*8a272653SPeter Holm 
192*8a272653SPeter Holm 	// faccessat
193*8a272653SPeter Holm 	tests[0].syscall = SYS_faccessat;
194*8a272653SPeter Holm 	tests[0].num_of_cases = 6;
195*8a272653SPeter Holm 	tests[0].name = "faccessat";
196*8a272653SPeter Holm 	tests[0].tests[0].result = EBADF;
197*8a272653SPeter Holm 	tests[0].tests[0].params[0].i = 106;	// invalid fd
198*8a272653SPeter Holm 	tests[0].tests[0].params[1].cp = relative_path;
199*8a272653SPeter Holm 	tests[0].tests[0].params[2].m = 0;
200*8a272653SPeter Holm 	tests[0].tests[0].params[3].i = 0;
201*8a272653SPeter Holm 	tests[0].tests[1].result = EBADF;
202*8a272653SPeter Holm 	tests[0].tests[1].params[0].i = 106;	// invalid fd
203*8a272653SPeter Holm 	tests[0].tests[1].params[1].cp = relative_path;
204*8a272653SPeter Holm 	tests[0].tests[1].params[2].m = 0;
205*8a272653SPeter Holm 	tests[0].tests[1].params[3].i = AT_EACCESS;
206*8a272653SPeter Holm 	tests[0].tests[2].result = EINVAL;
207*8a272653SPeter Holm 	tests[0].tests[2].params[0].i = rel_fd;
208*8a272653SPeter Holm 	tests[0].tests[2].params[1].cp = absolute_path;
209*8a272653SPeter Holm 	tests[0].tests[2].params[2].m = 0;
210*8a272653SPeter Holm 	tests[0].tests[2].params[3].i = 123;	// invalid flag
211*8a272653SPeter Holm 	tests[0].tests[3].result = ENOTDIR;
212*8a272653SPeter Holm 	tests[0].tests[3].params[0].i = notd_fd;
213*8a272653SPeter Holm 	tests[0].tests[3].params[1].cp = relative_file;
214*8a272653SPeter Holm 	tests[0].tests[3].params[2].m = 0;
215*8a272653SPeter Holm 	tests[0].tests[3].params[3].i = 0;
216*8a272653SPeter Holm 	tests[0].tests[4].result = 0;
217*8a272653SPeter Holm 	tests[0].tests[4].params[0].i = rel_fd;
218*8a272653SPeter Holm 	tests[0].tests[4].params[1].cp = file;
219*8a272653SPeter Holm 	tests[0].tests[4].params[2].m = 0;
220*8a272653SPeter Holm 	tests[0].tests[4].params[3].i = 0;
221*8a272653SPeter Holm 	tests[0].tests[5].result = 0;
222*8a272653SPeter Holm 	tests[0].tests[5].params[0].i = rel_fd;
223*8a272653SPeter Holm 	tests[0].tests[5].params[1].cp = file;
224*8a272653SPeter Holm 	tests[0].tests[5].params[2].m = 0;
225*8a272653SPeter Holm 	tests[0].tests[5].params[3].i = AT_EACCESS;
226*8a272653SPeter Holm 	tests[0].tests[6].result = 0;
227*8a272653SPeter Holm 	tests[0].tests[6].params[0].i = 106;	// invalid fd
228*8a272653SPeter Holm 	tests[0].tests[6].params[1].cp = absolute_path;
229*8a272653SPeter Holm 	tests[0].tests[6].params[2].m = 0;
230*8a272653SPeter Holm 	tests[0].tests[6].params[3].i = 0;
231*8a272653SPeter Holm 
232*8a272653SPeter Holm 	// fchmodat
233*8a272653SPeter Holm 	tests[1].syscall = SYS_fchmodat;
234*8a272653SPeter Holm 	tests[1].num_of_cases = 6;
235*8a272653SPeter Holm 	tests[1].name = "fchmodat";
236*8a272653SPeter Holm 	tests[1].tests[0].result = EBADF;
237*8a272653SPeter Holm 	tests[1].tests[0].params[0].i = 106;	// invalid fd
238*8a272653SPeter Holm 	tests[1].tests[0].params[1].cp = relative_path;
239*8a272653SPeter Holm 	tests[1].tests[0].params[2].m = 33190;
240*8a272653SPeter Holm 	tests[1].tests[0].params[3].i = 0;
241*8a272653SPeter Holm 	tests[1].tests[1].result = EINVAL;
242*8a272653SPeter Holm 	tests[1].tests[1].params[0].i = rel_fd;
243*8a272653SPeter Holm 	tests[1].tests[1].params[1].cp = absolute_path;
244*8a272653SPeter Holm 	tests[1].tests[1].params[2].m = 33190;	// mode 646 translated
245*8a272653SPeter Holm 	tests[1].tests[1].params[3].i = 123;	// invalid flag
246*8a272653SPeter Holm 	tests[1].tests[2].result = ENOTDIR;
247*8a272653SPeter Holm 	tests[1].tests[2].params[0].i = notd_fd;
248*8a272653SPeter Holm 	tests[1].tests[2].params[1].cp = relative_file;
249*8a272653SPeter Holm 	tests[1].tests[2].params[2].m = 33190;
250*8a272653SPeter Holm 	tests[1].tests[2].params[3].i = 0;
251*8a272653SPeter Holm 	tests[1].tests[3].result = 0;
252*8a272653SPeter Holm 	tests[1].tests[3].params[0].i = notd_fd;
253*8a272653SPeter Holm 	tests[1].tests[3].params[1].cp = absolute_file;
254*8a272653SPeter Holm 	tests[1].tests[3].params[2].m = 33190;
255*8a272653SPeter Holm 	tests[1].tests[3].params[3].i = 0;
256*8a272653SPeter Holm 	tests[1].tests[4].result = 0;
257*8a272653SPeter Holm 	tests[1].tests[4].params[0].i = AT_FDCWD;
258*8a272653SPeter Holm 	tests[1].tests[4].params[1].cp = symlinkf;
259*8a272653SPeter Holm 	tests[1].tests[4].params[2].m = 33190;
260*8a272653SPeter Holm 	tests[1].tests[4].params[3].i = AT_SYMLINK_NOFOLLOW;
261*8a272653SPeter Holm 	tests[1].tests[5].result = 0;
262*8a272653SPeter Holm 	tests[1].tests[5].params[0].i = rel_fd;
263*8a272653SPeter Holm 	tests[1].tests[5].params[1].cp = file;
264*8a272653SPeter Holm 	tests[1].tests[5].params[2].m = 33190;
265*8a272653SPeter Holm 	tests[1].tests[5].params[3].i = 0;
266*8a272653SPeter Holm 
267*8a272653SPeter Holm 	// fchownat
268*8a272653SPeter Holm 	tests[2].syscall = SYS_fchownat;
269*8a272653SPeter Holm 	tests[2].num_of_cases = 6;
270*8a272653SPeter Holm 	tests[2].name = "fchownat";
271*8a272653SPeter Holm 	tests[2].tests[0].result = EBADF;
272*8a272653SPeter Holm 	tests[2].tests[0].params[0].i = 106;	// invalid fd
273*8a272653SPeter Holm 	tests[2].tests[0].params[1].cp = relative_file;
274*8a272653SPeter Holm 	tests[2].tests[0].params[2].u = 65534;
275*8a272653SPeter Holm 	tests[2].tests[0].params[3].g = 65534;
276*8a272653SPeter Holm 	tests[2].tests[0].params[4].i = 0;
277*8a272653SPeter Holm 	tests[2].tests[1].result = EINVAL;
278*8a272653SPeter Holm 	tests[2].tests[1].params[0].i = rel_fd;
279*8a272653SPeter Holm 	tests[2].tests[1].params[1].cp = file;
280*8a272653SPeter Holm 	tests[2].tests[1].params[2].u = 65534;
281*8a272653SPeter Holm 	tests[2].tests[1].params[3].g = 65534;
282*8a272653SPeter Holm 	tests[2].tests[1].params[4].i = 123;	// invalid flag
283*8a272653SPeter Holm 	tests[2].tests[2].result = ENOTDIR;
284*8a272653SPeter Holm 	tests[2].tests[2].params[0].i = notd_fd;
285*8a272653SPeter Holm 	tests[2].tests[2].params[1].cp = relative_file;
286*8a272653SPeter Holm 	tests[2].tests[2].params[2].u = 65534;
287*8a272653SPeter Holm 	tests[2].tests[2].params[3].g = 65534;
288*8a272653SPeter Holm 	tests[2].tests[2].params[4].i = 0;
289*8a272653SPeter Holm 	tests[2].tests[3].result = 0;
290*8a272653SPeter Holm 	tests[2].tests[3].params[0].i = notd_fd;
291*8a272653SPeter Holm 	tests[2].tests[3].params[1].cp = absolute_file;
292*8a272653SPeter Holm 	tests[2].tests[3].params[2].u = 65534;
293*8a272653SPeter Holm 	tests[2].tests[3].params[3].g = 65534;
294*8a272653SPeter Holm 	tests[2].tests[3].params[4].i = 0;
295*8a272653SPeter Holm 	tests[2].tests[4].result = 0;
296*8a272653SPeter Holm 	tests[2].tests[4].params[0].i = AT_FDCWD;
297*8a272653SPeter Holm 	tests[2].tests[4].params[1].cp = symlinkf;
298*8a272653SPeter Holm 	tests[2].tests[4].params[2].u = 65534;
299*8a272653SPeter Holm 	tests[2].tests[4].params[3].g = 65534;
300*8a272653SPeter Holm 	tests[2].tests[4].params[4].i = AT_SYMLINK_NOFOLLOW;
301*8a272653SPeter Holm 	tests[2].tests[5].result = 0;
302*8a272653SPeter Holm 	tests[2].tests[5].params[0].i = rel_fd;
303*8a272653SPeter Holm 	tests[2].tests[5].params[1].cp = file;
304*8a272653SPeter Holm 	tests[2].tests[5].params[2].u = 0;
305*8a272653SPeter Holm 	tests[2].tests[5].params[3].g = 0;
306*8a272653SPeter Holm 	tests[2].tests[5].params[4].i = 0;
307*8a272653SPeter Holm 
308*8a272653SPeter Holm 	// fstatat
309*8a272653SPeter Holm 	tests[3].syscall = SYS_fstatat;
310*8a272653SPeter Holm 	tests[3].num_of_cases = 5;
311*8a272653SPeter Holm 	tests[3].name = "fstatat";
312*8a272653SPeter Holm 	tests[3].tests[0].result = EBADF;
313*8a272653SPeter Holm 	tests[3].tests[0].params[0].i = 106;	// invalid fd
314*8a272653SPeter Holm 	tests[3].tests[0].params[1].cp = relative_file;
315*8a272653SPeter Holm 	tests[3].tests[0].params[2].vp = &buf;
316*8a272653SPeter Holm 	tests[3].tests[0].params[3].i = 0;
317*8a272653SPeter Holm 	tests[3].tests[1].result = EINVAL;
318*8a272653SPeter Holm 	tests[3].tests[1].params[0].i = rel_fd;
319*8a272653SPeter Holm 	tests[3].tests[1].params[1].cp = relative_file;
320*8a272653SPeter Holm 	tests[3].tests[1].params[2].vp = &buf;
321*8a272653SPeter Holm 	tests[3].tests[1].params[3].i = 123;	// invalid flags
322*8a272653SPeter Holm 	tests[3].tests[2].result = ENOTDIR;
323*8a272653SPeter Holm 	tests[3].tests[2].params[0].i = notd_fd;
324*8a272653SPeter Holm 	tests[3].tests[2].params[1].cp = relative_file;
325*8a272653SPeter Holm 	tests[3].tests[2].params[2].vp = &buf;
326*8a272653SPeter Holm 	tests[3].tests[2].params[3].i = 0;
327*8a272653SPeter Holm 	tests[3].tests[2].result = 0;
328*8a272653SPeter Holm 	tests[3].tests[2].params[0].i = rel_fd;
329*8a272653SPeter Holm 	tests[3].tests[2].params[1].cp = file;
330*8a272653SPeter Holm 	tests[3].tests[2].params[2].vp = &buf;
331*8a272653SPeter Holm 	tests[3].tests[2].params[3].i = 0;
332*8a272653SPeter Holm 	tests[3].tests[3].result = 0;
333*8a272653SPeter Holm 	tests[3].tests[3].params[0].i = AT_FDCWD;
334*8a272653SPeter Holm 	tests[3].tests[3].params[1].cp = symlinkf;
335*8a272653SPeter Holm 	tests[3].tests[3].params[2].vp = &buf;
336*8a272653SPeter Holm 	tests[3].tests[3].params[3].i = AT_SYMLINK_NOFOLLOW;
337*8a272653SPeter Holm 	tests[3].tests[4].result = 0;
338*8a272653SPeter Holm 	tests[3].tests[4].params[0].i = notd_fd;
339*8a272653SPeter Holm 	tests[3].tests[4].params[1].cp = absolute_file;
340*8a272653SPeter Holm 	tests[3].tests[4].params[2].vp = &buf;
341*8a272653SPeter Holm 	tests[3].tests[4].params[3].i = 0;
342*8a272653SPeter Holm 
343*8a272653SPeter Holm 	// futimesat
344*8a272653SPeter Holm 	tests[4].syscall = SYS_futimesat;
345*8a272653SPeter Holm 	tests[4].num_of_cases = 4;
346*8a272653SPeter Holm 	tests[4].name = "futimesat";
347*8a272653SPeter Holm 	tests[4].tests[0].result = EBADF;
348*8a272653SPeter Holm 	tests[4].tests[0].params[0].i = 106;	// invalid fd
349*8a272653SPeter Holm 	tests[4].tests[0].params[1].cp = relative_file;
350*8a272653SPeter Holm 	tests[4].tests[0].params[2].vp = times;
351*8a272653SPeter Holm 	tests[4].tests[1].result = ENOTDIR;
352*8a272653SPeter Holm 	tests[4].tests[1].params[0].i = notd_fd;
353*8a272653SPeter Holm 	tests[4].tests[1].params[1].cp = relative_file;
354*8a272653SPeter Holm 	tests[4].tests[1].params[2].vp = times;
355*8a272653SPeter Holm 	tests[4].tests[2].result = 0;
356*8a272653SPeter Holm 	tests[4].tests[2].params[0].i = rel_fd;
357*8a272653SPeter Holm 	tests[4].tests[2].params[1].cp = file;
358*8a272653SPeter Holm 	tests[4].tests[2].params[2].vp = times;
359*8a272653SPeter Holm 	tests[4].tests[3].result = 0;
360*8a272653SPeter Holm 	tests[4].tests[3].params[0].i = notd_fd;
361*8a272653SPeter Holm 	tests[4].tests[3].params[1].cp = absolute_file;
362*8a272653SPeter Holm 	tests[4].tests[3].params[2].vp = times;
363*8a272653SPeter Holm 
364*8a272653SPeter Holm 	// linkat
365*8a272653SPeter Holm 	tests[5].syscall = SYS_linkat;
366*8a272653SPeter Holm 	tests[5].num_of_cases = 7;
367*8a272653SPeter Holm 	tests[5].name = "linkat";
368*8a272653SPeter Holm 	tests[5].tests[0].result = EBADF;
369*8a272653SPeter Holm 	tests[5].tests[0].params[0].i = 106;	// invalid fd
370*8a272653SPeter Holm 	tests[5].tests[0].params[1].cp = relative_file;
371*8a272653SPeter Holm 	tests[5].tests[0].params[2].i = AT_FDCWD;
372*8a272653SPeter Holm 	tests[5].tests[0].params[3].cp = newlink;
373*8a272653SPeter Holm 	tests[5].tests[0].params[4].i = 0;
374*8a272653SPeter Holm 	tests[5].tests[1].result = EBADF;
375*8a272653SPeter Holm 	tests[5].tests[1].params[0].i = AT_FDCWD;
376*8a272653SPeter Holm 	tests[5].tests[1].params[1].cp = relative_file;
377*8a272653SPeter Holm 	tests[5].tests[1].params[2].i = 106;	// invalid fd
378*8a272653SPeter Holm 	tests[5].tests[1].params[3].cp = newlink;
379*8a272653SPeter Holm 	tests[5].tests[1].params[4].i = 0;
380*8a272653SPeter Holm 	tests[5].tests[2].result = EINVAL;
381*8a272653SPeter Holm 	tests[5].tests[2].params[0].i = rel_fd;
382*8a272653SPeter Holm 	tests[5].tests[2].params[1].cp = relative_file;
383*8a272653SPeter Holm 	tests[5].tests[2].params[2].i = AT_FDCWD;
384*8a272653SPeter Holm 	tests[5].tests[2].params[3].cp = newlink;
385*8a272653SPeter Holm 	tests[5].tests[2].params[4].i = 123;	// invalid flag
386*8a272653SPeter Holm 	tests[5].tests[3].result = ENOTDIR;
387*8a272653SPeter Holm 	tests[5].tests[3].params[0].i = notd_fd;
388*8a272653SPeter Holm 	tests[5].tests[3].params[1].cp = relative_file;
389*8a272653SPeter Holm 	tests[5].tests[3].params[2].i = AT_FDCWD;
390*8a272653SPeter Holm 	tests[5].tests[3].params[3].cp = newlink;
391*8a272653SPeter Holm 	tests[5].tests[3].params[4].i = 0;
392*8a272653SPeter Holm 	tests[5].tests[4].result = 0;
393*8a272653SPeter Holm 	tests[5].tests[4].params[0].i = rel_fd;
394*8a272653SPeter Holm 	tests[5].tests[4].params[1].cp = file;
395*8a272653SPeter Holm 	tests[5].tests[4].params[2].i = rel_fd;
396*8a272653SPeter Holm 	tests[5].tests[4].params[3].cp = newlink;
397*8a272653SPeter Holm 	tests[5].tests[4].params[4].i = 0;
398*8a272653SPeter Holm 	tests[5].tests[5].result = 0;
399*8a272653SPeter Holm 	tests[5].tests[5].params[0].i = AT_FDCWD;
400*8a272653SPeter Holm 	tests[5].tests[5].params[1].cp = symlinkf;
401*8a272653SPeter Holm 	tests[5].tests[5].params[2].i = rel_fd;
402*8a272653SPeter Holm 	tests[5].tests[5].params[3].cp = newlink2;
403*8a272653SPeter Holm 	tests[5].tests[5].params[4].i = 0;
404*8a272653SPeter Holm 	tests[5].tests[6].result = 0;
405*8a272653SPeter Holm 	tests[5].tests[6].params[0].i = AT_FDCWD;
406*8a272653SPeter Holm 	tests[5].tests[6].params[1].cp = symlinkf;
407*8a272653SPeter Holm 	tests[5].tests[6].params[2].i = rel_fd;
408*8a272653SPeter Holm 	tests[5].tests[6].params[3].cp = newlink3;
409*8a272653SPeter Holm 	tests[5].tests[6].params[4].i = AT_SYMLINK_FOLLOW;
410*8a272653SPeter Holm 
411*8a272653SPeter Holm 	// mkdirat
412*8a272653SPeter Holm 	tests[6].syscall = SYS_mkdirat;
413*8a272653SPeter Holm 	tests[6].num_of_cases = 3;
414*8a272653SPeter Holm 	tests[6].name = "mkdirat";
415*8a272653SPeter Holm 	tests[6].tests[0].result = EBADF;
416*8a272653SPeter Holm 	tests[6].tests[0].params[0].i = 106;	// invalid fd
417*8a272653SPeter Holm 	tests[6].tests[0].params[1].cp = relative_file;
418*8a272653SPeter Holm 	tests[6].tests[0].params[2].m = 33190;
419*8a272653SPeter Holm 	tests[6].tests[1].result = ENOTDIR;
420*8a272653SPeter Holm 	tests[6].tests[1].params[0].i = notd_fd;
421*8a272653SPeter Holm 	tests[6].tests[1].params[1].cp = relative_file;
422*8a272653SPeter Holm 	tests[6].tests[1].params[2].m = 33190;
423*8a272653SPeter Holm 	tests[6].tests[2].result = 0;
424*8a272653SPeter Holm 	tests[6].tests[2].params[0].i = rel_fd;
425*8a272653SPeter Holm 	tests[6].tests[2].params[1].cp = newdir;
426*8a272653SPeter Holm 	tests[6].tests[2].params[2].m = 33190;
427*8a272653SPeter Holm 
428*8a272653SPeter Holm 	// mkfifoat
429*8a272653SPeter Holm 	tests[7].syscall = SYS_mkfifoat;
430*8a272653SPeter Holm 	tests[7].num_of_cases = 3;
431*8a272653SPeter Holm 	tests[7].name = "mkfifoat";
432*8a272653SPeter Holm 	tests[7].tests[0].result = EBADF;
433*8a272653SPeter Holm 	tests[7].tests[0].params[0].i = 107;	// invalid fd
434*8a272653SPeter Holm 	tests[7].tests[0].params[1].cp = relative_file;
435*8a272653SPeter Holm 	tests[7].tests[0].params[2].m = 33190;
436*8a272653SPeter Holm 	tests[7].tests[1].result = ENOTDIR;
437*8a272653SPeter Holm 	tests[7].tests[1].params[0].i = notd_fd;
438*8a272653SPeter Holm 	tests[7].tests[1].params[1].cp = relative_file;
439*8a272653SPeter Holm 	tests[7].tests[1].params[2].m = 33190;
440*8a272653SPeter Holm 	tests[7].tests[2].result = 0;
441*8a272653SPeter Holm 	tests[7].tests[2].params[0].i = rel_fd;
442*8a272653SPeter Holm 	tests[7].tests[2].params[1].cp = fifo;
443*8a272653SPeter Holm 	tests[7].tests[2].params[2].m = 33190;
444*8a272653SPeter Holm 
445*8a272653SPeter Holm 	// mknodat
446*8a272653SPeter Holm 	tests[8].syscall = SYS_mknodat;
447*8a272653SPeter Holm 	tests[8].num_of_cases = 3;
448*8a272653SPeter Holm 	tests[8].name = "mknodat";
449*8a272653SPeter Holm 	tests[8].tests[0].result = EBADF;
450*8a272653SPeter Holm 	tests[8].tests[0].params[0].i = 108;	// invalid fd
451*8a272653SPeter Holm 	tests[8].tests[0].params[1].cp = relative_file;
452*8a272653SPeter Holm 	tests[8].tests[0].params[2].m = 0666 | S_IFCHR;
453*8a272653SPeter Holm 	tests[8].tests[0].params[3].d = 15;
454*8a272653SPeter Holm 	tests[8].tests[1].result = ENOTDIR;
455*8a272653SPeter Holm 	tests[8].tests[1].params[0].i = notd_fd;
456*8a272653SPeter Holm 	tests[8].tests[1].params[1].cp = relative_file;
457*8a272653SPeter Holm 	tests[8].tests[1].params[2].m = 0666 | S_IFCHR;
458*8a272653SPeter Holm 	tests[8].tests[1].params[3].d = 15;
459*8a272653SPeter Holm 	tests[8].tests[2].result = 0;
460*8a272653SPeter Holm 	tests[8].tests[2].params[0].i = rel_fd;
461*8a272653SPeter Holm 	tests[8].tests[2].params[1].cp = nod;
462*8a272653SPeter Holm 	tests[8].tests[2].params[2].m = 0666 | S_IFCHR;
463*8a272653SPeter Holm 	tests[8].tests[2].params[3].d = 2570;
464*8a272653SPeter Holm 
465*8a272653SPeter Holm 	// openat
466*8a272653SPeter Holm 	tests[9].syscall = SYS_openat;
467*8a272653SPeter Holm 	tests[9].num_of_cases = 5;
468*8a272653SPeter Holm 	tests[9].name = "openat";
469*8a272653SPeter Holm 	tests[9].tests[0].result = EBADF;
470*8a272653SPeter Holm 	tests[9].tests[0].params[0].i = 106;	// invalid fd
471*8a272653SPeter Holm 	tests[9].tests[0].params[1].cp = relative_file;
472*8a272653SPeter Holm 	tests[9].tests[0].params[2].i = O_RDONLY;
473*8a272653SPeter Holm 	tests[9].tests[0].params[3].i = 0666;
474*8a272653SPeter Holm 	tests[9].tests[1].result = ENOTDIR;
475*8a272653SPeter Holm 	tests[9].tests[1].params[0].i = notd_fd;
476*8a272653SPeter Holm 	tests[9].tests[1].params[1].cp = relative_file;
477*8a272653SPeter Holm 	tests[9].tests[1].params[2].i = O_RDONLY;
478*8a272653SPeter Holm 	tests[9].tests[1].params[3].i = 0666;
479*8a272653SPeter Holm 	tests[9].tests[2].result = 7;		// hardcoded fd
480*8a272653SPeter Holm 	tests[9].tests[2].params[0].i = rel_fd;
481*8a272653SPeter Holm 	tests[9].tests[2].params[1].cp = file;
482*8a272653SPeter Holm 	tests[9].tests[2].params[2].i = O_RDONLY;
483*8a272653SPeter Holm 	tests[9].tests[2].params[3].i = 0400;
484*8a272653SPeter Holm 	tests[9].tests[3].result = 8;		// hardcoded fd
485*8a272653SPeter Holm 	tests[9].tests[3].params[0].i = notd_fd;
486*8a272653SPeter Holm 	tests[9].tests[3].params[1].cp = absolute_file;
487*8a272653SPeter Holm 	tests[9].tests[3].params[2].i = O_RDONLY;
488*8a272653SPeter Holm 	tests[9].tests[3].params[3].i = 0400;
489*8a272653SPeter Holm 	tests[9].tests[4].result = 9;		// hardcoded fd
490*8a272653SPeter Holm 	tests[9].tests[4].params[0].i = rel_fd;
491*8a272653SPeter Holm 	tests[9].tests[4].params[1].cp = newfile;
492*8a272653SPeter Holm 	tests[9].tests[4].params[2].i = O_RDONLY | O_CREAT;
493*8a272653SPeter Holm 	tests[9].tests[4].params[3].i = 0666;
494*8a272653SPeter Holm 
495*8a272653SPeter Holm 	// readlinkat
496*8a272653SPeter Holm 	tests[10].syscall = SYS_readlinkat;
497*8a272653SPeter Holm 	tests[10].num_of_cases = 3;
498*8a272653SPeter Holm 	tests[10].name = "readlinkat";
499*8a272653SPeter Holm 	tests[10].tests[0].result = EBADF;
500*8a272653SPeter Holm 	tests[10].tests[0].params[0].i = 106;	// invalid fd
501*8a272653SPeter Holm 	tests[10].tests[0].params[1].cp = relative_file;
502*8a272653SPeter Holm 	tests[10].tests[0].params[2].vp = cbuf;
503*8a272653SPeter Holm 	tests[10].tests[0].params[3].i = PATH_MAX;
504*8a272653SPeter Holm 	tests[10].tests[1].result = ENOTDIR;
505*8a272653SPeter Holm 	tests[10].tests[1].params[0].i = notd_fd;
506*8a272653SPeter Holm 	tests[10].tests[1].params[1].cp = relative_file;
507*8a272653SPeter Holm 	tests[10].tests[1].params[2].vp = cbuf;
508*8a272653SPeter Holm 	tests[10].tests[1].params[3].i = PATH_MAX;
509*8a272653SPeter Holm 	tests[10].tests[2].result = strlen(absolute_file);
510*8a272653SPeter Holm 	tests[10].tests[2].params[0].i = AT_FDCWD;
511*8a272653SPeter Holm 	tests[10].tests[2].params[1].cp = symlinkf;
512*8a272653SPeter Holm 	tests[10].tests[2].params[2].vp = cbuf;
513*8a272653SPeter Holm 	tests[10].tests[2].params[3].i = PATH_MAX;
514*8a272653SPeter Holm 
515*8a272653SPeter Holm 	// renameat
516*8a272653SPeter Holm 	tests[11].syscall = SYS_renameat;
517*8a272653SPeter Holm 	tests[11].num_of_cases = 5;
518*8a272653SPeter Holm 	tests[11].name = "renameat";
519*8a272653SPeter Holm 	tests[11].tests[0].result = EBADF;
520*8a272653SPeter Holm 	tests[11].tests[0].params[0].i = 106;	// invalid fd
521*8a272653SPeter Holm 	tests[11].tests[0].params[1].cp = file;
522*8a272653SPeter Holm 	tests[11].tests[0].params[2].i = rel_fd;
523*8a272653SPeter Holm 	tests[11].tests[0].params[3].cp = file;
524*8a272653SPeter Holm 	tests[11].tests[1].result = EBADF;
525*8a272653SPeter Holm 	tests[11].tests[1].params[0].i = rel_fd;
526*8a272653SPeter Holm 	tests[11].tests[1].params[1].cp = file;
527*8a272653SPeter Holm 	tests[11].tests[1].params[2].i = 106;	// invalid fd
528*8a272653SPeter Holm 	tests[11].tests[1].params[3].cp = file;
529*8a272653SPeter Holm 	tests[11].tests[2].result = ENOTDIR;
530*8a272653SPeter Holm 	tests[11].tests[2].params[0].i = notd_fd;
531*8a272653SPeter Holm 	tests[11].tests[2].params[1].cp = relative_file;
532*8a272653SPeter Holm 	tests[11].tests[2].params[2].i = rel_fd;
533*8a272653SPeter Holm 	tests[11].tests[2].params[3].cp = file;
534*8a272653SPeter Holm 	tests[11].tests[3].result = ENOTDIR;
535*8a272653SPeter Holm 	tests[11].tests[3].params[0].i = rel_fd;
536*8a272653SPeter Holm 	tests[11].tests[3].params[1].cp = file;
537*8a272653SPeter Holm 	tests[11].tests[3].params[2].i = notd_fd;
538*8a272653SPeter Holm 	tests[11].tests[3].params[3].cp = relative_file;
539*8a272653SPeter Holm 	tests[11].tests[4].result = 0;
540*8a272653SPeter Holm 	tests[11].tests[4].params[0].i = rel_fd;
541*8a272653SPeter Holm 	tests[11].tests[4].params[1].cp = newfile;
542*8a272653SPeter Holm 	tests[11].tests[4].params[2].i = AT_FDCWD;
543*8a272653SPeter Holm 	tests[11].tests[4].params[3].cp = newfile;
544*8a272653SPeter Holm 
545*8a272653SPeter Holm 	// symlinkat
546*8a272653SPeter Holm 	tests[12].syscall = SYS_symlinkat;
547*8a272653SPeter Holm 	tests[12].num_of_cases = 3;
548*8a272653SPeter Holm 	tests[12].name = "symlinkat";
549*8a272653SPeter Holm 	tests[12].tests[0].result = EBADF;
550*8a272653SPeter Holm 	tests[12].tests[0].params[0].cp = file;
551*8a272653SPeter Holm 	tests[12].tests[0].params[1].i = 106;	// invalid fd
552*8a272653SPeter Holm 	tests[12].tests[0].params[2].cp = file;
553*8a272653SPeter Holm 	tests[12].tests[1].result = ENOTDIR;
554*8a272653SPeter Holm 	tests[12].tests[1].params[0].cp = file;
555*8a272653SPeter Holm 	tests[12].tests[1].params[1].i = notd_fd;
556*8a272653SPeter Holm 	tests[12].tests[1].params[2].cp = relative_file;
557*8a272653SPeter Holm 	tests[12].tests[2].result = 0;
558*8a272653SPeter Holm 	tests[12].tests[2].params[0].cp = absolute_file;
559*8a272653SPeter Holm 	tests[12].tests[2].params[1].i = rel_fd;
560*8a272653SPeter Holm 	tests[12].tests[2].params[2].cp = newslink;
561*8a272653SPeter Holm 
562*8a272653SPeter Holm 	// unlinkat
563*8a272653SPeter Holm 	tests[13].syscall = SYS_unlinkat;
564*8a272653SPeter Holm 	tests[13].num_of_cases = 7;
565*8a272653SPeter Holm 	tests[13].name = "unlinkat";
566*8a272653SPeter Holm 	tests[13].tests[0].result = EBADF;
567*8a272653SPeter Holm 	tests[13].tests[0].params[0].i = 106;	// invalid fd
568*8a272653SPeter Holm 	tests[13].tests[0].params[1].cp = relative_file;
569*8a272653SPeter Holm 	tests[13].tests[0].params[2].i = 0;
570*8a272653SPeter Holm 	tests[13].tests[1].result = ENOTDIR;
571*8a272653SPeter Holm 	tests[13].tests[1].params[0].i = notd_fd;
572*8a272653SPeter Holm 	tests[13].tests[1].params[1].cp = relative_file;
573*8a272653SPeter Holm 	tests[13].tests[1].params[2].i = 0;
574*8a272653SPeter Holm 	tests[13].tests[2].result = EINVAL;
575*8a272653SPeter Holm 	tests[13].tests[2].params[0].i = rel_fd;
576*8a272653SPeter Holm 	tests[13].tests[2].params[1].cp = file;
577*8a272653SPeter Holm 	tests[13].tests[2].params[2].i = 123;	// invalid flag
578*8a272653SPeter Holm 	tests[13].tests[3].result = ENOTDIR;
579*8a272653SPeter Holm 	tests[13].tests[3].params[0].i = rel_fd;
580*8a272653SPeter Holm 	tests[13].tests[3].params[1].cp = not_dir_path;
581*8a272653SPeter Holm 	tests[13].tests[3].params[2].i = AT_REMOVEDIR;
582*8a272653SPeter Holm 	tests[13].tests[4].result = ENOTEMPTY;
583*8a272653SPeter Holm 	tests[13].tests[4].params[0].i = AT_FDCWD;
584*8a272653SPeter Holm 	tests[13].tests[4].params[1].cp = relative_path;
585*8a272653SPeter Holm 	tests[13].tests[4].params[2].i = AT_REMOVEDIR;
586*8a272653SPeter Holm 	tests[13].tests[5].result = 0;
587*8a272653SPeter Holm 	tests[13].tests[5].params[0].i = rel_fd;
588*8a272653SPeter Holm 	tests[13].tests[5].params[1].cp = newdir;
589*8a272653SPeter Holm 	tests[13].tests[5].params[2].i = AT_REMOVEDIR;
590*8a272653SPeter Holm 	tests[13].tests[6].result = 0;
591*8a272653SPeter Holm 	tests[13].tests[6].params[0].i = AT_FDCWD;
592*8a272653SPeter Holm 	tests[13].tests[6].params[1].cp = newfile;
593*8a272653SPeter Holm 	tests[13].tests[6].params[2].i = 0;
594*8a272653SPeter Holm 
595*8a272653SPeter Holm 	// fexecve
596*8a272653SPeter Holm 	tests[14].syscall = SYS_fexecve;
597*8a272653SPeter Holm 	tests[14].num_of_cases = 2;
598*8a272653SPeter Holm 	tests[14].name = "fexecve";
599*8a272653SPeter Holm 	tests[14].tests[0].result = EBADF;
600*8a272653SPeter Holm 	tests[14].tests[0].params[0].i = 106;	// invalid fd
601*8a272653SPeter Holm 	tests[14].tests[0].params[1].cpp = pargv;
602*8a272653SPeter Holm 	tests[14].tests[0].params[2].cpp = NULL;
603*8a272653SPeter Holm 	// This is EXPECTED to execve /bin/date, so dont expect OK output
604*8a272653SPeter Holm 	tests[14].tests[1].result = 0;
605*8a272653SPeter Holm 	tests[14].tests[1].params[0].i = exec_fd;
606*8a272653SPeter Holm 	tests[14].tests[1].params[1].cpp = pargv;
607*8a272653SPeter Holm 	tests[14].tests[1].params[2].cpp = NULL;
608*8a272653SPeter Holm }
609*8a272653SPeter Holm 
610*8a272653SPeter Holm void
cleanup()611*8a272653SPeter Holm cleanup()
612*8a272653SPeter Holm {
613*8a272653SPeter Holm 	int error;
614*8a272653SPeter Holm 
615*8a272653SPeter Holm 	close(notd_fd);
616*8a272653SPeter Holm 	close(rel_fd);
617*8a272653SPeter Holm 	close(abs_fd);
618*8a272653SPeter Holm 
619*8a272653SPeter Holm 	if (!file_exist) {
620*8a272653SPeter Holm 		error = unlink("tmp/foo");
621*8a272653SPeter Holm 		if (error) {
622*8a272653SPeter Holm 			perror("unlink");
623*8a272653SPeter Holm 			exit(0);
624*8a272653SPeter Holm 		}
625*8a272653SPeter Holm 	}
626*8a272653SPeter Holm 	if (!dir_exist) {
627*8a272653SPeter Holm 		error = rmdir(absolute_path);
628*8a272653SPeter Holm 		if (error) {
629*8a272653SPeter Holm 			perror("rmdir");
630*8a272653SPeter Holm 			exit(0);
631*8a272653SPeter Holm 		}
632*8a272653SPeter Holm 	}
633*8a272653SPeter Holm 	if (link_exist) {
634*8a272653SPeter Holm 		error = unlink(symlinkf);
635*8a272653SPeter Holm 		if (error) {
636*8a272653SPeter Holm 			perror("unlink");
637*8a272653SPeter Holm 			exit(0);
638*8a272653SPeter Holm 		}
639*8a272653SPeter Holm 	}
640*8a272653SPeter Holm }
641*8a272653SPeter Holm 
642*8a272653SPeter Holm void
setup_once()643*8a272653SPeter Holm setup_once()
644*8a272653SPeter Holm {
645*8a272653SPeter Holm }
646*8a272653SPeter Holm 
647*8a272653SPeter Holm int
main(int argc,char * argv[])648*8a272653SPeter Holm main(int argc, char *argv[])
649*8a272653SPeter Holm {
650*8a272653SPeter Holm 	int i,j;
651*8a272653SPeter Holm 	int error;
652*8a272653SPeter Holm 
653*8a272653SPeter Holm 	setup();
654*8a272653SPeter Holm 
655*8a272653SPeter Holm 	for (i = 0; i < NUM_OF_TESTS; i++) {
656*8a272653SPeter Holm 		printf("\nTest: %s\n", tests[i].name);
657*8a272653SPeter Holm 		for (j = 0; j < tests[i].num_of_cases; j++) {
658*8a272653SPeter Holm 			error = syscall(tests[i].syscall,
659*8a272653SPeter Holm 				tests[i].tests[j].params[0],
660*8a272653SPeter Holm 				tests[i].tests[j].params[1],
661*8a272653SPeter Holm 				tests[i].tests[j].params[2],
662*8a272653SPeter Holm 				tests[i].tests[j].params[3],
663*8a272653SPeter Holm 				tests[i].tests[j].params[4]);
664*8a272653SPeter Holm 			if (error == 0) {
665*8a272653SPeter Holm 				if (tests[i].tests[j].result == 0)
666*8a272653SPeter Holm 					printf("#%i ... OK\n", j);
667*8a272653SPeter Holm 				else {
668*8a272653SPeter Holm 					printf("#%i ... BAD: ", j);
669*8a272653SPeter Holm 					printf("expected %i, but got %i\n", tests[i].tests[j].result, error);
670*8a272653SPeter Holm 				}
671*8a272653SPeter Holm 			} else	{
672*8a272653SPeter Holm 				if (tests[i].tests[j].result == errno)
673*8a272653SPeter Holm 					printf("#%i ... OK\n", j);
674*8a272653SPeter Holm 				else {
675*8a272653SPeter Holm 					if (error != tests[i].tests[j].result) {
676*8a272653SPeter Holm 						printf("#%i ... BAD: ", j);
677*8a272653SPeter Holm 						printf("expected %i, but got %i\n", tests[i].tests[j].result, error);
678*8a272653SPeter Holm 					} else
679*8a272653SPeter Holm 						printf("#%i ... OK\n", j);
680*8a272653SPeter Holm 				}
681*8a272653SPeter Holm 			}
682*8a272653SPeter Holm 
683*8a272653SPeter Holm 		}
684*8a272653SPeter Holm 	}
685*8a272653SPeter Holm 
686*8a272653SPeter Holm 
687*8a272653SPeter Holm 	return (0);
688*8a272653SPeter Holm }
689