[NTDLL_WINETEST]
authorThomas Faber <thomas.faber@reactos.org>
Wed, 11 Jul 2012 07:04:50 +0000 (07:04 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Wed, 11 Jul 2012 07:04:50 +0000 (07:04 +0000)
- Sync to Wine 1.5.4
- Reverts r55730 (Skip an obviously nonsensical test of trying to sprintf into NULL)

svn path=/trunk/; revision=56866

rostests/winetests/ntdll/atom.c
rostests/winetests/ntdll/error.c
rostests/winetests/ntdll/generated.c
rostests/winetests/ntdll/info.c
rostests/winetests/ntdll/path.c
rostests/winetests/ntdll/pipe.c
rostests/winetests/ntdll/reg.c
rostests/winetests/ntdll/rtl.c
rostests/winetests/ntdll/string.c

index 0f18565..0fed630 100755 (executable)
@@ -443,7 +443,7 @@ static void test_Global(void)
 
     ok(!res, "Added atom (%x)\n", res);
 
-    memset(abi->Name, 0xcc, 255 * sizeof(WCHAR));
+    memset( ptr, 0xcc, sizeof(ptr) );
     res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL );
     ok(!res, "atom lookup\n");
     ok(!lstrcmpW(abi->Name, testAtom1), "ok strings\n");
@@ -457,7 +457,7 @@ static void test_Global(void)
     ok(abi->NameLength == lstrlenW(testAtom1) * sizeof(WCHAR) || broken(abi->NameLength == sizeof(WCHAR)), /* nt4 */
        "string length %u\n",abi->NameLength);
 
-    memset(abi->Name, 0xcc, lstrlenW(testAtom1) * sizeof(WCHAR));
+    memset( ptr, 0xcc, sizeof(ptr) );
     ptr_size = sizeof(ATOM_BASIC_INFORMATION) + lstrlenW(testAtom1) * sizeof(WCHAR);
     res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL );
     ok(!res, "atom lookup %x\n", res);
@@ -466,8 +466,8 @@ static void test_Global(void)
     ok(abi->Name[lstrlenW(testAtom1)] == 0, "buffer overwrite %x\n", abi->Name[lstrlenW(testAtom1)]);
     ok(abi->Name[lstrlenW(testAtom1) + 1] == 0xcccc, "buffer overwrite %x\n", abi->Name[lstrlenW(testAtom1) + 1]);
 
+    memset( ptr, 0xcc, sizeof(ptr) );
     ptr_size = sizeof(ATOM_BASIC_INFORMATION) + 4 * sizeof(WCHAR);
-    abi->Name[0] = abi->Name[1] = abi->Name[2] = abi->Name[3] = '\0';
     res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL );
     ok(!res, "couldn't find atom\n");
     ok(abi->NameLength == 8, "wrong string length %u\n", abi->NameLength);
index 22194c6..d9c83b3 100755 (executable)
@@ -2,7 +2,7 @@
  * Unit tests for RtlNtStatusToDosError function
  *
  * Copyright (c) 2002 Andriy Palamarchuk
- * Copyright (c) 2010 André Hentschel
+ * Copyright (c) 2010 André Hentschel
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 168aeb4..9e9fc31 100755 (executable)
@@ -375,7 +375,6 @@ static void test_pack_CCHAR(void)
     /* CCHAR */
     TEST_TYPE_SIZE   (CCHAR, 1)
     TEST_TYPE_ALIGN  (CCHAR, 1)
-    TEST_TYPE_SIGNED(CCHAR)
 }
 
 static void test_pack_CHAR(void)
@@ -383,7 +382,6 @@ static void test_pack_CHAR(void)
     /* CHAR */
     TEST_TYPE_SIZE   (CHAR, 1)
     TEST_TYPE_ALIGN  (CHAR, 1)
-    TEST_TYPE_SIGNED(CHAR)
 }
 
 static void test_pack_DWORDLONG(void)
@@ -440,42 +438,6 @@ static void test_pack_EXECUTION_STATE(void)
     TEST_TYPE_UNSIGNED(EXECUTION_STATE)
 }
 
-static void test_pack_FLOATING_SAVE_AREA(void)
-{
-#if 0 // this doesn't exist on amd64
-    /* FLOATING_SAVE_AREA */
-    TEST_TYPE_SIZE   (FLOATING_SAVE_AREA, 112)
-    TEST_TYPE_ALIGN  (FLOATING_SAVE_AREA, 4)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, ControlWord, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ControlWord, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ControlWord, 0)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, StatusWord, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, StatusWord, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, StatusWord, 4)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, TagWord, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, TagWord, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, TagWord, 8)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, ErrorOffset, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ErrorOffset, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ErrorOffset, 12)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, ErrorSelector, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ErrorSelector, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ErrorSelector, 16)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, DataOffset, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, DataOffset, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, DataOffset, 20)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, DataSelector, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, DataSelector, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, DataSelector, 24)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, RegisterArea, 80)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, RegisterArea, 1)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, RegisterArea, 28)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, Cr0NpxState, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, Cr0NpxState, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, Cr0NpxState, 108)
-#endif
-}
-
 static void test_pack_FPO_DATA(void)
 {
     /* FPO_DATA */
@@ -877,7 +839,9 @@ static void test_pack_IMAGE_LINENUMBER(void)
 static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(void)
 {
     /* IMAGE_LOAD_CONFIG_DIRECTORY */
-//    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY, 88)
+#ifndef __REACTOS__
+    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY, 88)
+#endif
     TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY, 8)
     TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
     TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
@@ -900,7 +864,7 @@ static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(void)
     TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
     TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
     TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 20)
-#if 0 // wine headers are broken
+#ifndef __REACTOS__  // wine headers are broken
     TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
     TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
     TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 24)
@@ -1982,17 +1946,6 @@ static void test_pack_PEXCEPTION_RECORD(void)
     TEST_TARGET_ALIGN(PEXCEPTION_RECORD, 8)
 }
 
-static void test_pack_PFLOATING_SAVE_AREA(void)
-{
-#if 0
-    /* PFLOATING_SAVE_AREA */
-    TEST_TYPE_SIZE   (PFLOATING_SAVE_AREA, 8)
-    TEST_TYPE_ALIGN  (PFLOATING_SAVE_AREA, 8)
-    TEST_TARGET_SIZE (PFLOATING_SAVE_AREA, 112)
-    TEST_TARGET_ALIGN(PFLOATING_SAVE_AREA, 4)
-#endif
-}
-
 static void test_pack_PFPO_DATA(void)
 {
     /* PFPO_DATA */
@@ -2163,7 +2116,7 @@ static void test_pack_PIMAGE_LOAD_CONFIG_DIRECTORY(void)
     /* PIMAGE_LOAD_CONFIG_DIRECTORY */
     TEST_TYPE_SIZE   (PIMAGE_LOAD_CONFIG_DIRECTORY, 8)
     TEST_TYPE_ALIGN  (PIMAGE_LOAD_CONFIG_DIRECTORY, 8)
-#if 0// wine headers are broken
+#ifndef __REACTOS__ // wine headers are broken
     TEST_TARGET_SIZE (PIMAGE_LOAD_CONFIG_DIRECTORY, 88)
 #endif
     TEST_TARGET_ALIGN(PIMAGE_LOAD_CONFIG_DIRECTORY, 8)
@@ -3794,7 +3747,6 @@ static void test_pack_CCHAR(void)
     /* CCHAR */
     TEST_TYPE_SIZE   (CCHAR, 1)
     TEST_TYPE_ALIGN  (CCHAR, 1)
-    TEST_TYPE_SIGNED(CCHAR)
 }
 
 static void test_pack_CHAR(void)
@@ -3802,7 +3754,6 @@ static void test_pack_CHAR(void)
     /* CHAR */
     TEST_TYPE_SIZE   (CHAR, 1)
     TEST_TYPE_ALIGN  (CHAR, 1)
-    TEST_TYPE_SIGNED(CHAR)
 }
 
 static void test_pack_DWORDLONG(void)
@@ -3859,40 +3810,6 @@ static void test_pack_EXECUTION_STATE(void)
     TEST_TYPE_UNSIGNED(EXECUTION_STATE)
 }
 
-static void test_pack_FLOATING_SAVE_AREA(void)
-{
-    /* FLOATING_SAVE_AREA */
-    TEST_TYPE_SIZE   (FLOATING_SAVE_AREA, 112)
-    TEST_TYPE_ALIGN  (FLOATING_SAVE_AREA, 4)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, ControlWord, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ControlWord, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ControlWord, 0)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, StatusWord, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, StatusWord, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, StatusWord, 4)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, TagWord, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, TagWord, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, TagWord, 8)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, ErrorOffset, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ErrorOffset, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ErrorOffset, 12)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, ErrorSelector, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ErrorSelector, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ErrorSelector, 16)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, DataOffset, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, DataOffset, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, DataOffset, 20)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, DataSelector, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, DataSelector, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, DataSelector, 24)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, RegisterArea, 80)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, RegisterArea, 1)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, RegisterArea, 28)
-    TEST_FIELD_SIZE  (FLOATING_SAVE_AREA, Cr0NpxState, 4)
-    TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, Cr0NpxState, 4)
-    TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, Cr0NpxState, 108)
-}
-
 static void test_pack_FPO_DATA(void)
 {
     /* FPO_DATA */
@@ -5397,15 +5314,6 @@ static void test_pack_PEXCEPTION_RECORD(void)
     TEST_TARGET_ALIGN(PEXCEPTION_RECORD, 4)
 }
 
-static void test_pack_PFLOATING_SAVE_AREA(void)
-{
-    /* PFLOATING_SAVE_AREA */
-    TEST_TYPE_SIZE   (PFLOATING_SAVE_AREA, 4)
-    TEST_TYPE_ALIGN  (PFLOATING_SAVE_AREA, 4)
-    TEST_TARGET_SIZE (PFLOATING_SAVE_AREA, 112)
-    TEST_TARGET_ALIGN(PFLOATING_SAVE_AREA, 4)
-}
-
 static void test_pack_PFPO_DATA(void)
 {
     /* PFPO_DATA */
@@ -6933,7 +6841,6 @@ static void test_pack(void)
     test_pack_EXECUTION_STATE();
     test_pack_FARPROC();
     test_pack_FLOAT();
-    test_pack_FLOATING_SAVE_AREA();
     test_pack_FPO_DATA();
     test_pack_GENERIC_MAPPING();
     test_pack_GLOBALHANDLE();
@@ -7033,7 +6940,6 @@ static void test_pack(void)
     test_pack_PCWSTR();
     test_pack_PEXCEPTION_POINTERS();
     test_pack_PEXCEPTION_RECORD();
-    test_pack_PFLOATING_SAVE_AREA();
     test_pack_PFPO_DATA();
     test_pack_PGENERIC_MAPPING();
     test_pack_PHANDLE();
index ec1ce3d..440f602 100755 (executable)
@@ -1293,7 +1293,8 @@ static void test_queryvirtualmemory(void)
     {
         ok (mbi.AllocationProtect == PAGE_EXECUTE_WRITECOPY, "mbi.AllocationProtect is 0x%x, expected 0x%x\n", mbi.AllocationProtect, PAGE_EXECUTE_WRITECOPY);
         ok (mbi.State == MEM_COMMIT, "mbi.State is 0x%x, expected 0x%X\n", mbi.State, MEM_COMMIT);
-        ok (mbi.Protect == PAGE_READWRITE, "mbi.Protect is 0x%x, expected 0x%X\n", mbi.Protect, PAGE_READWRITE);
+        ok (mbi.Protect == PAGE_READWRITE || mbi.Protect == PAGE_WRITECOPY,
+            "mbi.Protect is 0x%x\n", mbi.Protect);
     }
     else skip( "bss is outside of module\n" );  /* this can happen on Mac OS */
 }
index a052992..29a6583 100755 (executable)
@@ -135,6 +135,7 @@ static void test_RtlIsDosDeviceName(void)
           "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
           "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
           "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\nul.txt", 1000, 6 },
+        // ReactOS r54114
         { "c:\\nul",       6, 6 },
         { NULL, 0 }
     };
index 8f7bd8f..3ab4d07 100644 (file)
@@ -147,10 +147,24 @@ static void test_create_invalid(void)
 
     timeout.QuadPart = -100000000000ll;
 
+/* create a pipe with FILE_OVERWRITE */
+    res = pNtCreateNamedPipeFile(&handle, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb, FILE_SHARE_READ, 4 /*FILE_OVERWRITE*/,
+                                 0, 1, 0, 0, 0xFFFFFFFF, 500, 500, &timeout);
+    todo_wine ok(res == STATUS_INVALID_PARAMETER, "NtCreateNamedPipeFile returned %x\n", res);
+    if (!res)
+        CloseHandle(handle);
+
+/* create a pipe with FILE_OVERWRITE_IF */
+    res = pNtCreateNamedPipeFile(&handle, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb, FILE_SHARE_READ, 5 /*FILE_OVERWRITE_IF*/,
+                                 0, 1, 0, 0, 0xFFFFFFFF, 500, 500, &timeout);
+    todo_wine ok(res == STATUS_INVALID_PARAMETER, "NtCreateNamedPipeFile returned %x\n", res);
+    if (!res)
+        CloseHandle(handle);
+
 /* create a pipe with sharing = 0 */
     res = pNtCreateNamedPipeFile(&handle, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb, 0, 2 /*FILE_CREATE*/,
                                  0, 1, 0, 0, 0xFFFFFFFF, 500, 500, &timeout);
-    todo_wine ok(res == STATUS_INVALID_PARAMETER, "NtCreateNamedPipeFile returned %x\n", res);
+    ok(res == STATUS_INVALID_PARAMETER, "NtCreateNamedPipeFile returned %x\n", res);
     if (!res)
         CloseHandle(handle);
 
@@ -160,7 +174,7 @@ static void test_create_invalid(void)
     ok(!res, "NtCreateNamedPipeFile returned %x\n", res);
 
     res = pNtQueryInformationFile(handle, &iosb, &info, sizeof(info), (FILE_INFORMATION_CLASS)24);
-    todo_wine ok(res == STATUS_ACCESS_DENIED, "NtQueryInformationFile returned %x\n", res);
+    ok(res == STATUS_ACCESS_DENIED, "NtQueryInformationFile returned %x\n", res);
 
 /* test FILE_CREATE creation disposition */
     res = pNtCreateNamedPipeFile(&handle2, SYNCHRONIZE, &attr, &iosb, FILE_SHARE_READ | FILE_SHARE_WRITE, 2 /*FILE_CREATE*/,
@@ -172,6 +186,60 @@ static void test_create_invalid(void)
     CloseHandle(handle);
 }
 
+static void test_create(void)
+{
+    HANDLE hserver;
+    NTSTATUS res;
+    int j, k;
+    FILE_PIPE_LOCAL_INFORMATION info;
+    IO_STATUS_BLOCK iosb;
+
+    static const DWORD access[] = { 0, GENERIC_READ, GENERIC_WRITE, GENERIC_READ | GENERIC_WRITE};
+    static const DWORD sharing[] =    { FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE };
+    static const DWORD pipe_config[]= {               1,                0,                                  2 };
+
+    for (j = 0; j < sizeof(sharing) / sizeof(DWORD); j++) {
+        for (k = 0; k < sizeof(access) / sizeof(DWORD); k++) {
+            HANDLE hclient;
+            BOOL should_succeed = TRUE;
+
+            res  = create_pipe(&hserver, sharing[j], FILE_SYNCHRONOUS_IO_NONALERT);
+            if (res) {
+                ok(0, "NtCreateNamedPipeFile returned %x, sharing: %x\n", res, sharing[j]);
+                continue;
+            }
+
+            res = pNtQueryInformationFile(hserver, &iosb, &info, sizeof(info), (FILE_INFORMATION_CLASS)24);
+            ok(!res, "NtQueryInformationFile for server returned %x, sharing: %x\n", res, sharing[j]);
+            ok(info.NamedPipeConfiguration == pipe_config[j], "wrong duplex status for pipe: %d, expected %d\n",
+               info.NamedPipeConfiguration, pipe_config[j]);
+
+            hclient = CreateFileW(testpipe, access[k], 0, 0, OPEN_EXISTING, 0, 0);
+            if (hclient != INVALID_HANDLE_VALUE) {
+                res = pNtQueryInformationFile(hclient, &iosb, &info, sizeof(info), (FILE_INFORMATION_CLASS)24);
+                ok(!res, "NtQueryInformationFile for client returned %x, access: %x, sharing: %x\n",
+                   res, access[k], sharing[j]);
+                ok(info.NamedPipeConfiguration == pipe_config[j], "wrong duplex status for pipe: %d, expected %d\n",
+                   info.NamedPipeConfiguration, pipe_config[j]);
+                CloseHandle(hclient);
+            }
+
+            if (access[k] & GENERIC_WRITE)
+                should_succeed &= !!(sharing[j] & FILE_SHARE_WRITE);
+            if (access[k] & GENERIC_READ)
+                should_succeed &= !!(sharing[j] & FILE_SHARE_READ);
+
+            if (should_succeed)
+                ok(hclient != INVALID_HANDLE_VALUE, "CreateFile failed for sharing %x, access: %x, GetLastError: %d\n",
+                   sharing[j], access[k], GetLastError());
+            else
+                ok(hclient == INVALID_HANDLE_VALUE, "CreateFile succeeded for sharing %x, access: %x\n", sharing[j], access[k]);
+
+            CloseHandle(hserver);
+        }
+    }
+}
+
 static BOOL ioapc_called;
 static void CALLBACK ioapc(void *arg, PIO_STATUS_BLOCK io, ULONG reserved)
 {
@@ -238,8 +306,10 @@ static DWORD WINAPI thread(PVOID main_thread)
     Sleep(400);
 
     if (main_thread) {
+        DWORD ret;
         userapc_called = FALSE;
-        ok(pQueueUserAPC(&userapc, main_thread, 0), "can't queue user apc, GetLastError: %x\n", GetLastError());
+        ret = pQueueUserAPC(&userapc, main_thread, 0);
+        ok(ret, "can't queue user apc, GetLastError: %x\n", GetLastError());
         CloseHandle(main_thread);
     }
 
@@ -264,6 +334,7 @@ static void test_alertable(void)
     HANDLE hPipe;
     NTSTATUS res;
     HANDLE hThread;
+    DWORD ret;
 
     memset(&iosb, 0x55, sizeof(iosb));
 
@@ -275,7 +346,8 @@ static void test_alertable(void)
 
 /* queue an user apc before calling listen */
     userapc_called = FALSE;
-    ok(pQueueUserAPC(&userapc, GetCurrentThread(), 0), "can't queue user apc, GetLastError: %x\n", GetLastError());
+    ret = pQueueUserAPC(&userapc, GetCurrentThread(), 0);
+    ok(ret, "can't queue user apc, GetLastError: %x\n", GetLastError());
 
     res = listen_pipe(hPipe, hEvent, &iosb, TRUE);
     todo_wine ok(res == STATUS_CANCELLED, "NtFsControlFile returned %x\n", res);
@@ -332,6 +404,7 @@ static void test_nonalertable(void)
     HANDLE hPipe;
     NTSTATUS res;
     HANDLE hThread;
+    DWORD ret;
 
     memset(&iosb, 0x55, sizeof(iosb));
 
@@ -345,7 +418,8 @@ static void test_nonalertable(void)
     ok(hThread != INVALID_HANDLE_VALUE, "can't create thread, GetLastError: %x\n", GetLastError());
 
     userapc_called = FALSE;
-    ok(pQueueUserAPC(&userapc, GetCurrentThread(), 0), "can't queue user apc, GetLastError: %x\n", GetLastError());
+    ret = pQueueUserAPC(&userapc, GetCurrentThread(), 0);
+    ok(ret, "can't queue user apc, GetLastError: %x\n", GetLastError());
 
     res = listen_pipe(hPipe, hEvent, &iosb, TRUE);
     todo_wine ok(!res, "NtFsControlFile returned %x\n", res);
@@ -413,6 +487,9 @@ START_TEST(pipe)
     trace("starting invalid create tests\n");
     test_create_invalid();
 
+    trace("starting create tests\n");
+    test_create();
+
     trace("starting overlapped tests\n");
     test_overlapped();
 
index 5ca14eb..d56d4f8 100755 (executable)
@@ -396,7 +396,8 @@ static void test_NtCreateKey(void)
 
     /* Only attributes */
     status = pNtCreateKey(NULL, 0, &attr, 0, 0, 0, 0);
-    ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status);
+    ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_ACCESS_DENIED /* Win7 */,
+       "Expected STATUS_ACCESS_VIOLATION or STATUS_ACCESS_DENIED, got: 0x%08x\n", status);
 
     /* Length > sizeof(OBJECT_ATTRIBUTES) */
     attr.Length *= 2;
@@ -1243,6 +1244,41 @@ static void test_redirection(void)
     pNtClose( key64 );
 }
 
+static void test_long_value_name(void)
+{
+    HANDLE key;
+    NTSTATUS status, expected;
+    OBJECT_ATTRIBUTES attr;
+    UNICODE_STRING ValName;
+    DWORD i;
+
+    InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0);
+    status = pNtOpenKey(&key, KEY_WRITE|KEY_READ, &attr);
+    ok(status == STATUS_SUCCESS, "NtOpenKey Failed: 0x%08x\n", status);
+
+    ValName.MaximumLength = 0xfffc;
+    ValName.Length = ValName.MaximumLength - sizeof(WCHAR);
+    ValName.Buffer = HeapAlloc(GetProcessHeap(), 0, ValName.MaximumLength);
+    for (i = 0; i < ValName.Length / sizeof(WCHAR); i++)
+        ValName.Buffer[i] = 'a';
+    ValName.Buffer[i] = 0;
+
+    status = pNtDeleteValueKey(key, &ValName);
+    ok(status == STATUS_OBJECT_NAME_NOT_FOUND, "NtDeleteValueKey with nonexistent long value name returned 0x%08x\n", status);
+    status = pNtSetValueKey(key, &ValName, 0, REG_DWORD, &i, sizeof(i));
+    ok(status == STATUS_INVALID_PARAMETER || broken(status == STATUS_SUCCESS) /* nt4 */,
+       "NtSetValueKey with long value name returned 0x%08x\n", status);
+    expected = (status == STATUS_SUCCESS) ? STATUS_SUCCESS : STATUS_OBJECT_NAME_NOT_FOUND;
+    status = pNtDeleteValueKey(key, &ValName);
+    ok(status == expected, "NtDeleteValueKey with long value name returned 0x%08x\n", status);
+
+    status = pNtQueryValueKey(key, &ValName, KeyValueBasicInformation, NULL, 0, &i);
+    ok(status == STATUS_OBJECT_NAME_NOT_FOUND, "NtQueryValueKey with nonexistent long value name returned 0x%08x\n", status);
+
+    pRtlFreeUnicodeString(&ValName);
+    pNtClose(key);
+}
+
 START_TEST(reg)
 {
     static const WCHAR winetest[] = {'\\','W','i','n','e','T','e','s','t',0};
@@ -1264,6 +1300,7 @@ START_TEST(reg)
     test_RtlpNtQueryValueKey();
     test_NtFlushKey();
     test_NtQueryValueKey();
+    test_long_value_name();
     test_NtDeleteKey();
     test_symlinks();
     test_redirection();
index 20b39f3..5ba577d 100755 (executable)
@@ -1154,7 +1154,7 @@ static void test_RtlIpv4AddressToString(void)
     CHAR buffer[20];
     CHAR *res;
     IN_ADDR ip;
-    DWORD len;
+    DWORD_PTR len;
 
     if (!pRtlIpv4AddressToStringA)
     {
@@ -1173,13 +1173,10 @@ static void test_RtlIpv4AddressToString(void)
     len = strlen(buffer);
     ok(res == (buffer + len), "got %p with '%s' (expected %p)\n", res, buffer, buffer + len);
 
-    if (0) {
-        /* this crashes in windows */
-        res = pRtlIpv4AddressToStringA(&ip, NULL);
-        ok( (res == (char *)~0) ||
-            broken(res == (char *)0 + len),        /* XP and w2003 */
-            "got %p (expected ~0)\n", res);
-    }
+    res = pRtlIpv4AddressToStringA(&ip, NULL);
+    ok( (res == (char *)~0) ||
+        broken(res == (char *)len),        /* XP and w2003 */
+        "got %p (expected ~0)\n", res);
 
     if (0) {
         /* this crashes in windows */
index 802a165..9349f5d 100755 (executable)
@@ -1146,8 +1146,8 @@ static void test_wcsrchr(void)
 static void test_wcslwrupr(void)
 {
     static WCHAR teststringW[] = {'a','b','r','a','c','a','d','a','b','r','a',0};
-    static WCHAR emptyW[1] = {0};
-    static const WCHAR constemptyW[1] = {0};
+    static WCHAR emptyW[] = {0};
+    static const WCHAR constemptyW[] = {0};
 
     if (0) /* crashes on native */
     {
@@ -1255,9 +1255,9 @@ static void test_qsort(void)
 static void test_bsearch(void)
 {
     int arr[7] = { 1, 3, 4, 8, 16, 23, 42 };
-    int *x, l, i,;
+    int *x, l, i, j;
 
-    /* just try all all sizes */
+    /* just try all array sizes */
     for (j=1;j<sizeof(arr)/sizeof(arr[0]);j++) {
         for (i=0;i<j;i++) {
             l = arr[i];