diff options
author | marcel <marcel@FreeBSD.org> | 2000-11-05 07:31:17 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2000-11-05 07:31:17 +0000 |
commit | 228f80f471a6aac4a4c41ef71a5360e9d3385365 (patch) | |
tree | 2651d5af1eb4e49cda0b297e737ebb9f9aad0388 /sys | |
parent | 229a59bc61fb77ffa0216a1c84d309b633f2f0dc (diff) | |
download | FreeBSD-src-228f80f471a6aac4a4c41ef71a5360e9d3385365.zip FreeBSD-src-228f80f471a6aac4a4c41ef71a5360e9d3385365.tar.gz |
Fix getdents syscall.
The offset field in struct dirent was set to the offset of
the next dirent in rev 1.36. The offset was calculated from
the current offset and the record length. This offset does
not necessarily match the real offset when we are using
cookies. Therefore, also use the cookies to set the offset
field in struct dirent if we're using cookies to iterate
through the dirents.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/compat/linux/linux_file.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c index 8fe7978..7b121bd 100644 --- a/sys/compat/linux/linux_file.c +++ b/sys/compat/linux/linux_file.c @@ -508,7 +508,10 @@ again: linux_dirent.doff = (linux_off_t) linuxreclen; linux_dirent.dreclen = (u_short) bdp->d_namlen; } else { - linux_dirent.doff = (linux_off_t)(off + reclen); + if (cookiep) + linux_dirent.doff = (linux_off_t)*cookiep; + else + linux_dirent.doff = (linux_off_t)(off + reclen); linux_dirent.dreclen = (u_short) linuxreclen; } strcpy(linux_dirent.dname, bdp->d_name); |