xref: /openbsd-src/regress/sys/dev/fdesc/confuse.c (revision baf7bba75fb27f49c58b803f728b80db07b0c254)
1*baf7bba7Spedro /*	$OpenBSD: confuse.c,v 1.1 2005/12/07 01:43:39 pedro Exp $	*/
2*baf7bba7Spedro 
3*baf7bba7Spedro /*
4*baf7bba7Spedro  * Written by Artur Grabowski <art@openbsd.org> in 2002. Public Domain.
5*baf7bba7Spedro  */
6*baf7bba7Spedro 
7*baf7bba7Spedro #include <stdio.h>
8*baf7bba7Spedro #include <stdlib.h>
9*baf7bba7Spedro #include <unistd.h>
10*baf7bba7Spedro #include <err.h>
11*baf7bba7Spedro #include <fcntl.h>
12*baf7bba7Spedro #include <errno.h>
13*baf7bba7Spedro 
14*baf7bba7Spedro int
main(int argc,char * argv[])15*baf7bba7Spedro main(int argc, char *argv[])
16*baf7bba7Spedro {
17*baf7bba7Spedro 	char fname[64];
18*baf7bba7Spedro 	int fd, newfd;
19*baf7bba7Spedro 
20*baf7bba7Spedro 	if ((fd = open("/dev/null", O_RDONLY)) < 0)
21*baf7bba7Spedro 		err(1, "open(/dev/null)");
22*baf7bba7Spedro 
23*baf7bba7Spedro 	/* Try to confuse fdescfs by making it open into itself. */
24*baf7bba7Spedro 	close(fd);
25*baf7bba7Spedro 
26*baf7bba7Spedro 	snprintf(fname, sizeof(fname), "/dev/fd/%d", fd);
27*baf7bba7Spedro 
28*baf7bba7Spedro 	if ((newfd = open(fname, O_RDONLY)) == fd)
29*baf7bba7Spedro 		errx(1, "open of %s to %d succeeded, beware.", fname, fd);
30*baf7bba7Spedro 
31*baf7bba7Spedro 	if (newfd >= 0)
32*baf7bba7Spedro 		errx(1, "open(%s) gave us the unexpected %d", fname, fd);
33*baf7bba7Spedro 
34*baf7bba7Spedro 	if (errno == ENOENT)
35*baf7bba7Spedro 		err(1, "open(%s)", fname);
36*baf7bba7Spedro 
37*baf7bba7Spedro 	if (errno == ENXIO)
38*baf7bba7Spedro 		errx(1, "no support for fdesc in kernel");
39*baf7bba7Spedro 
40*baf7bba7Spedro 	warn("errno was (%d)", errno);
41*baf7bba7Spedro 
42*baf7bba7Spedro 	return 0;
43*baf7bba7Spedro }
44