With this patch the kernel/directory tests should complete successfully on Win95, Win98 and NT4. Changelog: * dlls/kernel/tests/directory.c Skip the Unicode tests on Win9x Test Get{System,Windows}Directory{A,W}(NULL, 0). This is a more standard way to get len_with_null too Adapt the error code checks to take into account variations between Win9x and NT Index: dlls/kernel/tests/directory.c =================================================================== RCS file: /home/wine/wine/dlls/kernel/tests/directory.c,v retrieving revision 1.3 diff -u -r1.3 directory.c --- dlls/kernel/tests/directory.c 27 Aug 2002 01:56:08 -0000 1.3 +++ dlls/kernel/tests/directory.c 11 Dec 2002 02:54:55 -0000 @@ -30,21 +30,25 @@ UINT len, len_with_null; char buf[MAX_PATH]; + len_with_null = GetWindowsDirectoryA(NULL, 0); + ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + lstrcpyA(buf, "foo"); len_with_null = GetWindowsDirectoryA(buf, 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer"); - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); lstrcpyA(buf, "foo"); len = GetWindowsDirectoryA(buf, len_with_null - 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer"); - ok(len == len_with_null, "should return length with terminating 0"); + ok(len == len_with_null, "GetWindowsDirectoryW returned %d, expected %d", + len, len_with_null); lstrcpyA(buf, "foo"); len = GetWindowsDirectoryA(buf, len_with_null); ok(lstrcmpA(buf, "foo") != 0, "should touch the buffer"); ok(len == lstrlenA(buf), "returned length should be equal to the length of string"); - ok(len == (len_with_null - 1), "should return length without terminating 0"); + ok(len == len_with_null-1, "GetWindowsDirectoryA returned %d, expected %d", + len, len_with_null-1); } static void test_GetWindowsDirectoryW(void) @@ -53,21 +57,29 @@ WCHAR buf[MAX_PATH]; static const WCHAR fooW[] = {'f','o','o',0}; + len_with_null = GetWindowsDirectoryW(NULL, 0); + if (len_with_null==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) + return; + ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + lstrcpyW(buf, fooW); - len_with_null = GetWindowsDirectoryW(buf, 1); + len = GetWindowsDirectoryW(buf, 1); ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer"); - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + ok(len == len_with_null, "GetWindowsDirectoryW returned %d, expected %d", + len, len_with_null); lstrcpyW(buf, fooW); len = GetWindowsDirectoryW(buf, len_with_null - 1); ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer"); - ok(len == len_with_null, "should return length with terminating 0"); + ok(len == len_with_null, "GetWindowsDirectoryW returned %d, expected %d", + len, len_with_null); lstrcpyW(buf, fooW); len = GetWindowsDirectoryW(buf, len_with_null); ok(lstrcmpW(buf, fooW) != 0, "should touch the buffer"); ok(len == lstrlenW(buf), "returned length should be equal to the length of string"); - ok(len == (len_with_null - 1), "should return length without terminating 0"); + ok(len == len_with_null-1, "GetWindowsDirectoryW returned %d, expected %d", + len, len_with_null-1); } @@ -79,21 +91,27 @@ UINT len, len_with_null; char buf[MAX_PATH]; + len_with_null = GetSystemDirectoryA(NULL, 0); + ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + lstrcpyA(buf, "foo"); - len_with_null = GetSystemDirectoryA(buf, 1); + len = GetSystemDirectoryA(buf, 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer"); - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + ok(len == len_with_null, "GetSystemDirectoryA returned %d, expected %d", + len, len_with_null); lstrcpyA(buf, "foo"); len = GetSystemDirectoryA(buf, len_with_null - 1); ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer"); - ok(len == len_with_null, "should return length with terminating 0"); + ok(len == len_with_null, "GetSystemDirectoryA returned %d, expected %d", + len, len_with_null); lstrcpyA(buf, "foo"); len = GetSystemDirectoryA(buf, len_with_null); ok(lstrcmpA(buf, "foo") != 0, "should touch the buffer"); ok(len == lstrlenA(buf), "returned length should be equal to the length of string"); - ok(len == (len_with_null - 1), "should return length without terminating 0"); + ok(len == len_with_null-1, "GetSystemDirectoryW returned %d, expected %d", + len, len_with_null-1); } static void test_GetSystemDirectoryW(void) @@ -102,21 +120,29 @@ WCHAR buf[MAX_PATH]; static const WCHAR fooW[] = {'f','o','o',0}; + len_with_null = GetSystemDirectoryW(NULL, 0); + if (len_with_null==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) + return; + ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + lstrcpyW(buf, fooW); - len_with_null = GetSystemDirectoryW(buf, 1); + len = GetSystemDirectoryW(buf, 1); ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer"); - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH"); + ok(len == len_with_null, "GetSystemDirectoryW returned %d, expected %d", + len, len_with_null); lstrcpyW(buf, fooW); len = GetSystemDirectoryW(buf, len_with_null - 1); ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer"); - ok(len == len_with_null, "should return length with terminating 0"); + ok(len == len_with_null, "GetSystemDirectoryW returned %d, expected %d", + len, len_with_null); lstrcpyW(buf, fooW); len = GetSystemDirectoryW(buf, len_with_null); ok(lstrcmpW(buf, fooW) != 0, "should touch the buffer"); ok(len == lstrlenW(buf), "returned length should be equal to the length of string"); - ok(len == (len_with_null - 1), "should return length without terminating 0"); + ok(len == len_with_null-1, "GetSystemDirectoryW returned %d, expected %d", + len, len_with_null-1); } static void test_CreateDirectoryA(void) @@ -125,10 +151,14 @@ BOOL ret; ret = CreateDirectoryA(NULL, NULL); - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create NULL path"); + ok(ret == FALSE && (GetLastError() == ERROR_PATH_NOT_FOUND || + GetLastError() == ERROR_INVALID_PARAMETER), + "CreateDirectoryA(NULL,NULL): ret=%d error=%ld",ret,GetLastError()); ret = CreateDirectoryA("", NULL); - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create empty path"); + ok(ret == FALSE && (GetLastError() == ERROR_BAD_PATHNAME || + GetLastError() == ERROR_PATH_NOT_FOUND), + "CreateDirectoryA(\"\",NULL): ret=%d error=%ld",ret,GetLastError()); ret = GetSystemDirectoryA(tmpdir, MAX_PATH); ok(ret < MAX_PATH, "System directory should fit into MAX_PATH"); @@ -145,7 +175,9 @@ GetTempPathA(MAX_PATH, tmpdir); tmpdir[3] = 0; /* truncate the path */ ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_ACCESS_DENIED, "should deny access to the drive root"); + ok(ret == FALSE && (GetLastError() == ERROR_ALREADY_EXISTS || + GetLastError() == ERROR_ACCESS_DENIED), + "CreateDirectoryA(drive_root): ret=%d error=%ld",ret,GetLastError()); GetTempPathA(MAX_PATH, tmpdir); lstrcatA(tmpdir, "Please Remove Me"); @@ -169,6 +201,8 @@ static const WCHAR dotdotW[] = {'.','.',0}; ret = CreateDirectoryW(NULL, NULL); + if (!ret && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) + return; ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create NULL path"); ret = CreateDirectoryW(empty_strW, NULL); -- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.