aboutsummaryrefslogtreecommitdiff
path: root/libnetfs/io-read.c
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2023-05-09 00:31:02 +0300
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-05-10 02:14:15 +0200
commitedc6fe07c5a7f9ade000b3bfc17c030fe2086e21 (patch)
treeb1d82a445b67a5bbe06635cbe3e648953c9199de /libnetfs/io-read.c
parent955c2e609c71575ab9e66cd0f451a0f18a1329ee (diff)
downloadhurd-edc6fe07c5a7f9ade000b3bfc17c030fe2086e21.tar.gz
hurd-edc6fe07c5a7f9ade000b3bfc17c030fe2086e21.tar.bz2
hurd-edc6fe07c5a7f9ade000b3bfc17c030fe2086e21.zip
libnetfs: Port to x86_64
Message-Id: <20230508213136.608575-8-bugaevc@gmail.com>
Diffstat (limited to 'libnetfs/io-read.c')
-rw-r--r--libnetfs/io-read.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/libnetfs/io-read.c b/libnetfs/io-read.c
index 688da1f6..2ee49c5d 100644
--- a/libnetfs/io-read.c
+++ b/libnetfs/io-read.c
@@ -34,6 +34,7 @@ netfs_S_io_read (struct protid *user,
off_t start;
struct node *node;
int alloced = 0;
+ size_t data_size = *datalen;
if (!user)
return EOPNOTSUPP;
@@ -47,12 +48,12 @@ netfs_S_io_read (struct protid *user,
return EBADF;
}
- if (amount > *datalen)
+ if (amount > data_size)
{
alloced = 1;
*data = mmap (0, amount, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
}
- *datalen = amount;
+ data_size = amount;
start = (offset == -1 ? user->po->filepointer : offset);
@@ -70,7 +71,7 @@ netfs_S_io_read (struct protid *user,
if (start >= size)
{
- *datalen = 0;
+ data_size = 0;
err = 0;
}
else if (amount < size || start > 0)
@@ -80,30 +81,31 @@ netfs_S_io_read (struct protid *user,
if (! err)
{
memcpy (*data, whole_link + start, amount);
- *datalen = amount;
+ data_size = amount;
}
}
else
{
err = netfs_attempt_readlink (user->user, node, *data);
- *datalen = amount;
+ data_size = amount;
}
}
else
/* Read from a normal file. */
- err = netfs_attempt_read (user->user, node, start, datalen, *data);
+ err = netfs_attempt_read (user->user, node, start, &data_size, *data);
if (offset == -1 && !err)
- user->po->filepointer += *datalen;
+ user->po->filepointer += data_size;
pthread_mutex_unlock (&node->lock);
if (err && alloced)
munmap (*data, amount);
- if (!err && alloced && (round_page (*datalen) < round_page (amount)))
- munmap (*data + round_page (*datalen),
- round_page (amount) - round_page (*datalen));
+ if (!err && alloced && (round_page (data_size) < round_page (amount)))
+ munmap (*data + round_page (data_size),
+ round_page (amount) - round_page (data_size));
+ *datalen = data_size;
return err;
}