1*3e12c5d1SDavid du Colombier #include "all.h" 2*3e12c5d1SDavid du Colombier 3*3e12c5d1SDavid du Colombier Uid* uid; 4*3e12c5d1SDavid du Colombier char* uidspace; 5*3e12c5d1SDavid du Colombier short* gidspace; 6*3e12c5d1SDavid du Colombier File* files; 7*3e12c5d1SDavid du Colombier Wpath* wpaths; 8*3e12c5d1SDavid du Colombier Lock wpathlock; 9*3e12c5d1SDavid du Colombier Lock newfplock; 10*3e12c5d1SDavid du Colombier RWlock mainlock; 11*3e12c5d1SDavid du Colombier long boottime; 12*3e12c5d1SDavid du Colombier Tlock *tlocks; 13*3e12c5d1SDavid du Colombier Conf conf; 14*3e12c5d1SDavid du Colombier Cons cons; 15*3e12c5d1SDavid du Colombier Chan *chan; 16*3e12c5d1SDavid du Colombier char service[2*NAMELEN]; 17*3e12c5d1SDavid du Colombier char *progname; 18*3e12c5d1SDavid du Colombier char *procname; 19*3e12c5d1SDavid du Colombier int RBUFSIZE; 20*3e12c5d1SDavid du Colombier int BUFSIZE; 21*3e12c5d1SDavid du Colombier int DIRPERBUF; 22*3e12c5d1SDavid du Colombier int INDPERBUF; 23*3e12c5d1SDavid du Colombier int INDPERBUF2; 24*3e12c5d1SDavid du Colombier int FEPERBUF; 25*3e12c5d1SDavid du Colombier 26*3e12c5d1SDavid du Colombier Filsys filsys[MAXFILSYS] = 27*3e12c5d1SDavid du Colombier { 28*3e12c5d1SDavid du Colombier {"main", {Devwren, 0, 0, 0}, 0}, 29*3e12c5d1SDavid du Colombier }; 30*3e12c5d1SDavid du Colombier 31*3e12c5d1SDavid du Colombier Device devnone = {Devnone, 0, 0, 0}; 32*3e12c5d1SDavid du Colombier 33*3e12c5d1SDavid du Colombier Devcall devcall[MAXDEV] = { 34*3e12c5d1SDavid du Colombier [Devnone] {0}, 35*3e12c5d1SDavid du Colombier [Devwren] {wreninit, wrenream, wrencheck, wrensuper, wrenroot, wrensize, wrenread, wrenwrite}, 36*3e12c5d1SDavid du Colombier }; 37*3e12c5d1SDavid du Colombier 38*3e12c5d1SDavid du Colombier void 39*3e12c5d1SDavid du Colombier (*p9call[MAXSYSCALL])(Chan*, Fcall*, Fcall*) = 40*3e12c5d1SDavid du Colombier { 41*3e12c5d1SDavid du Colombier [Tnop] f_nop, 42*3e12c5d1SDavid du Colombier [Tsession] f_session, 43*3e12c5d1SDavid du Colombier [Tflush] f_flush, 44*3e12c5d1SDavid du Colombier [Tattach] f_attach, 45*3e12c5d1SDavid du Colombier [Tclone] f_clone, 46*3e12c5d1SDavid du Colombier [Twalk] f_walk, 47*3e12c5d1SDavid du Colombier [Topen] f_open, 48*3e12c5d1SDavid du Colombier [Tcreate] f_create, 49*3e12c5d1SDavid du Colombier [Tread] f_read, 50*3e12c5d1SDavid du Colombier [Twrite] f_write, 51*3e12c5d1SDavid du Colombier [Tclunk] f_clunk, 52*3e12c5d1SDavid du Colombier [Tremove] f_remove, 53*3e12c5d1SDavid du Colombier [Tstat] f_stat, 54*3e12c5d1SDavid du Colombier [Twstat] f_wstat, 55*3e12c5d1SDavid du Colombier [Tclwalk] f_clwalk, 56*3e12c5d1SDavid du Colombier [Tauth] f_auth, 57*3e12c5d1SDavid du Colombier }; 58*3e12c5d1SDavid du Colombier 59*3e12c5d1SDavid du Colombier char* tagnames[] = 60*3e12c5d1SDavid du Colombier { 61*3e12c5d1SDavid du Colombier [Tbuck] "Tbuck", 62*3e12c5d1SDavid du Colombier [Tdir] "Tdir", 63*3e12c5d1SDavid du Colombier [Tfile] "Tfile", 64*3e12c5d1SDavid du Colombier [Tfree] "Tfree", 65*3e12c5d1SDavid du Colombier [Tind1] "Tind1", 66*3e12c5d1SDavid du Colombier [Tind2] "Tind2", 67*3e12c5d1SDavid du Colombier [Tnone] "Tnone", 68*3e12c5d1SDavid du Colombier [Tsuper] "Tsuper", 69*3e12c5d1SDavid du Colombier [Tvirgo] "Tvirgo", 70*3e12c5d1SDavid du Colombier [Tcache] "Tcache", 71*3e12c5d1SDavid du Colombier }; 72*3e12c5d1SDavid du Colombier 73*3e12c5d1SDavid du Colombier char *errstr[MAXERR] = 74*3e12c5d1SDavid du Colombier { 75*3e12c5d1SDavid du Colombier [Ebadspc] "attach -- bad specifier", 76*3e12c5d1SDavid du Colombier [Efid] "unknown fid", 77*3e12c5d1SDavid du Colombier [Echar] "bad character in directory name", 78*3e12c5d1SDavid du Colombier [Eopen] "read/write -- on non open fid", 79*3e12c5d1SDavid du Colombier [Ecount] "read/write -- count too big", 80*3e12c5d1SDavid du Colombier [Ealloc] "phase error -- directory entry not allocated", 81*3e12c5d1SDavid du Colombier [Eqid] "phase error -- qid does not match", 82*3e12c5d1SDavid du Colombier [Eauth] "no authentication", 83*3e12c5d1SDavid du Colombier [Eaccess] "access permission denied", 84*3e12c5d1SDavid du Colombier [Eentry] "directory entry not found", 85*3e12c5d1SDavid du Colombier [Emode] "open/create -- unknown mode", 86*3e12c5d1SDavid du Colombier [Edir1] "walk -- in a non-directory", 87*3e12c5d1SDavid du Colombier [Edir2] "create -- in a non-directory", 88*3e12c5d1SDavid du Colombier [Ephase] "phase error -- cannot happen", 89*3e12c5d1SDavid du Colombier [Eexist] "create -- file exists", 90*3e12c5d1SDavid du Colombier [Edot] "create -- . and .. illegal names", 91*3e12c5d1SDavid du Colombier [Eempty] "remove -- directory not empty", 92*3e12c5d1SDavid du Colombier [Ebadu] "attach -- privileged user", 93*3e12c5d1SDavid du Colombier [Enotu] "wstat -- not owner", 94*3e12c5d1SDavid du Colombier [Enotg] "wstat -- not in group", 95*3e12c5d1SDavid du Colombier [Ename] "create/wstat -- bad character in file name", 96*3e12c5d1SDavid du Colombier [Ewalk] "walk -- too many (system wide)", 97*3e12c5d1SDavid du Colombier [Eronly] "file system read only", 98*3e12c5d1SDavid du Colombier [Efull] "file system full", 99*3e12c5d1SDavid du Colombier [Eoffset] "read/write -- offset negative", 100*3e12c5d1SDavid du Colombier [Elocked] "open/create -- file is locked", 101*3e12c5d1SDavid du Colombier [Ebroken] "close/read/write -- lock is broken", 102*3e12c5d1SDavid du Colombier }; 103