From 55336e3dcf9c7bf6031922b198edacb5e82d5d2d Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 10 Jun 2016 17:32:51 -0700 Subject: [PATCH] dll: fuseintf: Overwrite implementation --- src/dll/fuse/fuseintf.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/dll/fuse/fuseintf.c b/src/dll/fuse/fuseintf.c index 2916e08a..84255c9a 100644 --- a/src/dll/fuse/fuseintf.c +++ b/src/dll/fuse/fuseintf.c @@ -579,7 +579,31 @@ static NTSTATUS fsp_fuse_intf_Overwrite(FSP_FILE_SYSTEM *FileSystem, PVOID FileNode, UINT32 FileAttributes, BOOLEAN ReplaceFileAttributes, FSP_FSCTL_FILE_INFO *FileInfo) { - return STATUS_INVALID_DEVICE_REQUEST; + struct fuse *f = FileSystem->UserContext; + struct fsp_fuse_file_desc *filedesc = + (PVOID)(UINT_PTR)Request->Req.Overwrite.UserContext2; + struct fuse_file_info fi; + int err; + NTSTATUS Result; + + if (0 != f->ops.ftruncate) + { + memset(&fi, 0, sizeof fi); + fi.flags = filedesc->OpenFlags; + fi.fh = filedesc->FileHandle; + + err = f->ops.ftruncate(filedesc->PosixPath, 0, &fi); + Result = fsp_fuse_ntstatus_from_errno(f->env, err); + } + else if (0 != f->ops.truncate) + { + err = f->ops.truncate(filedesc->PosixPath, 0); + Result = fsp_fuse_ntstatus_from_errno(f->env, err); + } + else + Result = STATUS_INVALID_DEVICE_REQUEST; + + return Result; } static VOID fsp_fuse_intf_Cleanup(FSP_FILE_SYSTEM *FileSystem,