cygwin.c 893 B

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