aboutsummaryrefslogtreecommitdiff
path: root/libdiskfs/io-write.c
diff options
context:
space:
mode:
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;