diff options
Diffstat (limited to 'source4/ntvfs/simple')
-rw-r--r-- | source4/ntvfs/simple/vfs_simple.c | 49 |
1 files changed, 15 insertions, 34 deletions
diff --git a/source4/ntvfs/simple/vfs_simple.c b/source4/ntvfs/simple/vfs_simple.c index faf8f17b78..379d24f848 100644 --- a/source4/ntvfs/simple/vfs_simple.c +++ b/source4/ntvfs/simple/vfs_simple.c @@ -508,43 +508,24 @@ static NTSTATUS svfs_write(struct ntvfs_module_context *ntvfs, { ssize_t ret; - CHECK_READ_ONLY(req); + if (wr->generic.level != RAW_WRITE_WRITEX) { + return ntvfs_map_write(req, wr, ntvfs); + } - switch (wr->generic.level) { - case RAW_WRITE_WRITEX: - ret = pwrite(wr->writex.in.fnum, - wr->writex.in.data, - wr->writex.in.count, - wr->writex.in.offset); - if (ret == -1) { - return map_nt_error_from_unix(errno); - } - - wr->writex.out.nwritten = ret; - wr->writex.out.remaining = 0; /* should fill this in? */ - - return NT_STATUS_OK; - - case RAW_WRITE_WRITE: - if (wr->write.in.count == 0) { - /* a truncate! */ - ret = ftruncate(wr->write.in.fnum, wr->write.in.offset); - } else { - ret = pwrite(wr->write.in.fnum, - wr->write.in.data, - wr->write.in.count, - wr->write.in.offset); - } - if (ret == -1) { - return map_nt_error_from_unix(errno); - } - - wr->write.out.nwritten = ret; + CHECK_READ_ONLY(req); - return NT_STATUS_OK; + ret = pwrite(wr->writex.in.fnum, + wr->writex.in.data, + wr->writex.in.count, + wr->writex.in.offset); + if (ret == -1) { + return map_nt_error_from_unix(errno); } - - return NT_STATUS_NOT_SUPPORTED; + + wr->writex.out.nwritten = ret; + wr->writex.out.remaining = 0; /* should fill this in? */ + + return NT_STATUS_OK; } /* |