break from readdir properly (Lou Kamenov)

This commit is contained in:
rsc 2006-08-01 14:38:30 +00:00
parent be8b4b397a
commit ca6a2d95ac

View file

@ -825,24 +825,26 @@ fusereaddir(FuseMsg *m)
p = buf; p = buf;
ep = buf + n; ep = buf + n;
for(;;){ for(;;){
if(ff->nd == 0){ while(ff->nd > 0){
if(!canpack(ff->d, ff->off, &p, ep))
goto out;
ff->off++;
ff->d++;
ff->nd--;
}
free(ff->d0); free(ff->d0);
ff->d0 = nil; ff->d0 = nil;
ff->d = nil; ff->d = nil;
if((ff->nd = fsdirread(ff->fid, &ff->d0)) < 0){ if((ff->nd = fsdirread(ff->fid, &ff->d0)) < 0){
replyfuseerrstr(m); replyfuseerrstr(m);
free(buf);
return; return;
} }
if(ff->nd == 0) if(ff->nd == 0)
break; break;
ff->d = ff->d0; ff->d = ff->d0;
} }
while(ff->nd > 0 && canpack(ff->d, ff->off, &p, ep)){ out:
ff->off++;
ff->d++;
ff->nd--;
}
}
replyfuse(m, buf, p - buf); replyfuse(m, buf, p - buf);
free(buf); free(buf);
} }