1 /* 2 * functions (possibly) linked in, complete, from libc. 3 */ 4 5 /* 6 * mem routines 7 */ 8 extern void* memccpy(void*, void*, int, long); 9 extern void* memset(void*, int, long); 10 extern int memcmp(void*, void*, long); 11 extern void* memmove(void*, void*, long); 12 extern void* memchr(void*, int, long); 13 14 /* 15 * string routines 16 */ 17 extern char* strcat(char*, char*); 18 extern char* strchr(char*, char); 19 extern int strcmp(char*, char*); 20 extern char* strcpy(char*, char*); 21 extern char* strncat(char*, char*, long); 22 extern char* strncpy(char*, char*, long); 23 extern int strncmp(char*, char*, long); 24 extern long strlen(char*); 25 extern char* strrchr(char*, char); 26 extern char* strstr(char*, char*); 27 28 /* 29 * print routines 30 * Fconv isn't used but is defined to satisfy prototypes in libg.h 31 * that are never called. 32 */ 33 typedef struct Fconv Fconv; 34 35 extern char* donprint(char*, char*, char*, void*); 36 extern int sprint(char*, char*, ...); 37 extern int print(char*, ...); 38 39 #define PRINTSIZE 256 40 41 /* 42 * one-of-a-kind 43 */ 44 extern int atoi(char*); 45 extern long strtol(char*, char**, int); 46 extern ulong strtoul(char*, char**, int); 47 extern long end; 48 49 /* 50 * Syscall data structures 51 */ 52 53 #define MORDER 0x0003 /* mask for bits defining order of mounting */ 54 #define MREPL 0x0000 /* mount replaces object */ 55 #define MBEFORE 0x0001 /* mount goes before others in union directory */ 56 #define MAFTER 0x0002 /* mount goes after others in union directory */ 57 #define MCREATE 0x0004 /* permit creation in mounted directory */ 58 #define MMASK 0x0007 /* all bits on */ 59 60 #define OREAD 0 /* open for read */ 61 #define OWRITE 1 /* write */ 62 #define ORDWR 2 /* read and write */ 63 #define OEXEC 3 /* execute, == read but check execute permission */ 64 #define OTRUNC 16 /* or'ed in (except for exec), truncate file first */ 65 #define OCEXEC 32 /* or'ed in, close on exec */ 66 #define ORCLOSE 64 /* or'ed in, remove on close */ 67 68 #define NCONT 0 /* continue after note */ 69 #define NDFLT 1 /* terminate after note */ 70 71 typedef struct Qid Qid; 72 typedef struct Dir Dir; 73 typedef struct Waitmsg Waitmsg; 74 75 #define ERRLEN 64 76 #define DIRLEN 116 77 #define NAMELEN 28 78 79 struct Qid 80 { 81 ulong path; 82 ulong vers; 83 }; 84 85 struct Dir 86 { 87 char name[NAMELEN]; 88 char uid[NAMELEN]; 89 char gid[NAMELEN]; 90 Qid qid; 91 ulong mode; 92 long atime; 93 long mtime; 94 vlong length; 95 short type; 96 short dev; 97 }; 98 99 struct Waitmsg 100 { 101 int pid; /* of loved one */ 102 int status; /* unused; a placeholder */ 103 ulong time[3]; /* of loved one */ 104 char msg[ERRLEN]; 105 }; 106 #define nelem(x) (sizeof(x)/sizeof((x)[0])) 107