aboutsummaryrefslogtreecommitdiff
path: root/libdiskfs/rdwr-internal.c
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2023-05-09 00:31:03 +0300
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-05-10 02:16:00 +0200
commit4ba239ddbe936322bd7f9a8b17715ebaeb1cb800 (patch)
tree54d13689e60310babf35b5d9117278eade2ed758 /libdiskfs/rdwr-internal.c
parentedc6fe07c5a7f9ade000b3bfc17c030fe2086e21 (diff)
downloadhurd-4ba239ddbe936322bd7f9a8b17715ebaeb1cb800.tar.gz
hurd-4ba239ddbe936322bd7f9a8b17715ebaeb1cb800.tar.bz2
hurd-4ba239ddbe936322bd7f9a8b17715ebaeb1cb800.zip
libdiskfs: Port to x86_64
Message-Id: <20230508213136.608575-9-bugaevc@gmail.com>
Diffstat (limited to 'libdiskfs/rdwr-internal.c')
-rw-r--r--libdiskfs/rdwr-internal.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/libdiskfs/rdwr-internal.c b/libdiskfs/rdwr-internal.c
index 8b2e1319..011558c5 100644
--- a/libdiskfs/rdwr-internal.c
+++ b/libdiskfs/rdwr-internal.c
@@ -27,12 +27,8 @@
DIR is set for writing and clear for reading. The inode must
be locked. If NOTIME is set, then don't update the mtime or atime. */
error_t
-_diskfs_rdwr_internal (struct node *np,
- char *data,
- off_t offset,
- size_t *amt,
- int dir,
- int notime)
+_diskfs_rdwr_internal (struct node *np, char *data, off_t offset,
+ mach_msg_type_number_t *amt, int dir, int notime)
{
memory_object_t memobj;
vm_prot_t prot = dir ? (VM_PROT_READ | VM_PROT_WRITE) : VM_PROT_READ;
@@ -63,8 +59,13 @@ _diskfs_rdwr_internal (struct node *np,
offset + *amt > ((off_t) 1) << (sizeof(vm_offset_t) * 8))
err = EFBIG;
else
- err = pager_memcpy (diskfs_get_filemap_pager_struct (np), memobj,
- offset, data, amt, prot);
+ {
+ size_t amount = *amt;
+ err = pager_memcpy (diskfs_get_filemap_pager_struct (np), memobj,
+ offset, data, &amount, prot);
+ if (!err)
+ *amt = amount;
+ }
if (!diskfs_check_readonly () && !notime)
{