📄 ratfs.h
字号:
#include <u.h>#include <libc.h>#include <auth.h>#include <fcall.h>#include <bio.h>enum { MAXRPC = 8192, Qroot = 1, /* fixed QID's */ Qallow, Qdelay, Qblock, Qdial, Qdeny, Qtrusted, Qctl, Qdummy, Qaddr, /* Qid's for "ip" & "account" subdirs (Qaddr-99) */ Qtrustedfile = 100, /* Qid's for trusted files (100-999)*/ Qaddrfile = 1000, /* Qid's for address files (> 1000) */ /* type codes in node.d.type */ Directory = 0, /* normal directory */ Addrdir, /* contains "ip" and "account" directories */ IPaddr, /* contains IP address "files" */ Acctaddr, /* contains Account address "files" */ Trusted, /* contains trusted IP files */ Trustedperm, /* permanently trusted IP pseudo-file */ Trustedtemp, /* temporarily trusted IP pseudo-file */ Ctlfile, /* ctl file under root */ Dummynode, /* place holder for Address pseudo-files */};typedef struct Fid Fid;typedef struct Node Node;typedef struct Address Address;typedef struct Cidraddr Cidraddr;typedef struct Keyword Keyword; /* an active fid */struct Fid{ int fid; int dirindex; Node *node; /* current position in path */ int busy; int open; /* directories only */ char *name; char *uid; Fid *next;};struct Cidraddr{ ulong ipaddr; /* CIDR base addr */ ulong mask; /* CIDR mask */}; /* an address is either an account name (domain!user) or Ip address */struct Address{ char *name; /* from the control file */ Cidraddr ip; /* CIDR Address */};/* Fids point to either a directory or pseudo-file */struct Node{ Dir d; /* d.name, d.uid, d.gid, d.muid are atoms */ int count; int allocated; /* number of Address structs allocated */ ulong baseqid; /* base of Qid's in this set */ Node *parent; /* points to self in root node*/ Node *sibs; /* 0 in Ipaddr and Acctaddr dirs */ union { Node *children; /* type == Directory || Addrdir || Trusted */ Address *addrs; /* type == Ipaddr || Acctaddr */ Cidraddr ip; /* type == Trustedfile */ };};struct Keyword { char *name; int code;};Node *root; /* root of directory tree */Node dummy; /* dummy node for fid's pointing to an Address */int srvfd; /* fd for 9fs */uchar rbuf[IOHDRSZ+MAXRPC+1];int debugfd;char *ctlfile;char *conffile;long lastconftime;long lastctltime;int trustedqid;char* atom(char*);void cidrparse(Cidraddr*, char*);void cleantrusted(void);Node* dirwalk(char*, Node*);int dread(Fid*, int);void fatal(char*, ...);Node* finddir(int);int findkey(char*, Keyword*);void getconf(void);int hread(Fid*, int);void io(void);Node* newnode(Node*, char*, ushort, int, ulong);void printfid(Fid*);void printnode(Node*);void printtree(Node*);void reload(void);char* subslash(char*);char* walk(char*, Fid*);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -