lib.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * functions (possibly) linked in, complete, from libc.
  3. */
  4. /*
  5. * mem routines
  6. */
  7. extern void *memccpy(void*, void*, int, long);
  8. extern void *memset(void*, int, long);
  9. extern int memcmp(void*, void*, long);
  10. extern void *memmove(void*, void*, long);
  11. extern void *memchr(void*, int, long);
  12. /*
  13. * string routines
  14. */
  15. extern char *strcat(char*, char*);
  16. extern char *strchr(char*, char);
  17. extern char *strrchr(char*, char);
  18. extern int strcmp(char*, char*);
  19. extern char *strcpy(char*, char*);
  20. extern char *strncat(char*, char*, long);
  21. extern char *strncpy(char*, char*, long);
  22. extern int strncmp(char*, char*, long);
  23. extern long strlen(char*);
  24. extern char* strstr(char*, char*);
  25. extern int atoi(char*);
  26. enum
  27. {
  28. UTFmax = 3, /* maximum bytes per rune */
  29. Runesync = 0x80, /* cannot represent part of a UTF sequence */
  30. Runeself = 0x80, /* rune and UTF sequences are the same (<) */
  31. Runeerror = 0x80, /* decoding error in UTF */
  32. };
  33. /*
  34. * rune routines
  35. */
  36. extern int runetochar(char*, Rune*);
  37. extern int chartorune(Rune*, char*);
  38. extern char* utfrune(char*, long);
  39. extern int utflen(char*);
  40. extern int runelen(long);
  41. extern int abs(int);
  42. /*
  43. * print routines
  44. */
  45. typedef struct Cconv Fconv;
  46. extern char* donprint(char*, char*, char*, void*);
  47. extern int sprint(char*, char*, ...);
  48. extern char* seprint(char*, char*, char*, ...);
  49. extern int snprint(char*, int, char*, ...);
  50. extern int print(char*, ...);
  51. /*
  52. * one-of-a-kind
  53. */
  54. extern char* cleanname(char*);
  55. extern uintptr getcallerpc(void*);
  56. extern long strtol(char*, char**, int);
  57. extern ulong strtoul(char*, char**, int);
  58. extern vlong strtoll(char*, char**, int);
  59. extern uvlong strtoull(char*, char**, int);
  60. extern char etext[];
  61. extern char edata[];
  62. extern char end[];
  63. extern int getfields(char*, char**, int, int, char*);
  64. /*
  65. * Syscall data structures
  66. */
  67. #define MORDER 0x0003 /* mask for bits defining order of mounting */
  68. #define MREPL 0x0000 /* mount replaces object */
  69. #define MBEFORE 0x0001 /* mount goes before others in union directory */
  70. #define MAFTER 0x0002 /* mount goes after others in union directory */
  71. #define MCREATE 0x0004 /* permit creation in mounted directory */
  72. #define MCACHE 0x0010 /* cache some data */
  73. #define MMASK 0x001F /* all bits on */
  74. #define OREAD 0 /* open for read */
  75. #define OWRITE 1 /* write */
  76. #define ORDWR 2 /* read and write */
  77. #define OEXEC 3 /* execute, == read but check execute permission */
  78. #define OTRUNC 16 /* or'ed in (except for exec), truncate file first */
  79. #define OCEXEC 32 /* or'ed in, close on exec */
  80. #define ORCLOSE 64 /* or'ed in, remove on close */
  81. #define NCONT 0 /* continue after note */
  82. #define NDFLT 1 /* terminate after note */
  83. #define NSAVE 2 /* clear note but hold state */
  84. #define NRSTR 3 /* restore saved state */
  85. typedef struct Qid Qid;
  86. typedef struct Dir Dir;
  87. typedef struct Waitmsg Waitmsg;
  88. #define ERRLEN 64
  89. #define DIRLEN 116
  90. #define NAMELEN 28
  91. struct Qid
  92. {
  93. ulong path;
  94. ulong vers;
  95. };
  96. struct Dir
  97. {
  98. char name[NAMELEN];
  99. char uid[NAMELEN];
  100. char gid[NAMELEN];
  101. Qid qid;
  102. ulong mode;
  103. long atime;
  104. long mtime;
  105. vlong length;
  106. short type;
  107. short dev;
  108. };
  109. struct Waitmsg
  110. {
  111. char pid[12]; /* of loved one */
  112. char time[3*12]; /* of loved one and descendants */
  113. char msg[ERRLEN];
  114. };
  115. /*
  116. * locks
  117. */
  118. typedef
  119. struct Lock {
  120. int val;
  121. } Lock;
  122. extern int _tas(int*);
  123. extern void lock(Lock*);
  124. extern void unlock(Lock*);
  125. extern int canlock(Lock*);