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