commit fa588406f02b5f2adf666211bef03fbee30a61b0 from: Russ Cox date: Mon Jan 13 22:07:44 2020 UTC 9pfuse: do not fswalk("..") f is open, so walk will fail. The comments say we only need one directory anyway. Fixes #277. commit - 1c78140d83ed1f3a2ced027a64113dcf187971fb commit + fa588406f02b5f2adf666211bef03fbee30a61b0 blob - 0df610022d1c00aa3555f4719d476a949dbdd7c5 blob + 69d1ad75d8853d8ce96529b69703c90c8d436849 --- src/cmd/9pfuse/main.c +++ src/cmd/9pfuse/main.c @@ -885,7 +885,7 @@ fusereadlink(FuseMsg *m) * are stored in m->d,nd,d0. */ int canpack(Dir*, uvlong, uchar**, uchar*); -Dir *dotdirs(CFid*); +Dir *dotdir(CFid*); void fusereaddir(FuseMsg *m) { @@ -902,8 +902,8 @@ fusereaddir(FuseMsg *m) if(in->offset == 0){ fsseek(ff->fid, 0, 0); free(ff->d0); - ff->d0 = ff->d = dotdirs(ff->fid); - ff->nd = 2; + ff->d0 = ff->d = dotdir(ff->fid); + ff->nd = 1; } n = in->size; if(n > fusemaxwrite) @@ -944,20 +944,13 @@ out: * We could add .. too, but it isn't necessary. */ Dir* -dotdirs(CFid *f) +dotdir(CFid *f) { Dir *d; - CFid *f1; - d = emalloc(2*sizeof *d); + d = emalloc(1*sizeof *d); d[0].name = "."; d[0].qid = fsqid(f); - d[1].name = ".."; - f1 = fswalk(f, ".."); - if(f1){ - d[1].qid = fsqid(f1); - fsclose(f1); - } return d; }