From 6f4d00ee45693290fae042b27536b54f77b96acd Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 23 Sep 2013 23:00:39 +0200 Subject: fossil: import from plan 9 R=rsc https://codereview.appspot.com/7988047 --- src/cmd/fossil/9.h | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 src/cmd/fossil/9.h (limited to 'src/cmd/fossil/9.h') diff --git a/src/cmd/fossil/9.h b/src/cmd/fossil/9.h new file mode 100644 index 00000000..b7bdec26 --- /dev/null +++ b/src/cmd/fossil/9.h @@ -0,0 +1,258 @@ +#include +#include + +enum { + NFidHash = 503, +}; + +typedef struct Con Con; +typedef struct DirBuf DirBuf; +typedef struct Excl Excl; +typedef struct Fid Fid; +typedef struct Fsys Fsys; +typedef struct Msg Msg; + +#pragma incomplete DirBuf +#pragma incomplete Excl +#pragma incomplete Fsys + +struct Msg { + uchar* data; + u32int msize; /* actual size of data */ + Fcall t; + Fcall r; + Con* con; + + Msg* anext; /* allocation free list */ + + Msg* mnext; /* all active messsages on this Con */ + Msg* mprev; + + int state; /* */ + + Msg* flush; /* flushes waiting for this Msg */ + + Msg* rwnext; /* read/write queue */ + int nowq; /* do not place on write queue */ +}; + +enum { + MsgN = 0, + MsgR = 1, + Msg9 = 2, + MsgW = 3, + MsgF = 4, +}; + +enum { + ConNoneAllow = 1<<0, + ConNoAuthCheck = 1<<1, + ConNoPermCheck = 1<<2, + ConWstatAllow = 1<<3, + ConIPCheck = 1<<4, +}; +struct Con { + char* name; + uchar* data; /* max, not negotiated */ + int isconsole; /* immutable */ + int flags; /* immutable */ + char remote[128]; /* immutable */ + VtLock* lock; + int state; + int fd; + Msg* version; + u32int msize; /* negotiated with Tversion */ + VtRendez* rendez; + + Con* anext; /* alloc */ + Con* cnext; /* in use */ + Con* cprev; + + VtLock* alock; + int aok; /* authentication done */ + + VtLock* mlock; + Msg* mhead; /* all Msgs on this connection */ + Msg* mtail; + VtRendez* mrendez; + + VtLock* wlock; + Msg* whead; /* write queue */ + Msg* wtail; + VtRendez* wrendez; + + VtLock* fidlock; /* */ + Fid* fidhash[NFidHash]; + Fid* fhead; + Fid* ftail; + int nfid; +}; + +enum { + ConDead = 0, + ConNew = 1, + ConDown = 2, + ConInit = 3, + ConUp = 4, + ConMoribund = 5, +}; + +struct Fid { + VtLock* lock; + Con* con; + u32int fidno; + int ref; /* inc/dec under Con.fidlock */ + int flags; + + int open; + Fsys* fsys; + File* file; + Qid qid; + char* uid; + char* uname; + DirBuf* db; + Excl* excl; + + VtLock* alock; /* Tauth/Tattach */ + AuthRpc* rpc; + char* cuname; + + Fid* sort; /* sorted by uname in cmdWho */ + Fid* hash; /* lookup by fidno */ + Fid* next; /* clunk session with Tversion */ + Fid* prev; +}; + +enum { /* Fid.flags and fidGet(..., flags) */ + FidFCreate = 0x01, + FidFWlock = 0x02, +}; + +enum { /* Fid.open */ + FidOCreate = 0x01, + FidORead = 0x02, + FidOWrite = 0x04, + FidORclose = 0x08, +}; + +/* + * 9p.c + */ +extern int (*rFcall[Tmax])(Msg*); +extern int validFileName(char*); + +/* + * 9auth.c + */ +extern int authCheck(Fcall*, Fid*, Fsys*); +extern int authRead(Fid*, void*, int); +extern int authWrite(Fid*, void*, int); + +/* + * 9dir.c + */ +extern void dirBufFree(DirBuf*); +extern int dirDe2M(DirEntry*, uchar*, int); +extern int dirRead(Fid*, uchar*, int, vlong); + +/* + * 9excl.c + */ +extern int exclAlloc(Fid*); +extern void exclFree(Fid*); +extern void exclInit(void); +extern int exclUpdate(Fid*); + +/* + * 9fid.c + */ +extern void fidClunk(Fid*); +extern void fidClunkAll(Con*); +extern Fid* fidGet(Con*, u32int, int); +extern void fidInit(void); +extern void fidPut(Fid*); + +/* + * 9fsys.c + */ +extern void fsysFsRlock(Fsys*); +extern void fsysFsRUnlock(Fsys*); +extern Fs* fsysGetFs(Fsys*); +extern Fsys* fsysGet(char*); +extern char* fsysGetName(Fsys*); +extern File* fsysGetRoot(Fsys*, char*); +extern Fsys* fsysIncRef(Fsys*); +extern int fsysInit(void); +extern int fsysNoAuthCheck(Fsys*); +extern int fsysNoPermCheck(Fsys*); +extern void fsysPut(Fsys*); +extern int fsysWstatAllow(Fsys*); + +/* + * 9lstn.c + */ +extern int lstnInit(void); + +/* + * 9proc.c + */ +extern Con* conAlloc(int, char*, int); +extern void conInit(void); +extern void msgFlush(Msg*); +extern void msgInit(void); + +/* + * 9srv.c + */ +extern int srvInit(void); + +/* + * 9user.c + */ +extern int groupLeader(char*, char*); +extern int groupMember(char*, char*); +extern int groupWriteMember(char*); +extern char* unameByUid(char*); +extern char* uidByUname(char*); +extern int usersInit(void); +extern int usersFileRead(char*); +extern int validUserName(char*); + +extern char* uidadm; +extern char* unamenone; +extern char* uidnoworld; + +/* + * Ccli.c + */ +extern int cliAddCmd(char*, int (*)(int, char*[])); +extern int cliError(char*, ...); +extern int cliInit(void); +extern int cliExec(char*); +#pragma varargck argpos cliError 1 + +/* + * Ccmd.c + */ +extern int cmdInit(void); + +/* + * Ccons.c + */ +extern int consPrompt(char*); +extern int consInit(void); +extern int consOpen(int, int, int); +extern int consTTY(void); +extern int consWrite(char*, int); + +/* + * Clog.c + */ +extern int consPrint(char*, ...); +extern int consVPrint(char*, va_list); +#pragma varargck argpos consPrint 1 + +/* + * fossil.c + */ +extern int Dflag; -- cgit v1.2.3