summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2013-06-09 01:19:22 +0000
committerpfg <pfg@FreeBSD.org>2013-06-09 01:19:22 +0000
commit2d8b3ad7fac17b8ea0626d96096ad53931194fe6 (patch)
tree917adeaf5cab25f757afa83859625ad68edd74b4 /lib
parent640526e3805496cda21ed4600cfaaf985d2f6159 (diff)
downloadFreeBSD-src-2d8b3ad7fac17b8ea0626d96096ad53931194fe6.zip
FreeBSD-src-2d8b3ad7fac17b8ea0626d96096ad53931194fe6.tar.gz
libstand: Reset the seek pointer in ext2fs as done in UFS.
Based on r134760: Reset the seek pointer to 0 when a file is successfully opened, since otherwise the initial seek offset will contain the directory offset of the filesystem block that contained its directory entry. This bug was mostly harmless because typically the directory is less than one filesystem block in size so the offset would be zero. It did however generally break loading a kernel from the (large) kernel compile directory. Also reset the seek pointer when a new inode is opened in read_inode(), though this is not actually necessary now because all callers set it afterwards. PR: 177328 Submitted by: Eric van Gyzen Reviewed by: iedowse MFC after: 5 days
Diffstat (limited to 'lib')
-rw-r--r--lib/libstand/ext2fs.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/libstand/ext2fs.c b/lib/libstand/ext2fs.c
index 1bd78e2..e0afb3e 100644
--- a/lib/libstand/ext2fs.c
+++ b/lib/libstand/ext2fs.c
@@ -536,6 +536,7 @@ ext2fs_open(const char *upath, struct open_file *f)
* Found terminal component.
*/
error = 0;
+ fp->f_seekp = 0;
out:
if (buf)
free(buf);
@@ -584,6 +585,7 @@ read_inode(ino_t inumber, struct open_file *f)
for (level = 0; level < NIADDR; level++)
fp->f_blkno[level] = -1;
fp->f_buf_blkno = -1;
+ fp->f_seekp = 0;
out:
free(buf);
OpenPOWER on IntegriCloud