lib.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #define offsetof(s, m) (ulong)(&(((s*)0)->m))
  2. /*
  3. * functions (possibly) linked in, complete, from libc.
  4. */
  5. /*
  6. * mem routines
  7. */
  8. extern void* memccpy(void*, void*, int, ulong);
  9. extern void* memset(void*, int, ulong);
  10. extern int memcmp(void*, void*, ulong);
  11. extern void* memmove(void*, void*, ulong);
  12. extern void* memchr(void*, int, ulong);
  13. /*
  14. * string routines
  15. */
  16. extern char* strcat(char*, char*);
  17. extern char* strchr(char*, int);
  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* strrchr(char*, char);
  25. extern char* strstr(char*, char*);
  26. /*
  27. * print routines
  28. */
  29. typedef struct Fmt Fmt;
  30. typedef int (*Fmts)(Fmt*);
  31. struct Fmt{
  32. uchar runes; /* output buffer is runes or chars? */
  33. void *start; /* of buffer */
  34. void *to; /* current place in the buffer */
  35. void *stop; /* end of the buffer; overwritten if flush fails */
  36. int (*flush)(Fmt *); /* called when to == stop */
  37. void *farg; /* to make flush a closure */
  38. int nfmt; /* num chars formatted so far */
  39. va_list args; /* args passed to dofmt */
  40. int r; /* % format Rune */
  41. int width;
  42. int prec;
  43. ulong flags;
  44. };
  45. extern int print(char*, ...);
  46. extern char* vseprint(char*, char*, char*, va_list);
  47. extern int sprint(char*, char*, ...);
  48. extern int snprint(char*, int, char*, ...);
  49. extern int fmtinstall(int, int (*)(Fmt*));
  50. #pragma varargck argpos addconf 1
  51. #pragma varargck argpos fmtprint 2
  52. #pragma varargck argpos print 1
  53. #pragma varargck argpos seprint 3
  54. #pragma varargck argpos snprint 3
  55. #pragma varargck argpos sprint 2
  56. #pragma varargck type "lux" void*
  57. #pragma varargck type "E" uchar* /* eipfmt */
  58. /* from /sys/include/libc.h */
  59. #pragma varargck type "lld" vlong
  60. #pragma varargck type "llx" vlong
  61. #pragma varargck type "lld" uvlong
  62. #pragma varargck type "llx" uvlong
  63. #pragma varargck type "ld" long
  64. #pragma varargck type "lx" long
  65. #pragma varargck type "lb" long
  66. #pragma varargck type "ld" ulong
  67. #pragma varargck type "lx" ulong
  68. #pragma varargck type "lb" ulong
  69. #pragma varargck type "d" int
  70. #pragma varargck type "x" int
  71. #pragma varargck type "c" int
  72. #pragma varargck type "C" int
  73. #pragma varargck type "b" int
  74. #pragma varargck type "d" uint
  75. #pragma varargck type "x" uint
  76. #pragma varargck type "c" uint
  77. #pragma varargck type "C" uint
  78. #pragma varargck type "b" uint
  79. #pragma varargck type "f" double
  80. #pragma varargck type "e" double
  81. #pragma varargck type "g" double
  82. #pragma varargck type "s" char*
  83. #pragma varargck type "q" char*
  84. #pragma varargck type "S" Rune*
  85. #pragma varargck type "Q" Rune*
  86. #pragma varargck type "r" void
  87. #pragma varargck type "%" void
  88. #pragma varargck type "n" int*
  89. #pragma varargck type "p" uintptr
  90. #pragma varargck type "p" void*
  91. #pragma varargck flag ','
  92. #pragma varargck flag 'h'
  93. #pragma varargck type "<" void*
  94. #pragma varargck type "[" void*
  95. #pragma varargck type "H" void*
  96. #pragma varargck type "lH" void*
  97. #define PRINTSIZE 256
  98. /*
  99. * one-of-a-kind
  100. */
  101. extern int atoi(char*);
  102. extern uintptr getcallerpc(void*);
  103. extern long strtol(char*, char**, int);
  104. extern ulong strtoul(char*, char**, int);
  105. extern uvlong strtoull(char*, char**, int);
  106. extern long end;
  107. #define NAMELEN 28