From ca6a2d95acc005ef9a50e3f962ef0bbaa7876751 Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 1 Aug 2006 14:38:30 +0000 Subject: break from readdir properly (Lou Kamenov) --- src/cmd/9pfuse/main.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src/cmd/9pfuse') diff --git a/src/cmd/9pfuse/main.c b/src/cmd/9pfuse/main.c index 567b6770..789c963b 100644 --- a/src/cmd/9pfuse/main.c +++ b/src/cmd/9pfuse/main.c @@ -825,24 +825,26 @@ fusereaddir(FuseMsg *m) p = buf; ep = buf + n; for(;;){ - if(ff->nd == 0){ - free(ff->d0); - ff->d0 = nil; - ff->d = nil; - if((ff->nd = fsdirread(ff->fid, &ff->d0)) < 0){ - replyfuseerrstr(m); - return; - } - if(ff->nd == 0) - break; - ff->d = ff->d0; - } - while(ff->nd > 0 && canpack(ff->d, ff->off, &p, ep)){ + while(ff->nd > 0){ + if(!canpack(ff->d, ff->off, &p, ep)) + goto out; ff->off++; ff->d++; ff->nd--; } - } + free(ff->d0); + ff->d0 = nil; + ff->d = nil; + if((ff->nd = fsdirread(ff->fid, &ff->d0)) < 0){ + replyfuseerrstr(m); + free(buf); + return; + } + if(ff->nd == 0) + break; + ff->d = ff->d0; + } +out: replyfuse(m, buf, p - buf); free(buf); } -- cgit v1.2.3