xref: /minix3/minix/tests/t11a.c (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1*433d6423SLionel Sambuc /* t11a */
2*433d6423SLionel Sambuc 
3*433d6423SLionel Sambuc #include <sys/types.h>
4*433d6423SLionel Sambuc #include <errno.h>
5*433d6423SLionel Sambuc #include <fcntl.h>
6*433d6423SLionel Sambuc #include <stdlib.h>
7*433d6423SLionel Sambuc #include <unistd.h>
8*433d6423SLionel Sambuc #include <stdio.h>
9*433d6423SLionel Sambuc 
10*433d6423SLionel Sambuc #define MAX_ERROR 4
11*433d6423SLionel Sambuc 
12*433d6423SLionel Sambuc int errct, subtest=1;
13*433d6423SLionel Sambuc 
14*433d6423SLionel Sambuc int main(int argc, char *argv [], char *envp []);
15*433d6423SLionel Sambuc int diff(char *s1, char *s2);
16*433d6423SLionel Sambuc void e(int n);
17*433d6423SLionel Sambuc 
main(argc,argv,envp)18*433d6423SLionel Sambuc int main(argc, argv, envp)
19*433d6423SLionel Sambuc int argc;
20*433d6423SLionel Sambuc char *argv[], *envp[];
21*433d6423SLionel Sambuc {
22*433d6423SLionel Sambuc /* See if arguments passed ok. */
23*433d6423SLionel Sambuc 
24*433d6423SLionel Sambuc   char aa[4];
25*433d6423SLionel Sambuc 
26*433d6423SLionel Sambuc   if (diff(argv[0], "t11a")) e(21);
27*433d6423SLionel Sambuc   if (diff(argv[1], "arg0")) e(22);
28*433d6423SLionel Sambuc   if (diff(argv[2], "arg1")) e(23);
29*433d6423SLionel Sambuc   if (diff(argv[3], "arg2")) e(24);
30*433d6423SLionel Sambuc   if (diff(envp[0], "spring")) e(25);
31*433d6423SLionel Sambuc   if (diff(envp[1], "summer")) e(26);
32*433d6423SLionel Sambuc   if (argc != 4) e(27);
33*433d6423SLionel Sambuc 
34*433d6423SLionel Sambuc   /* Now see if the files are ok. */
35*433d6423SLionel Sambuc   if (read(3, aa, 4) != 2) e(28);
36*433d6423SLionel Sambuc   if (aa[0] != 7 || aa[1] != 9) e(29);
37*433d6423SLionel Sambuc 
38*433d6423SLionel Sambuc   if (getuid() == 10) e(30);
39*433d6423SLionel Sambuc   if (geteuid() != 10) e(31);
40*433d6423SLionel Sambuc   if (getgid() == 20) e(32);
41*433d6423SLionel Sambuc   if (getegid() != 20) e(33);
42*433d6423SLionel Sambuc 
43*433d6423SLionel Sambuc   if (open("t1", 0) < 0) e(34);
44*433d6423SLionel Sambuc   if (open("t2", 0) < 0) e(35);
45*433d6423SLionel Sambuc   exit(100);
46*433d6423SLionel Sambuc }
47*433d6423SLionel Sambuc 
diff(s1,s2)48*433d6423SLionel Sambuc int diff(s1, s2)
49*433d6423SLionel Sambuc char *s1, *s2;
50*433d6423SLionel Sambuc {
51*433d6423SLionel Sambuc   while (1) {
52*433d6423SLionel Sambuc 	if (*s1 == 0 && *s2 == 0) return(0);
53*433d6423SLionel Sambuc 	if (*s1 != *s2) return (1);
54*433d6423SLionel Sambuc 	s1++;
55*433d6423SLionel Sambuc 	s2++;
56*433d6423SLionel Sambuc   }
57*433d6423SLionel Sambuc }
58*433d6423SLionel Sambuc 
e(n)59*433d6423SLionel Sambuc void e(n)
60*433d6423SLionel Sambuc int n;
61*433d6423SLionel Sambuc {
62*433d6423SLionel Sambuc   printf("Subtest %d,  error %d  errno=%d  ", subtest, n, errno);
63*433d6423SLionel Sambuc   perror("");
64*433d6423SLionel Sambuc   if (errct++ > MAX_ERROR) {
65*433d6423SLionel Sambuc 	printf("Too many errors; test aborted\n");
66*433d6423SLionel Sambuc 	chdir("..");
67*433d6423SLionel Sambuc 	system("rm -rf DIR*");
68*433d6423SLionel Sambuc 	exit(1);
69*433d6423SLionel Sambuc   }
70*433d6423SLionel Sambuc }
71