summaryrefslogtreecommitdiff
path: root/libnetfs/io-read.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnetfs/io-read.c')
-rw-r--r--libnetfs/io-read.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libnetfs/io-read.c b/libnetfs/io-read.c
index a4b1b2e2..ff8fbcff 100644
--- a/libnetfs/io-read.c
+++ b/libnetfs/io-read.c
@@ -65,6 +65,8 @@ netfs_S_io_read (struct protid *user,
if (start + amount > size)
amount = size - start;
+ if (amount > size)
+ amount = size;
if (start >= size)
{
@@ -74,7 +76,7 @@ netfs_S_io_read (struct protid *user,
else if (amount < size || start > 0)
{
char *whole_link = alloca (size);
- err = netfs_attempt_readlink (user->user, node, *data);
+ err = netfs_attempt_readlink (user->user, node, whole_link);
if (! err)
{
memcpy (*data, whole_link + start, amount);
@@ -82,7 +84,10 @@ netfs_S_io_read (struct protid *user,
}
}
else
- err = netfs_attempt_readlink (user->user, node, *data);
+ {
+ err = netfs_attempt_readlink (user->user, node, *data);
+ *datalen = amount;
+ }
}
else
/* Read from a normal file. */