3 static Xfile * xflfree;
6 #define FIDMOD 127 /* prime */
8 static Xfile *xfiles[FIDMOD];
9 static Lock xlocks[FIDMOD];
12 xfile(Qid *qid, void *s, int new)
17 k = ((ulong)qid->path ^ (((u32int)(uintptr)s)<<24))%FIDMOD;
21 for(f=*hp, pf=0; f; pf=f, f=f->next)
22 if(f->qid.path == qid->path
23 && (u32int)(uintptr)f->s == (u32int)(uintptr)s)
37 if(!(f = xflfree)) /* assign = */
38 f = listalloc(1024/sizeof(Xfile), sizeof(Xfile));
40 memset(f, 0, sizeof(Xfile));
51 xfid(char *uid, Xfile *xp, int new)
55 for(f=xp->users, pf=0; f; pf=f, f=f->next)
56 if(f->uid[0] == uid[0] && strcmp(f->uid, uid) == 0)
65 clunkfid(xp->s, f->urfid);
67 clunkfid(xp->s, f->opfid);
74 if(!(f = xfdfree)) /* assign = */
75 f = listalloc(1024/sizeof(Xfid), sizeof(Xfid));
77 memset(f, 0, sizeof(Xfid));
81 f->uid = strstore(uid);
89 xfpurgeuid(Session *s, char *uid)
95 for(k=0; k<FIDMOD; k++){
98 for(f=*hp; f; f=f->next)
99 if(f->s == s && (xf = xfid(uid, f, 0))){ /* assign = */