diff options
Diffstat (limited to 'libnetfs/io-read.c')
-rw-r--r-- | libnetfs/io-read.c | 9 |
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. */ |