MFp4: rework tmpfs_readdir() logic in terms of correctness.

Approved by:	re (tmpfs blanket)
Tested with:	fstest, fsx
This commit is contained in:
delphij 2007-08-16 11:00:07 +00:00
parent 3fef07aaec
commit e83de305a6

View File

@ -1219,22 +1219,25 @@ tmpfs_readdir(struct vop_readdir_args *v)
startoff = uio->uio_offset;
switch (startoff) {
case TMPFS_DIRCOOKIE_DOT:
if (uio->uio_offset == TMPFS_DIRCOOKIE_DOT) {
error = tmpfs_dir_getdotdent(node, uio);
if (error == 0)
cnt++;
break;
case TMPFS_DIRCOOKIE_DOTDOT:
error = tmpfs_dir_getdotdotdent(node, uio);
if (error == 0)
cnt++;
break;
default:
error = tmpfs_dir_getdents(node, uio, &cnt);
MPASS(error >= -1);
if (error != 0)
goto outok;
cnt++;
}
if (uio->uio_offset == TMPFS_DIRCOOKIE_DOTDOT) {
error = tmpfs_dir_getdotdotdent(node, uio);
if (error != 0)
goto outok;
cnt++;
}
error = tmpfs_dir_getdents(node, uio, &cnt);
outok:
MPASS(error >= -1);
if (error == -1)
error = 0;