xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/pipe.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include <errno.h>
23e12c5d1SDavid du Colombier #include "lib.h"
33e12c5d1SDavid du Colombier #include "sys9.h"
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier int
pipe(int fildes[2])63e12c5d1SDavid du Colombier pipe(int fildes[2])
73e12c5d1SDavid du Colombier {
8*219b2ee8SDavid du Colombier 	Fdinfo *fi;
9*219b2ee8SDavid du Colombier 	int i;
10*219b2ee8SDavid du Colombier 
113e12c5d1SDavid du Colombier 	if(!fildes){
123e12c5d1SDavid du Colombier 		errno = EFAULT;
133e12c5d1SDavid du Colombier 		return -1;
143e12c5d1SDavid du Colombier 	}
153e12c5d1SDavid du Colombier 	if(_PIPE(fildes) < 0)
163e12c5d1SDavid du Colombier 		_syserrno();
17*219b2ee8SDavid du Colombier 	else
18*219b2ee8SDavid du Colombier 	if(fildes[0] < 0 || fildes[0]>=OPEN_MAX ||
19*219b2ee8SDavid du Colombier 	   fildes[1] < 0 || fildes[1]>=OPEN_MAX) {
203e12c5d1SDavid du Colombier 		errno = EMFILE;
213e12c5d1SDavid du Colombier 		return -1;
223e12c5d1SDavid du Colombier 	}
23*219b2ee8SDavid du Colombier 	for(i = 0; i <=1; i++) {
24*219b2ee8SDavid du Colombier 		fi = &_fdinfo[fildes[i]];
25*219b2ee8SDavid du Colombier 		fi->flags = FD_ISOPEN;
26*219b2ee8SDavid du Colombier 		fi->oflags = O_RDWR;
27*219b2ee8SDavid du Colombier 		fi->uid = 0;	/* none */
28*219b2ee8SDavid du Colombier 		fi->gid = 0;
29*219b2ee8SDavid du Colombier 	}
303e12c5d1SDavid du Colombier 	return 0;
313e12c5d1SDavid du Colombier }
32