diff options
author | avg <avg@FreeBSD.org> | 2009-02-27 17:29:31 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2009-02-27 17:29:31 +0000 |
commit | 8a71ee729e4e68337d9662ebad3915cb39ce2d5d (patch) | |
tree | 71e4d4ec6a5452da518d6830bc6c2b1e56e4e98f /sys/fs/udf | |
parent | 1f16c7700d04a735aa3df3ed26ab236e680c21ad (diff) | |
download | FreeBSD-src-8a71ee729e4e68337d9662ebad3915cb39ce2d5d.zip FreeBSD-src-8a71ee729e4e68337d9662ebad3915cb39ce2d5d.tar.gz |
udf_readatoffset: return correct size and data pointer for data in fentry
This should help correct reading of directories with data located
in fentry.
Submitted by: bde
Approved by: jhb (mentor)
Diffstat (limited to 'sys/fs/udf')
-rw-r--r-- | sys/fs/udf/udf_vnops.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c index 5afb038..aa1791e 100644 --- a/sys/fs/udf/udf_vnops.c +++ b/sys/fs/udf/udf_vnops.c @@ -1319,6 +1319,12 @@ udf_readatoffset(struct udf_node *node, int *size, off_t offset, fentry = node->fentry; *data = &fentry->data[le32toh(fentry->l_ea)]; *size = le32toh(fentry->l_ad); + if (offset >= *size) + *size = 0; + else { + *data += offset; + *size -= offset; + } return (0); } else if (error != 0) { return (error); |