xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/dup.c (revision 781103c4074deb8af160e8a0da2742ba6b29dc2b)
1*3e12c5d1SDavid du Colombier #include "lib.h"
2*3e12c5d1SDavid du Colombier #include <unistd.h>
3*3e12c5d1SDavid du Colombier #include <errno.h>
4*3e12c5d1SDavid du Colombier 
5*3e12c5d1SDavid du Colombier int
dup(int oldd)6*3e12c5d1SDavid du Colombier dup(int oldd)
7*3e12c5d1SDavid du Colombier {
8*3e12c5d1SDavid du Colombier 	return fcntl(oldd, F_DUPFD, 0);
9*3e12c5d1SDavid du Colombier }
10*3e12c5d1SDavid du Colombier 
11*3e12c5d1SDavid du Colombier int
dup2(int oldd,int newd)12*3e12c5d1SDavid du Colombier dup2(int oldd, int newd)
13*3e12c5d1SDavid du Colombier {
14*3e12c5d1SDavid du Colombier 	if(newd < 0 || newd >= OPEN_MAX){
15*3e12c5d1SDavid du Colombier 		errno = EBADF;
16*3e12c5d1SDavid du Colombier 		return -1;
17*3e12c5d1SDavid du Colombier 	}
18*3e12c5d1SDavid du Colombier 	if(oldd == newd && _fdinfo[newd].flags&FD_ISOPEN)
19*3e12c5d1SDavid du Colombier 		return newd;
20*3e12c5d1SDavid du Colombier 	close(newd);
21*3e12c5d1SDavid du Colombier 	return fcntl(oldd, F_DUPFD, newd);
22*3e12c5d1SDavid du Colombier }
23