kernel32: Open the INI file in PROFILE_DeleteSection().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
17a3c0964d
commit
50553b5db1
|
@ -488,30 +488,6 @@ static PROFILESECTION *PROFILE_Load(HANDLE hFile, ENCODING * pEncoding)
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* PROFILE_DeleteSection
|
||||
*
|
||||
* Delete a section from a profile tree.
|
||||
*/
|
||||
static BOOL PROFILE_DeleteSection( PROFILESECTION **section, LPCWSTR name )
|
||||
{
|
||||
while (*section)
|
||||
{
|
||||
if (!strcmpiW( (*section)->name, name ))
|
||||
{
|
||||
PROFILESECTION *to_del = *section;
|
||||
*section = to_del->next;
|
||||
to_del->next = NULL;
|
||||
PROFILE_Free( to_del );
|
||||
CurProfile->changed = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
section = &(*section)->next;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* PROFILE_DeleteKey
|
||||
*
|
||||
|
@ -923,6 +899,37 @@ static INT PROFILE_GetSection( const WCHAR *filename, LPCWSTR section_name,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static BOOL PROFILE_DeleteSection( const WCHAR *filename, const WCHAR *name )
|
||||
{
|
||||
PROFILESECTION **section;
|
||||
|
||||
EnterCriticalSection( &PROFILE_CritSect );
|
||||
|
||||
if (!PROFILE_Open( filename, TRUE ))
|
||||
{
|
||||
LeaveCriticalSection( &PROFILE_CritSect );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (section = &CurProfile->section; *section; section = &(*section)->next)
|
||||
{
|
||||
if (!strcmpiW( (*section)->name, name ))
|
||||
{
|
||||
PROFILESECTION *to_del = *section;
|
||||
*section = to_del->next;
|
||||
to_del->next = NULL;
|
||||
PROFILE_Free( to_del );
|
||||
CurProfile->changed = TRUE;
|
||||
PROFILE_FlushFile();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LeaveCriticalSection( &PROFILE_CritSect );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* See GetPrivateProfileSectionNamesA for documentation */
|
||||
static INT PROFILE_GetSectionNames( LPWSTR buffer, UINT len )
|
||||
{
|
||||
|
@ -1317,27 +1324,30 @@ BOOL WINAPI WritePrivateProfileStringW( LPCWSTR section, LPCWSTR entry,
|
|||
{
|
||||
BOOL ret = FALSE;
|
||||
|
||||
RtlEnterCriticalSection( &PROFILE_CritSect );
|
||||
|
||||
if (!section && !entry && !string) /* documented "file flush" case */
|
||||
{
|
||||
EnterCriticalSection( &PROFILE_CritSect );
|
||||
if (!filename || PROFILE_Open( filename, TRUE ))
|
||||
{
|
||||
if (CurProfile) PROFILE_ReleaseFile(); /* always return FALSE in this case */
|
||||
if (CurProfile) PROFILE_ReleaseFile();
|
||||
}
|
||||
LeaveCriticalSection( &PROFILE_CritSect );
|
||||
return FALSE;
|
||||
}
|
||||
else if (PROFILE_Open( filename, TRUE ))
|
||||
if (!entry) return PROFILE_DeleteSection( filename, section );
|
||||
|
||||
EnterCriticalSection( &PROFILE_CritSect );
|
||||
|
||||
if (PROFILE_Open( filename, TRUE ))
|
||||
{
|
||||
if (!section)
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
else if (!entry)
|
||||
ret = PROFILE_DeleteSection( &CurProfile->section, section );
|
||||
else
|
||||
ret = PROFILE_SetString( section, entry, string, FALSE);
|
||||
if (ret) ret = PROFILE_FlushFile();
|
||||
}
|
||||
|
||||
RtlLeaveCriticalSection( &PROFILE_CritSect );
|
||||
LeaveCriticalSection( &PROFILE_CritSect );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1377,37 +1387,40 @@ BOOL WINAPI WritePrivateProfileSectionW( LPCWSTR section,
|
|||
BOOL ret = FALSE;
|
||||
LPWSTR p;
|
||||
|
||||
RtlEnterCriticalSection( &PROFILE_CritSect );
|
||||
|
||||
if (!section && !string)
|
||||
{
|
||||
EnterCriticalSection( &PROFILE_CritSect );
|
||||
if (!filename || PROFILE_Open( filename, TRUE ))
|
||||
{
|
||||
if (CurProfile) PROFILE_ReleaseFile(); /* always return FALSE in this case */
|
||||
if (CurProfile) PROFILE_ReleaseFile();
|
||||
}
|
||||
LeaveCriticalSection( &PROFILE_CritSect );
|
||||
return FALSE;
|
||||
}
|
||||
else if (PROFILE_Open( filename, TRUE )) {
|
||||
if (!string)
|
||||
if (!string) return PROFILE_DeleteSection( filename, section );
|
||||
|
||||
EnterCriticalSection( &PROFILE_CritSect );
|
||||
|
||||
if (PROFILE_Open( filename, TRUE ))
|
||||
{
|
||||
PROFILE_DeleteAllKeys(section);
|
||||
ret = TRUE;
|
||||
while (*string && ret)
|
||||
{
|
||||
ret = PROFILE_DeleteSection( &CurProfile->section, section );
|
||||
} else {
|
||||
PROFILE_DeleteAllKeys(section);
|
||||
ret = TRUE;
|
||||
while(*string && ret) {
|
||||
LPWSTR buf = HeapAlloc( GetProcessHeap(), 0, (strlenW(string)+1) * sizeof(WCHAR) );
|
||||
strcpyW( buf, string );
|
||||
if((p = strchrW( buf, '='))) {
|
||||
*p='\0';
|
||||
ret = PROFILE_SetString( section, buf, p+1, TRUE);
|
||||
}
|
||||
HeapFree( GetProcessHeap(), 0, buf );
|
||||
string += strlenW(string)+1;
|
||||
WCHAR *buf = HeapAlloc( GetProcessHeap(), 0, (strlenW( string ) + 1) * sizeof(WCHAR) );
|
||||
strcpyW( buf, string );
|
||||
if ((p = strchrW( buf, '=')))
|
||||
{
|
||||
*p = '\0';
|
||||
ret = PROFILE_SetString( section, buf, p+1, TRUE );
|
||||
}
|
||||
HeapFree( GetProcessHeap(), 0, buf );
|
||||
string += strlenW( string ) + 1;
|
||||
}
|
||||
if (ret) ret = PROFILE_FlushFile();
|
||||
}
|
||||
|
||||
RtlLeaveCriticalSection( &PROFILE_CritSect );
|
||||
LeaveCriticalSection( &PROFILE_CritSect );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue