[2/2] ntdll: Add support for FILE_APPEND_DATA to NtWriteFile.

Dmitry Timoshkov dmitry at baikal.ru
Tue Oct 1 22:20:48 CDT 2013


---
 dlls/kernel32/tests/file.c | 11 -----------
 dlls/ntdll/file.c          | 11 ++++++++++-
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index dc69193..866a29a 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -3986,17 +3986,6 @@ todo_wine
         }
         else
         {
-            /* FIXME: remove once Wine is fixed */
-            if (!ret && (td[i].access & FILE_APPEND_DATA))
-            {
-todo_wine
-                ok(ret, "%d: WriteFile error %d\n", i, GetLastError());
-todo_wine
-                ok(bytes == 2, "%d: expected 2, got %u\n", i, bytes);
-                CloseHandle(hfile);
-                continue;
-            }
-
             ok(ret, "%d: WriteFile error %d\n", i, GetLastError());
             ok(bytes == 2, "%d: expected 2, got %u\n", i, bytes);
         }
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 62ae135..7ec369d 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -953,6 +953,7 @@ NTSTATUS WINAPI NtWriteFile(HANDLE hFile, HANDLE hEvent,
     enum server_fd_type type;
     ULONG_PTR cvalue = apc ? 0 : (ULONG_PTR)apc_user;
     BOOL send_completion = FALSE, async_write;
+    LARGE_INTEGER offset_eof;
 
     TRACE("(%p,%p,%p,%p,%p,%p,0x%08x,%p,%p)!\n",
           hFile,hEvent,apc,apc_user,io_status,buffer,length,offset,key);
@@ -961,7 +962,15 @@ NTSTATUS WINAPI NtWriteFile(HANDLE hFile, HANDLE hEvent,
 
     status = server_get_unix_fd( hFile, FILE_WRITE_DATA, &unix_handle,
                                  &needs_close, &type, &options );
-    if (status) return status;
+    if (status)
+    {
+        status = server_get_unix_fd( hFile, FILE_APPEND_DATA, &unix_handle,
+                                     &needs_close, &type, &options );
+        if (status) return status;
+
+        offset_eof.QuadPart = (LONGLONG)-1; /* FILE_WRITE_TO_END_OF_FILE */
+        offset = &offset_eof;
+    }
 
     if (!virtual_check_buffer_for_read( buffer, length ))
     {
-- 
1.8.3.4




More information about the wine-patches mailing list