11 static Xfile *freelist;
12 static Lock xlock, freelock;
23 if(name==0 || name[0]==0)
29 fd = open(name, rdonly ? OREAD : ORDWR);
34 if((dir = dirfstat(fd)) == 0){
40 for(fxf=0, xf=xhead; xf; xf=xf->next){
46 if(xf->qid.path != dir->qid.path || xf->qid.vers != dir->qid.vers)
48 if(strcmp(xf->name, name) != 0 || xf->dev < 0)
50 chat("incref \"%s\", dev=%d...", xf->name, xf->dev);
58 fxf = malloc(sizeof(Xfs));
69 chat("alloc \"%s\", dev=%d...", name, fd);
70 fxf->name = strdup(name);
88 refxfs(Xfs *xf, int delta)
93 /*mchat("free \"%s\", dev=%d...", xf->name, xf->dev);
108 xfile(Fid *fid, int flag)
112 f = (Xfile*)fid->aux;
117 return (f && f->xf && f->xf->dev < 0) ? 0 : f;
119 if (f) chat("Clean and fid->aux already exists\n");
135 if(f = freelist){ /* assign = */
140 f = malloc(sizeof(Xfile));
153 if(f->xf && f->root){