aboutsummaryrefslogtreecommitdiff
path: root/libdiskfs/io-write.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/io-write.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/io-write.c')
-rw-r--r--libdiskfs/io-write.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/libdiskfs/io-write.c b/libdiskfs/io-write.c
index 9efed88f..2e47c81c 100644
--- a/libdiskfs/io-write.c
+++ b/libdiskfs/io-write.c
@@ -22,14 +22,15 @@
/* Implement io_write as described in <hurd/io.defs>. */
kern_return_t
diskfs_S_io_write (struct protid *cred,
- const_data_t data,
- mach_msg_type_number_t datalen,
- off_t offset,
- vm_size_t *amt)
+ const_data_t data,
+ mach_msg_type_number_t datalen,
+ off_t offset,
+ vm_size_t *amt)
{
struct node *np;
error_t err;
off_t off = offset;
+ mach_msg_type_number_t nwritten;
if (!cred)
return EOPNOTSUPP;
@@ -75,18 +76,20 @@ diskfs_S_io_write (struct protid *cred,
diskfs_node_update (np, 1);
}
- *amt = datalen;
- err = _diskfs_rdwr_internal (np, (char*) data, off, amt, 1, 0);
+ nwritten = datalen;
+ err = _diskfs_rdwr_internal (np, (char *) data, off, &nwritten, 1, 0);
+ if (!err)
+ *amt = nwritten;
if (!err && offset == -1)
- cred->po->filepointer += *amt;
+ cred->po->filepointer += nwritten;
if (!err
&& ((cred->po->openstat & O_FSYNC) || diskfs_synchronous))
diskfs_file_update (np, 1);
if (!err && np->filemod_reqs)
- diskfs_notice_filechange (np, FILE_CHANGED_WRITE, off, off + *amt);
+ diskfs_notice_filechange (np, FILE_CHANGED_WRITE, off, off + nwritten);
out:
pthread_mutex_unlock (&np->lock);
return err;