1 #define _LOCK_EXTENSION 2 #define _QLOCK_EXTENSION 3 #define _BSD_EXTENSION 4 #include <sys/types.h> 5 #include <lock.h> 6 #include <qlock.h> 7 #include <lib9.h> 8 #include <stdlib.h> 9 #include <string.h> 10 #include <bsd.h> 11 #include <unistd.h> 12 #include <fcntl.h> 13 #include <assert.h> 14 #include <utf.h> 15 #include <fmt.h> 16 #include <signal.h> 17 #include <time.h> 18 19 #define nelem(x) (sizeof(x)/sizeof((x)[0])) 20 21 extern int tokenize(char*, char**, int); 22 23 typedef 24 struct Qid 25 { 26 uvlong path; 27 ulong vers; 28 uchar type; 29 } Qid; 30 31 typedef 32 struct Dir { 33 /* system-modified data */ 34 ushort type; /* server type */ 35 uint dev; /* server subtype */ 36 /* file data */ 37 Qid qid; /* unique id from server */ 38 ulong mode; /* permissions */ 39 ulong atime; /* last read time */ 40 ulong mtime; /* last write time */ 41 vlong length; /* file length: see <u.h> */ 42 char *name; /* last element of path */ 43 char *uid; /* owner name */ 44 char *gid; /* group name */ 45 char *muid; /* last modifier name */ 46 } Dir; 47 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 59 typedef 60 struct Waitmsg 61 { 62 int pid; /* of loved one */ 63 unsigned long time[3]; /* of loved one & descendants */ 64 char *msg; 65 } Waitmsg; 66 67 68 extern int _AWAIT(char*, int); 69 extern int _ALARM(unsigned long); 70 extern int _BIND(const char*, const char*, int); 71 extern int _CHDIR(const char*); 72 extern int _CLOSE(int); 73 extern int _CREATE(char*, int, unsigned long); 74 extern int _DUP(int, int); 75 extern int _ERRSTR(char*, unsigned int); 76 extern int _EXEC(char*, char*[]); 77 extern void _EXITS(char *); 78 extern int _FD2PATH(int, char*, int); 79 extern int _FAUTH(int, char*); 80 extern int _FSESSION(int, char*, int); 81 extern int _FSTAT(int, unsigned char*, int); 82 extern int _FWSTAT(int, unsigned char*, int); 83 extern int _MOUNT(int, int, const char*, int, const char*); 84 extern int _NOTED(int); 85 extern int _NOTIFY(int(*)(void*, char*)); 86 extern int _OPEN(const char*, int); 87 extern int _PIPE(int*); 88 extern long _PREAD(int, void*, long, long long); 89 extern long _PWRITE(int, void*, long, long long); 90 extern long _READ(int, void*, long); 91 extern int _REMOVE(const char*); 92 extern int _RENDEZVOUS(unsigned long, unsigned long); 93 extern int _RFORK(int); 94 extern int _SEGATTACH(int, char*, void*, unsigned long); 95 extern int _SEGBRK(void*, void*); 96 extern int _SEGDETACH(void*); 97 extern int _SEGFLUSH(void*, unsigned long); 98 extern int _SEGFREE(void*, unsigned long); 99 extern long long _SEEK(int, long long, int); 100 extern int _SLEEP(long); 101 extern int _STAT(const char*, unsigned char*, int); 102 extern Waitmsg* _WAIT(void); 103 extern long _WRITE(int, const void*, long); 104 extern int _WSTAT(const char*, unsigned char*, int); 105 extern void *_MALLOCZ(int, int); 106 extern int _WERRSTR(char*, ...); 107 extern long _READN(int, void*, long); 108 extern int _IOUNIT(int); 109 110 #define dirstat _dirstat 111 #define dirfstat _dirfstat 112 113 #define OREAD 0 114 #define OWRITE 1 115 #define ORDWR 2 116 #define OCEXEC 32 117 118 #define AREAD 4 119 #define AWRITE 2 120 #define AEXEC 1 121 #define AEXIST 0 122 123 #define open _OPEN 124 #define close _CLOSE 125 #define read _READ 126 #define write _WRITE 127 #define _exits(s) _exit(s && *(char*)s ? 1 : 0) 128 #define exits(s) exit(s && *(char*)s ? 1 : 0) 129 #define create _CREATE 130 #define pread _PREAD 131 #define readn _READN 132 #define mallocz _MALLOCZ 133 #define iounit _IOUNIT 134 135 /* assume being called as in event.c */ 136 #define postnote(x, pid, msg) kill(pid, SIGTERM) 137 #define atnotify(x, y) signal(SIGTERM, ekill) 138 139 #define ERRMAX 128 140 141 extern void setmalloctag(void*, ulong); 142 extern ulong getcallerpc(void*); 143 144 /* Used in libsec.h and not picked up in earlier type definitions */ 145 typedef unsigned int u32int; 146 typedef unsigned long long u64int; 147 148 int dec16(uchar *, int, char *, int); 149 int enc16(char *, int, uchar *, int); 150 int dec32(uchar *, int, char *, int); 151 int enc32(char *, int, uchar *, int); 152 int dec64(uchar *, int, char *, int); 153 int enc64(char *, int, uchar *, int); 154 155 extern vlong nsec(void); 156 157 extern void sysfatal(char*, ...); 158 159 extern ulong truerand(void); /* uses /dev/random */ 160 extern int getfields(char*, char**, int, int, char*); 161