system.c 929 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /* $Header$ */
  2. /* SYSTEM DEPENDENT ROUTINES */
  3. #include "system.h"
  4. #include "inputtype.h"
  5. #include <sys/stat.h>
  6. extern long lseek();
  7. int
  8. xopen(name, flag, mode)
  9. char *name;
  10. {
  11. if (name[0] == '-' && name[1] == '\0')
  12. return (flag == OP_RDONLY) ? 0 : 1;
  13. switch (flag) {
  14. case OP_RDONLY:
  15. return open(name, 0);
  16. case OP_WRONLY:
  17. return open(name, 1);
  18. case OP_CREAT:
  19. return creat(name, mode);
  20. case OP_APPEND:
  21. {
  22. register fd;
  23. if ((fd = open(name, 1)) < 0)
  24. return -1;
  25. lseek(fd, 0L, 2);
  26. return fd;
  27. }
  28. }
  29. /*NOTREACHED*/
  30. }
  31. int
  32. xclose(fildes)
  33. {
  34. if (fildes != 0 && fildes != 1)
  35. return close(fildes);
  36. return -1;
  37. }
  38. #ifdef READ_IN_ONE
  39. long
  40. xfsize(fildes)
  41. {
  42. struct stat stbuf;
  43. if (fstat(fildes, &stbuf) != 0)
  44. return -1;
  45. return stbuf.st_size;
  46. }
  47. #endif READ_IN_ONE
  48. exit(n)
  49. {
  50. _exit(n);
  51. }
  52. xstop(how, stat)
  53. {
  54. switch (how) {
  55. case S_ABORT:
  56. abort();
  57. case S_EXIT:
  58. exit(stat);
  59. }
  60. /*NOTREACHED*/
  61. }