kernel32: Implement registry mapping in WritePrivateProfileSection().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3c1ebfdf82
commit
d2b83336c7
|
@ -1674,6 +1674,7 @@ BOOL WINAPI WritePrivateProfileSectionW( LPCWSTR section,
|
|||
{
|
||||
BOOL ret = FALSE;
|
||||
LPWSTR p;
|
||||
HKEY key, section_key;
|
||||
|
||||
if (!section && !string)
|
||||
{
|
||||
|
@ -1687,6 +1688,44 @@ BOOL WINAPI WritePrivateProfileSectionW( LPCWSTR section,
|
|||
}
|
||||
if (!string) return PROFILE_DeleteSection( filename, section );
|
||||
|
||||
if ((key = open_file_mapping_key( filename )))
|
||||
{
|
||||
/* replace existing entries, but only if they are mapped, and do not
|
||||
* delete any keys */
|
||||
|
||||
const WCHAR *entry, *p;
|
||||
|
||||
for (entry = string; *entry; entry += strlenW( entry ) + 1)
|
||||
{
|
||||
if ((p = strchrW( entry, '=' )))
|
||||
{
|
||||
WCHAR *entry_copy;
|
||||
p++;
|
||||
if (!(entry_copy = HeapAlloc( GetProcessHeap(), 0, (p - entry) * sizeof(WCHAR) )))
|
||||
{
|
||||
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
||||
RegCloseKey( key );
|
||||
return FALSE;
|
||||
}
|
||||
lstrcpynW( entry_copy, entry, p - entry );
|
||||
if (get_mapped_section_key( filename, section, entry_copy, TRUE, §ion_key ))
|
||||
{
|
||||
LSTATUS res = RegSetValueExW( section_key, entry_copy, 0, REG_SZ, (const BYTE *)p,
|
||||
(strlenW( p ) + 1) * sizeof(WCHAR) );
|
||||
RegCloseKey( section_key );
|
||||
if (res)
|
||||
{
|
||||
SetLastError( res );
|
||||
RegCloseKey( key );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
RegCloseKey( key );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
EnterCriticalSection( &PROFILE_CritSect );
|
||||
|
||||
if (PROFILE_Open( filename, TRUE ))
|
||||
|
|
Loading…
Reference in New Issue