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