xref: /plan9/sys/src/cmd/unix/u9fs/cygwin.c (revision d9306527b4a7229dcf0cf3c58aed36bb9da82854)
1*d9306527SDavid du Colombier /* compatability layer for u9fs support on CYGWIN */
2*d9306527SDavid du Colombier 
3*d9306527SDavid du Colombier #include <unistd.h>
4*d9306527SDavid du Colombier #include <errno.h>
5*d9306527SDavid du Colombier 
6*d9306527SDavid du Colombier ssize_t
pread(int fd,void * p,size_t n,off_t off)7*d9306527SDavid du Colombier pread(int fd, void *p, size_t n, off_t off)
8*d9306527SDavid du Colombier {
9*d9306527SDavid du Colombier 	off_t ooff;
10*d9306527SDavid du Colombier 	int oerrno;
11*d9306527SDavid du Colombier 
12*d9306527SDavid du Colombier 	if ((ooff  = lseek(fd, off, SEEK_SET)) == -1)
13*d9306527SDavid du Colombier 		return -1;
14*d9306527SDavid du Colombier 
15*d9306527SDavid du Colombier 	n = read(fd, p, n);
16*d9306527SDavid du Colombier 
17*d9306527SDavid du Colombier 	oerrno = errno;
18*d9306527SDavid du Colombier 	lseek(fd, ooff, SEEK_SET);
19*d9306527SDavid du Colombier 	errno = oerrno;
20*d9306527SDavid du Colombier 
21*d9306527SDavid du Colombier 	return n;
22*d9306527SDavid du Colombier }
23*d9306527SDavid du Colombier 
24*d9306527SDavid du Colombier ssize_t
pwrite(int fd,const void * p,size_t n,off_t off)25*d9306527SDavid du Colombier pwrite(int fd, const void *p, size_t n, off_t off)
26*d9306527SDavid du Colombier {
27*d9306527SDavid du Colombier 	off_t ooff;
28*d9306527SDavid du Colombier 	int oerrno;
29*d9306527SDavid du Colombier 
30*d9306527SDavid du Colombier 	if ((ooff  = lseek(fd, off, SEEK_SET)) == -1)
31*d9306527SDavid du Colombier 		return -1;
32*d9306527SDavid du Colombier 
33*d9306527SDavid du Colombier 	n = write(fd, p, n);
34*d9306527SDavid du Colombier 
35*d9306527SDavid du Colombier 	oerrno = errno;
36*d9306527SDavid du Colombier 	lseek(fd, ooff, SEEK_SET);
37*d9306527SDavid du Colombier 	errno = oerrno;
38*d9306527SDavid du Colombier 
39*d9306527SDavid du Colombier 	return n;
40*d9306527SDavid du Colombier }
41*d9306527SDavid du Colombier 
42*d9306527SDavid du Colombier int
setreuid(int ruid,int euid)43*d9306527SDavid du Colombier setreuid(int ruid, int euid)
44*d9306527SDavid du Colombier {
45*d9306527SDavid du Colombier 	if (ruid != -1)
46*d9306527SDavid du Colombier 		if (setuid(ruid) == -1)
47*d9306527SDavid du Colombier 			return(-1);
48*d9306527SDavid du Colombier 	if (euid != -1)
49*d9306527SDavid du Colombier 		if (seteuid(euid) == -1)
50*d9306527SDavid du Colombier 			return(-1);
51*d9306527SDavid du Colombier }
52*d9306527SDavid du Colombier 
53*d9306527SDavid du Colombier int
setregid(int rgid,int egid)54*d9306527SDavid du Colombier setregid(int rgid, int egid)
55*d9306527SDavid du Colombier {
56*d9306527SDavid du Colombier 	if (rgid != -1)
57*d9306527SDavid du Colombier 		if (setgid(rgid) == -1)
58*d9306527SDavid du Colombier 			return(-1);
59*d9306527SDavid du Colombier 	if (egid != -1)
60*d9306527SDavid du Colombier 		if (setegid(egid) == -1)
61*d9306527SDavid du Colombier 			return(-1);
62*d9306527SDavid du Colombier }
63