summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2009-02-27 17:29:31 +0000
committeravg <avg@FreeBSD.org>2009-02-27 17:29:31 +0000
commit8a71ee729e4e68337d9662ebad3915cb39ce2d5d (patch)
tree71e4d4ec6a5452da518d6830bc6c2b1e56e4e98f
parent1f16c7700d04a735aa3df3ed26ab236e680c21ad (diff)
downloadFreeBSD-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)
-rw-r--r--sys/fs/udf/udf_vnops.c6
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);
OpenPOWER on IntegriCloud