Module: wine Branch: master Commit: e8754b8ea6facf5d72120eee227b2b51d226b32e URL: http://source.winehq.org/git/wine.git/?a=commit;h=e8754b8ea6facf5d72120eee22... Author: Erik Inge Bolsø <knan-wine(a)anduin.net> Date: Sun Sep 21 16:49:16 2008 +0200 kernel32: Fix PROFILE_Load to handle mac line endings. --- dlls/kernel32/profile.c | 1 + dlls/kernel32/tests/profile.c | 32 +++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/dlls/kernel32/profile.c b/dlls/kernel32/profile.c index ab26533..3ed2dcd 100644 --- a/dlls/kernel32/profile.c +++ b/dlls/kernel32/profile.c @@ -405,6 +405,7 @@ static PROFILESECTION *PROFILE_Load(HANDLE hFile, ENCODING * pEncoding) { szLineStart = next_line; next_line = memchrW(szLineStart, '\n', szEnd - szLineStart); + if (!next_line) next_line = memchrW(szLineStart, '\r', szEnd - szLineStart); if (!next_line) next_line = szEnd; else next_line++; szLineEnd = next_line; diff --git a/dlls/kernel32/tests/profile.c b/dlls/kernel32/tests/profile.c index 8a3e83b..2a9f08a 100644 --- a/dlls/kernel32/tests/profile.c +++ b/dlls/kernel32/tests/profile.c @@ -428,7 +428,7 @@ static BOOL emptystr_ok(CHAR emptystr[MAX_PATH]) return TRUE; } -static void test_GetPrivateProfileString(void) +static void test_GetPrivateProfileString(const char *content, const char *descript) { DWORD ret; CHAR buf[MAX_PATH]; @@ -441,15 +441,10 @@ static void test_GetPrivateProfileString(void) LPSTR tempfile; static const char filename[] = ".\\winetest.ini"; - static const char content[]= - "[section1]\r\n" - "name1=val1\r\n" - "name2=\"val2\"\r\n" - "name3\r\n" - "name4=a\r\n" - "[section2]\r\n"; - create_test_file(filename, content, sizeof(content)); + trace("test_GetPrivateProfileStringA: %s\n", descript); + + create_test_file(filename, content, lstrlenA(content)); /* Run this test series with caching. Wine won't cache profile files younger than 2.1 seconds. */ @@ -674,7 +669,7 @@ static void test_GetPrivateProfileString(void) GetWindowsDirectoryA(windir, MAX_PATH); GetTempFileNameA(windir, "pre", 0, path); tempfile = strrchr(path, '\\') + 1; - create_test_file(path, content, sizeof(content)); + create_test_file(path, content, lstrlenA(content)); /* only filename is used, file exists in windows directory */ lstrcpyA(buf, "kumquat"); @@ -703,5 +698,20 @@ START_TEST(profile) test_profile_existing(); test_profile_delete_on_close(); test_profile_refresh(); - test_GetPrivateProfileString(); + test_GetPrivateProfileString( + "[section1]\r\n" + "name1=val1\r\n" + "name2=\"val2\"\r\n" + "name3\r\n" + "name4=a\r\n" + "[section2]\r\n", + "CR+LF"); + test_GetPrivateProfileString( + "[section1]\r" + "name1=val1\r" + "name2=\"val2\"\r" + "name3\r" + "name4=a\r" + "[section2]\r", + "CR only"); }