diff options
Diffstat (limited to 'libdiskfs/io-write.c')
-rw-r--r-- | libdiskfs/io-write.c | 19 |
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; |