libc.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. #define _LOCK_EXTENSION
  10. #define _QLOCK_EXTENSION
  11. #define _BSD_EXTENSION
  12. #include <sys/types.h>
  13. #include <lock.h>
  14. #include <qlock.h>
  15. #include <lib9.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <bsd.h>
  19. #include <unistd.h>
  20. #include <fcntl.h>
  21. #include <assert.h>
  22. #include <utf.h>
  23. #include <fmt.h>
  24. #include <signal.h>
  25. typedef
  26. struct Qid
  27. {
  28. uvlong path;
  29. uint32_t vers;
  30. uchar type;
  31. } Qid;
  32. typedef
  33. struct Dir {
  34. /* system-modified data */
  35. ushort type; /* server type */
  36. uint dev; /* server subtype */
  37. /* file data */
  38. Qid qid; /* unique id from server */
  39. uint32_t mode; /* permissions */
  40. uint32_t atime; /* last read time */
  41. uint32_t mtime; /* last write time */
  42. vlong length; /* file length: see <u.h> */
  43. char *name; /* last element of path */
  44. char *uid; /* owner name */
  45. char *gid; /* group name */
  46. char *muid; /* last modifier name */
  47. } Dir;
  48. uint _convM2D(uchar*, uint, Dir*, char*);
  49. uint _convD2M(Dir*, uchar*, uint);
  50. Dir *_dirstat(char*);
  51. int _dirwstat(char*, Dir*);
  52. Dir *_dirfstat(int);
  53. int _dirfwstat(int, Dir*);
  54. long _dirread(int, Dir**);
  55. long _dirreadall(int, Dir**);
  56. void _nulldir(Dir*);
  57. uint _sizeD2M(Dir*);
  58. typedef
  59. struct Waitmsg
  60. {
  61. int pid; /* of loved one */
  62. unsigned long time[3]; /* of loved one & descendants */
  63. char *msg;
  64. } Waitmsg;
  65. extern int _AWAIT(char*, int);
  66. extern int _ALARM(unsigned long);
  67. extern int _BIND(const char*, const char*, int);
  68. extern int _CHDIR(const char*);
  69. extern int _CLOSE(int);
  70. extern int _CREATE(char*, int, unsigned long);
  71. extern int _DUP(int, int);
  72. extern int _ERRSTR(char*, unsigned int);
  73. extern int _EXEC(char*, char*[]);
  74. extern void _EXITS(char *);
  75. extern int _FD2PATH(int, char*, int);
  76. extern int _FAUTH(int, char*);
  77. extern int _FSESSION(int, char*, int);
  78. extern int _FSTAT(int, unsigned char*, int);
  79. extern int _FWSTAT(int, unsigned char*, int);
  80. extern int _MOUNT(int, int, const char*, int, const char*);
  81. extern int _NOTED(int);
  82. extern int _NOTIFY(int(*)(void*, char*));
  83. extern int _OPEN(const char*, int);
  84. extern int _PIPE(int*);
  85. extern long _PREAD(int, void*, long, long long);
  86. extern long _PWRITE(int, void*, long, long long);
  87. extern long _READ(int, void*, long);
  88. extern int _REMOVE(const char*);
  89. extern int _RENDEZVOUS(unsigned long, unsigned long);
  90. extern int _RFORK(int);
  91. extern int _SEGATTACH(int, char*, void*, unsigned long);
  92. extern int _SEGBRK(void*, void*);
  93. extern int _SEGDETACH(void*);
  94. extern int _SEGFLUSH(void*, unsigned long);
  95. extern int _SEGFREE(void*, unsigned long);
  96. extern long long _SEEK(int, long long, int);
  97. extern int _SLEEP(long);
  98. extern int _STAT(const char*, unsigned char*, int);
  99. extern Waitmsg* _WAIT(void);
  100. extern long _WRITE(int, const void*, long);
  101. extern int _WSTAT(const char*, unsigned char*, int);
  102. extern void *_MALLOCZ(int, int);
  103. extern int _WERRSTR(char*, ...);
  104. extern long _READN(int, void*, long);
  105. extern int _IOUNIT(int);
  106. #define dirstat _dirstat
  107. #define dirfstat _dirfstat
  108. #define OREAD 0
  109. #define OWRITE 1
  110. #define ORDWR 2
  111. #define OCEXEC 32
  112. #define AREAD 4
  113. #define AWRITE 2
  114. #define AEXEC 1
  115. #define AEXIST 0
  116. #define open _OPEN
  117. #define close _CLOSE
  118. #define read _READ
  119. #define write _WRITE
  120. #define _exits(s) _exit(s && *(char*)s ? 1 : 0)
  121. #define exits(s) exit(s && *(char*)s ? 1 : 0)
  122. #define create _CREATE
  123. #define pread _PREAD
  124. #define readn _READN
  125. #define mallocz _MALLOCZ
  126. #define iounit _IOUNIT
  127. #define bind _BIND
  128. /* assume being called as in event.c */
  129. #define postnote(x, pid, msg) kill(pid, SIGTERM)
  130. #define atnotify(x, y) signal(SIGTERM, ekill)
  131. #define ERRMAX 128
  132. extern void setmalloctag(void*, uint32_t);
  133. extern uint32_t getcallerpc(void*);