diff options
-rw-r--r-- | regress/sys/kern/dup2/Makefile | 11 | ||||
-rw-r--r-- | regress/sys/kern/dup2/dup2test.c | 39 |
2 files changed, 50 insertions, 0 deletions
diff --git a/regress/sys/kern/dup2/Makefile b/regress/sys/kern/dup2/Makefile new file mode 100644 index 00000000000..2b965247bc8 --- /dev/null +++ b/regress/sys/kern/dup2/Makefile @@ -0,0 +1,11 @@ +# $OpenBSD: Makefile,v 1.1 2001/10/08 22:40:50 art Exp $ + +PROG= dup2test +NOMAN= noman, no way, man + +install: + +regress: + ./dup2test + +.include <bsd.prog.mk> diff --git a/regress/sys/kern/dup2/dup2test.c b/regress/sys/kern/dup2/dup2test.c new file mode 100644 index 00000000000..2b3a8a4ef0a --- /dev/null +++ b/regress/sys/kern/dup2/dup2test.c @@ -0,0 +1,39 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <err.h> +#include <fcntl.h> + +int +main() +{ + int orgfd, fd1, fd2; + char temp[] = "/tmp/dup2XXXXXXXXX"; + + if ((orgfd = mkstemp(temp)) < 0) + err(1, "mkstemp"); + remove(temp); + + if (ftruncate(orgfd, 1024) != 0) + err(1, "ftruncate"); + + if ((fd1 = dup(orgfd)) < 0) + err(1, "dup"); + + /* Set close-on-exec */ + if (fcntl(fd1, F_SETFD, 1) != 0) + err(1, "fcntl(F_SETFD)"); + + if ((fd2 = dup2(fd1, fd1 + 1)) < 0) + err(1, "dup2"); + + /* Test 1: Do we get the right fd? */ + if (fd2 != fd1 + 1) + errx(1, "dup2 didn't give us the right fd"); + + /* Test 2: Was close-on-exec cleared? */ + if (fcntl(fd2, F_GETFD) != 0) + errx(1, "dup2 didn't clear close-on-exec"); + + return 0; +} |