Index: modules/rostests/apitests/kernel32/CMakeLists.txt =================================================================== --- modules/rostests/apitests/kernel32/CMakeLists.txt (revision 56488) +++ modules/rostests/apitests/kernel32/CMakeLists.txt (working copy) @@ -2,6 +2,7 @@ add_definitions(-D_DLL -D__USE_CRTIMP) list(APPEND SOURCE + GetCurrentDirectory.c GetDriveType.c testlist.c) Index: modules/rostests/apitests/kernel32/GetCurrentDirectory.c =================================================================== --- modules/rostests/apitests/kernel32/GetCurrentDirectory.c (revision 0) +++ modules/rostests/apitests/kernel32/GetCurrentDirectory.c (working copy) @@ -0,0 +1,218 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Test for GetCurrentDirectory + * PROGRAMMER: Thomas Faber + */ + +#define WIN32_NO_STATUS +#include +#include +#include + +static +BOOLEAN +CheckBuffer( + const VOID *Buffer, + SIZE_T Size, + UCHAR Value) +{ + const UCHAR *Array = Buffer; + SIZE_T i; + + for (i = 0; i < Size; i++) + if (Array[i] != Value) + { + trace("Expected %x, found %x at offset %lu\n", Value, Array[i], (ULONG)i); + return FALSE; + } + return TRUE; +} + +static +BOOLEAN +CheckBufferA( + const VOID *Buffer, + SIZE_T Size, + PCSTR Expected, + UCHAR Fill) +{ + const CHAR *Chars = Buffer; + const UCHAR *UChars = Buffer; + SIZE_T Length = strlen(Expected); + SIZE_T i; + + if (Size < Length) + { + ok(0, "Size = %lu, Length = %lu\n", (ULONG)Size, (ULONG)Length); + return FALSE; + } + + for (i = 0; i < Length; i++) + if (Chars[i] != Expected[i]) + { + trace("Expected %x, found %x at offset %lu\n", Expected[i], Chars[i], (ULONG)i); + return FALSE; + } + + ok(Chars[i] == 0, "Expected null terminator, found %x at offset %lu\n", Chars[i], (ULONG)i); + i++; + + for (; i < Size; i++) + if (UChars[i] != Fill) + { + trace("Expected %x, found %x at offset %lu\n", Fill, UChars[i], (ULONG)i); + return FALSE; + } + return TRUE; +} + +static +BOOLEAN +CheckBufferW( + const VOID *Buffer, + SIZE_T Size, + PCWSTR Expected, + UCHAR Fill) +{ + const WCHAR *Chars = Buffer; + const UCHAR *UChars = Buffer; + SIZE_T Length = wcslen(Expected); + SIZE_T i; + + if (Size < Length) + { + ok(0, "Size = %lu, Length = %lu\n", (ULONG)Size, (ULONG)Length); + return FALSE; + } + + for (i = 0; i < Length; i++) + if (Chars[i] != Expected[i]) + { + trace("Expected %x, found %x at offset %lu\n", Expected[i], Chars[i], (ULONG)i); + return FALSE; + } + + ok(Chars[i] == 0, "Expected null terminator, found %x at offset %lu\n", Chars[i], (ULONG)i); + i++; + + i *= sizeof(WCHAR); + + for (; i < Size; i++) + if (UChars[i] != Fill) + { + trace("Expected %x, found %x at offset %lu\n", Fill, UChars[i], (ULONG)i); + return FALSE; + } + return TRUE; +} + +static +VOID +TestGetCurrentDirectoryA(VOID) +{ + CHAR Buffer[MAX_PATH]; + DWORD Length; + BOOL Ret; + BOOLEAN Okay; + + Ret = SetCurrentDirectoryA("C:\\"); + ok(Ret == TRUE, "SetCurrentDirectory failed with %lu\n", GetLastError()); + + Length = GetCurrentDirectoryA(0, NULL); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer); + ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); + Okay = CheckBufferA(Buffer, sizeof(Buffer), "C:\\", 0x55); + ok(Okay, "CheckBufferA failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryA(0, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryA(1, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryA(2, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryA(3, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryA(4, Buffer); + ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); + Okay = CheckBufferA(Buffer, sizeof(Buffer), "C:\\", 0x55); + ok(Okay, "CheckBufferA failed\n"); +} + +static +VOID +TestGetCurrentDirectoryW(VOID) +{ + WCHAR Buffer[MAX_PATH]; + DWORD Length; + BOOL Ret; + BOOLEAN Okay; + + Ret = SetCurrentDirectoryW(L"C:\\"); + ok(Ret == TRUE, "SetCurrentDirectory failed with %lu\n", GetLastError()); + + Length = GetCurrentDirectoryW(0, NULL); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryW(sizeof(Buffer), Buffer); + ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); + Okay = CheckBufferW(Buffer, sizeof(Buffer), L"C:\\", 0x55); + ok(Okay, "CheckBufferW failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryW(0, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryW(1, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryW(2, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryW(3, Buffer); + ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); + Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); + ok(Okay, "CheckBuffer failed\n"); + + RtlFillMemory(Buffer, sizeof(Buffer), 0x55); + Length = GetCurrentDirectoryW(4, Buffer); + ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); + Okay = CheckBufferW(Buffer, sizeof(Buffer), L"C:\\", 0x55); + ok(Okay, "CheckBufferW failed\n"); +} + +START_TEST(GetCurrentDirectory) +{ + TestGetCurrentDirectoryA(); + TestGetCurrentDirectoryW(); +} Index: modules/rostests/apitests/kernel32/GetCurrentDirectory.c =================================================================== --- modules/rostests/apitests/kernel32/GetCurrentDirectory.c (revision 0) +++ modules/rostests/apitests/kernel32/GetCurrentDirectory.c (working copy) Property changes on: GetCurrentDirectory.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: modules/rostests/apitests/kernel32/testlist.c =================================================================== --- modules/rostests/apitests/kernel32/testlist.c (revision 56488) +++ modules/rostests/apitests/kernel32/testlist.c (working copy) @@ -5,11 +5,13 @@ #define STANDALONE #include "wine/test.h" +extern void func_GetCurrentDirectory(void); extern void func_GetDriveType(void); const struct test winetest_testlist[] = { - { "GetDriveType", func_GetDriveType }, + { "GetCurrentDirectory", func_GetCurrentDirectory }, + { "GetDriveType", func_GetDriveType }, { 0, 0 } };