From: YongHao Hu Subject: [PATCH] kernel32/tests: Add test of CreateDirectory with long path. Message-Id: <563AC0C4.1010801@gmail.com> Date: Thu, 5 Nov 2015 10:36:52 +0800 On Windows, CreateDirectoryA fail when the path's size longer than MAX_PATH-12(248) while Wine's implementation succeed.[1] [1]:https://bugs.winehq.org/show_bug.cgi?id=39552 Signed-off-by: YongHao Hu --- dlls/kernel32/tests/directory.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/dlls/kernel32/tests/directory.c b/dlls/kernel32/tests/directory.c index 9baae47..4567086 100644 --- a/dlls/kernel32/tests/directory.c +++ b/dlls/kernel32/tests/directory.c @@ -222,10 +222,28 @@ static void test_CreateDirectoryA(void) GetTempPathA(MAX_PATH, tmpdir); lstrcatA(tmpdir, "Please Remove Me/Please Remove Me"); ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, + ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); RemoveDirectoryA(tmpdir); + /* Test behavior with long path */ + GetTempPathA(MAX_PATH, tmpdir); + while(lstrlenA(tmpdir) < MAX_PATH-13) + lstrcatA(tmpdir, "s"); + ret = CreateDirectoryA(tmpdir, NULL); + ok(ret == TRUE, + "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); + ret = RemoveDirectoryA(tmpdir); + ok(ret == TRUE, "RemoveDirectoryA should always succeed\n"); + while(lstrlenA(tmpdir) < MAX_PATH-1) { + lstrcatA(tmpdir, "s"); + ret = CreateDirectoryA(tmpdir, NULL); + todo_wine ok(ret == FALSE, + "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); + ret = RemoveDirectoryA(tmpdir); + todo_wine ok(ret == FALSE, "RemoveDirectoryA should always succeed\n"); + } + /* Test behavior with a trailing dot. * The directory should be created without the dot. */