diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2023-05-09 00:31:02 +0300 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-05-10 02:14:15 +0200 |
commit | edc6fe07c5a7f9ade000b3bfc17c030fe2086e21 (patch) | |
tree | b1d82a445b67a5bbe06635cbe3e648953c9199de /libnetfs/io-read.c | |
parent | 955c2e609c71575ab9e66cd0f451a0f18a1329ee (diff) | |
download | hurd-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.c | 22 |
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; } |