From: Amine Khaldi Date: Wed, 11 Apr 2018 11:32:54 +0000 (+0100) Subject: [KERNEL32/WINE] Sync profile.c with Wine Staging 3.3. CORE-14434 X-Git-Tag: 0.4.9-RC~219 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=8d2519218f27f3acd99f6c094235ea1d07658a09 [KERNEL32/WINE] Sync profile.c with Wine Staging 3.3. CORE-14434 --- diff --git a/dll/win32/kernel32/wine/profile.c b/dll/win32/kernel32/wine/profile.c index 49383c376d4..0cd9970a135 100644 --- a/dll/win32/kernel32/wine/profile.c +++ b/dll/win32/kernel32/wine/profile.c @@ -19,12 +19,35 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifdef __REACTOS__ + #include #define NDEBUG #include DEBUG_CHANNEL(profile); +#else /* __REACTOS__ */ + +#include "config.h" +#include "wine/port.h" + +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winnls.h" +#include "winerror.h" +#include "winternl.h" +#include "wine/unicode.h" +#include "wine/library.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(profile); + +#endif /* __REACTOS__ */ + static const char bom_utf8[] = {0xEF,0xBB,0xBF}; typedef enum @@ -73,6 +96,8 @@ static PROFILE *MRUProfile[N_CACHED_PROFILES]={NULL}; static const WCHAR emptystringW[] = {0}; static const WCHAR wininiW[] = { 'w','i','n','.','i','n','i',0 }; +#ifdef __REACTOS__ + static RTL_CRITICAL_SECTION PROFILE_CritSect; static RTL_CRITICAL_SECTION_DEBUG critsect_debug = { @@ -82,6 +107,19 @@ static RTL_CRITICAL_SECTION_DEBUG critsect_debug = }; static RTL_CRITICAL_SECTION PROFILE_CritSect = { &critsect_debug, -1, 0, 0, 0, 0 }; +#else /* __REACTOS__ */ + +static CRITICAL_SECTION PROFILE_CritSect; +static CRITICAL_SECTION_DEBUG critsect_debug = +{ + 0, 0, &PROFILE_CritSect, + { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": PROFILE_CritSect") } +}; +static CRITICAL_SECTION PROFILE_CritSect = { &critsect_debug, -1, 0, 0, 0, 0 }; + +#endif /* __REACTOS__ */ + static const char hex[16] = "0123456789ABCDEF"; /*********************************************************************** @@ -263,7 +301,7 @@ static inline BOOL PROFILE_isspaceW(WCHAR c) return isspaceW(c) || c == 0x1a; } -static inline ENCODING PROFILE_DetectTextEncoding(void * buffer, int * len) +static inline ENCODING PROFILE_DetectTextEncoding(const void * buffer, int * len) { int flags = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE | @@ -469,8 +507,14 @@ static PROFILESECTION *PROFILE_Load(HANDLE hFile, ENCODING * pEncoding) next_key = &key->next; prev_key = key; +#ifdef __REACTOS__ + TRACE("New key: name=%s, value=%s\n", + debugstr_w(key->name), + key->value ? debugstr_w(key->value) : L"(none)"); +#else TRACE("New key: name=%s, value=%s\n", - debugstr_w(key->name), key->value ? debugstr_w(key->value) : L"(none)"); + debugstr_w(key->name), key->value ? debugstr_w(key->value) : "(none)"); +#endif } } if (szFile != pBuffer) @@ -745,7 +789,11 @@ static BOOL PROFILE_Open( LPCWSTR filename, BOOL write_access ) if (!filename) filename = wininiW; +#ifdef __REACTOS__ if ((RtlDetermineDosPathNameType_U(filename) == RtlPathTypeRelative) && +#else + if ((RtlDetermineDosPathNameType_U(filename) == RELATIVE_PATH) && +#endif !strchrW(filename, '\\') && !strchrW(filename, '/')) { static const WCHAR wszSeparator[] = {'\\', 0}; @@ -849,7 +897,11 @@ static BOOL PROFILE_Open( LPCWSTR filename, BOOL write_access ) * If return_values is TRUE, also include the corresponding values. */ static INT PROFILE_GetSection( PROFILESECTION *section, LPCWSTR section_name, +#ifdef __REACTOS__ LPWSTR buffer, DWORD len, BOOL return_values ) +#else + LPWSTR buffer, UINT len, BOOL return_values ) +#endif { PROFILEKEY *key; @@ -900,7 +952,11 @@ static INT PROFILE_GetSection( PROFILESECTION *section, LPCWSTR section_name, } /* See GetPrivateProfileSectionNamesA for documentation */ +#ifdef __REACTOS__ static INT PROFILE_GetSectionNames( LPWSTR buffer, DWORD len ) +#else +static INT PROFILE_GetSectionNames( LPWSTR buffer, UINT len ) +#endif { LPWSTR buf; UINT buflen,tmplen; @@ -964,7 +1020,11 @@ static INT PROFILE_GetSectionNames( LPWSTR buffer, DWORD len ) * */ static INT PROFILE_GetString( LPCWSTR section, LPCWSTR key_name, +#ifdef __REACTOS__ LPCWSTR def_val, LPWSTR buffer, DWORD len ) +#else + LPCWSTR def_val, LPWSTR buffer, UINT len ) +#endif { PROFILEKEY *key = NULL; static const WCHAR empty_strW[] = { 0 }; @@ -1074,9 +1134,15 @@ UINT WINAPI GetProfileIntW( LPCWSTR section, LPCWSTR entry, INT def_val ) /*********************************************************************** * GetPrivateProfileStringW (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetPrivateProfileStringW( LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, DWORD len, LPCWSTR filename ) +#else +INT WINAPI GetPrivateProfileStringW( LPCWSTR section, LPCWSTR entry, + LPCWSTR def_val, LPWSTR buffer, + UINT len, LPCWSTR filename ) +#endif { int ret; LPWSTR defval_tmp = NULL; @@ -1130,9 +1196,15 @@ DWORD WINAPI GetPrivateProfileStringW( LPCWSTR section, LPCWSTR entry, /*********************************************************************** * GetPrivateProfileStringA (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetPrivateProfileStringA( LPCSTR section, LPCSTR entry, LPCSTR def_val, LPSTR buffer, DWORD len, LPCSTR filename ) +#else +INT WINAPI GetPrivateProfileStringA( LPCSTR section, LPCSTR entry, + LPCSTR def_val, LPSTR buffer, + UINT len, LPCSTR filename ) +#endif { UNICODE_STRING sectionW, entryW, def_valW, filenameW; LPWSTR bufferW; @@ -1173,8 +1245,13 @@ DWORD WINAPI GetPrivateProfileStringA( LPCSTR section, LPCSTR entry, /*********************************************************************** * GetProfileStringA (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetProfileStringA( LPCSTR section, LPCSTR entry, LPCSTR def_val, LPSTR buffer, DWORD len ) +#else +INT WINAPI GetProfileStringA( LPCSTR section, LPCSTR entry, LPCSTR def_val, + LPSTR buffer, UINT len ) +#endif { return GetPrivateProfileStringA( section, entry, def_val, buffer, len, "win.ini" ); @@ -1183,8 +1260,13 @@ DWORD WINAPI GetProfileStringA( LPCSTR section, LPCSTR entry, LPCSTR def_val, /*********************************************************************** * GetProfileStringW (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetProfileStringW( LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, DWORD len ) +#else +INT WINAPI GetProfileStringW( LPCWSTR section, LPCWSTR entry, + LPCWSTR def_val, LPWSTR buffer, UINT len ) +#endif { return GetPrivateProfileStringW( section, entry, def_val, buffer, len, wininiW ); @@ -1263,7 +1345,11 @@ UINT WINAPI GetPrivateProfileIntA( LPCSTR section, LPCSTR entry, /*********************************************************************** * GetPrivateProfileSectionW (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetPrivateProfileSectionW( LPCWSTR section, LPWSTR buffer, +#else +INT WINAPI GetPrivateProfileSectionW( LPCWSTR section, LPWSTR buffer, +#endif DWORD len, LPCWSTR filename ) { int ret = 0; @@ -1289,7 +1375,11 @@ DWORD WINAPI GetPrivateProfileSectionW( LPCWSTR section, LPWSTR buffer, /*********************************************************************** * GetPrivateProfileSectionA (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetPrivateProfileSectionA( LPCSTR section, LPSTR buffer, +#else +INT WINAPI GetPrivateProfileSectionA( LPCSTR section, LPSTR buffer, +#endif DWORD len, LPCSTR filename ) { UNICODE_STRING sectionW, filenameW; @@ -1335,7 +1425,11 @@ DWORD WINAPI GetPrivateProfileSectionA( LPCSTR section, LPSTR buffer, /*********************************************************************** * GetProfileSectionA (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetProfileSectionA( LPCSTR section, LPSTR buffer, DWORD len ) +#else +INT WINAPI GetProfileSectionA( LPCSTR section, LPSTR buffer, DWORD len ) +#endif { return GetPrivateProfileSectionA( section, buffer, len, "win.ini" ); } @@ -1343,7 +1437,11 @@ DWORD WINAPI GetProfileSectionA( LPCSTR section, LPSTR buffer, DWORD len ) /*********************************************************************** * GetProfileSectionW (KERNEL32.@) */ +#ifdef __REACTOS__ DWORD WINAPI GetProfileSectionW( LPCWSTR section, LPWSTR buffer, DWORD len ) +#else +INT WINAPI GetProfileSectionW( LPCWSTR section, LPWSTR buffer, DWORD len ) +#endif { return GetPrivateProfileSectionW( section, buffer, len, wininiW ); } @@ -1372,7 +1470,7 @@ BOOL WINAPI WritePrivateProfileStringW( LPCWSTR section, LPCWSTR entry, SetLastError(ERROR_FILE_NOT_FOUND); } else { ret = PROFILE_SetString( section, entry, string, FALSE); - PROFILE_FlushFile(); + if (ret) ret = PROFILE_FlushFile(); } } @@ -1428,11 +1526,10 @@ BOOL WINAPI WritePrivateProfileSectionW( LPCWSTR section, else if (PROFILE_Open( filename, TRUE )) { if (!string) {/* delete the named section*/ ret = PROFILE_SetString(section,NULL,NULL, FALSE); - PROFILE_FlushFile(); } else { PROFILE_DeleteAllKeys(section); ret = TRUE; - while(*string) { + while(*string && ret) { LPWSTR buf = HeapAlloc( GetProcessHeap(), 0, (strlenW(string)+1) * sizeof(WCHAR) ); strcpyW( buf, string ); if((p = strchrW( buf, '='))) { @@ -1442,8 +1539,8 @@ BOOL WINAPI WritePrivateProfileSectionW( LPCWSTR section, HeapFree( GetProcessHeap(), 0, buf ); string += strlenW(string)+1; } - PROFILE_FlushFile(); } + if (ret) ret = PROFILE_FlushFile(); } RtlLeaveCriticalSection( &PROFILE_CritSect ); @@ -1725,7 +1822,7 @@ BOOL WINAPI WritePrivateProfileStructW (LPCWSTR section, LPCWSTR key, if (PROFILE_Open( filename, TRUE )) { ret = PROFILE_SetString( section, key, outstring, FALSE); - PROFILE_FlushFile(); + if (ret) ret = PROFILE_FlushFile(); } RtlLeaveCriticalSection( &PROFILE_CritSect ); diff --git a/media/doc/README.WINE b/media/doc/README.WINE index 08a4312dd19..7580f000a69 100644 --- a/media/doc/README.WINE +++ b/media/doc/README.WINE @@ -273,7 +273,7 @@ kernel32 - reactos/dll/win32/kernel32/wine/actctx.c # Partly synced with Wine 1.7.55 reactos/dll/win32/kernel32/wine/comm.c # Synced in r52754 reactos/dll/win32/kernel32/wine/lzexpand.c # Synced to WineStaging-3.3 - reactos/dll/win32/kernel32/wine/profile.c # Partially synced to WineStaging-1.7.55 + reactos/dll/win32/kernel32/wine/profile.c # Synced to WineStaging-3.3 reactos/dll/win32/kernel32/wine/res.c # Partially synced to WineStaging-1.7.55 reactos/dll/win32/kernel32/winnls/string/casemap.c # Synced to WineStaging-1.7.55 reactos/dll/win32/kernel32/winnls/string/chartype.c # Synced in r52754