From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ntdll/unix/file.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index c9a0b023d23..b8fb4f19e13 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -6182,6 +6182,7 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap IO_STATUS_BLOCK *io, ULONG code, void *in_buffer, ULONG in_size, void *out_buffer, ULONG out_size ) { + ULONG_PTR size = 0; NTSTATUS status;
TRACE( "(%p,%p,%p,%p,%p,0x%08x,%p,0x%08x,%p,0x%08x)\n", @@ -6225,7 +6226,7 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap buffer->StartingVcn.QuadPart = 1; buffer->Extents[0].NextVcn.QuadPart = 0; buffer->Extents[0].Lcn.QuadPart = 0; - io->Information = sizeof(RETRIEVAL_POINTERS_BUFFER); + size = sizeof(RETRIEVAL_POINTERS_BUFFER); status = STATUS_SUCCESS; } else @@ -6259,7 +6260,7 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap memset( info, 0, sizeof(*info) ); memcpy( info->ObjectId, &st.st_dev, sizeof(st.st_dev) ); memcpy( info->ObjectId + 8, &st.st_ino, sizeof(st.st_ino) ); - io->Information = sizeof(*info); + size = sizeof(*info); } else status = STATUS_BUFFER_TOO_SMALL; break; @@ -6267,7 +6268,6 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
case FSCTL_SET_SPARSE: TRACE("FSCTL_SET_SPARSE: Ignoring request\n"); - io->Information = 0; status = STATUS_SUCCESS; break; default: @@ -6275,7 +6275,8 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap in_buffer, in_size, out_buffer, out_size ); }
- if (!NT_ERROR(status) && status != STATUS_PENDING) io->Status = status; + if (!NT_ERROR(status) && status != STATUS_PENDING) + file_complete_async( handle, event, apc, apc_context, io, status, size ); return status; }