diff --git a/Source/Tests/winchar.cpp b/Source/Tests/winchar.cpp index 0d40a7e3..22ca474a 100644 --- a/Source/Tests/winchar.cpp +++ b/Source/Tests/winchar.cpp @@ -13,6 +13,7 @@ class WinCharTest : public CppUnit::TestFixture { CPPUNIT_TEST( testStrNCpy ); CPPUNIT_TEST( testStrLen ); CPPUNIT_TEST( testStrCmp ); + CPPUNIT_TEST( testStrDup ); CPPUNIT_TEST( testStoi ); CPPUNIT_TEST_SUITE_END(); @@ -96,6 +97,16 @@ public: TEST_STR_CMP(empty, empty); } + void testStrDup() { + WCHAR a[] = { 'a', 'b', 'c', 0 }; + + WCHAR *b = winchar_strdup(a); + + CPPUNIT_ASSERT_EQUAL( 0, winchar_strcmp(a, b) ); + + delete [] b; + } + void testStoi() { srand(time(0)); diff --git a/Source/winchar.cpp b/Source/winchar.cpp index 8c9c8231..5de735bd 100644 --- a/Source/winchar.cpp +++ b/Source/winchar.cpp @@ -78,6 +78,13 @@ size_t winchar_strlen(WCHAR *ws) return len; } +WCHAR *winchar_strdup(WCHAR *ws) +{ + WCHAR *dup = new WCHAR[winchar_strlen(ws) + 1]; + winchar_strcpy(dup, ws); + return dup; +} + int winchar_strcmp(const WCHAR *ws1, const WCHAR *ws2) { int diff = 0; diff --git a/Source/winchar.h b/Source/winchar.h index de16eb6c..adef3b24 100644 --- a/Source/winchar.h +++ b/Source/winchar.h @@ -5,5 +5,6 @@ char *winchar_toansi(const WCHAR* ws, unsigned int codepage = CP_ACP); WCHAR *winchar_strcpy(WCHAR *ws1, const WCHAR *ws2); WCHAR *winchar_strncpy(WCHAR *ws1, const WCHAR *ws2, size_t n); size_t winchar_strlen(WCHAR *ws); +WCHAR *winchar_strdup(WCHAR *ws); int winchar_strcmp(const WCHAR *ws1, const WCHAR *ws2); int winchar_stoi(const WCHAR *ws);