Commit adfeec96 authored by Andreas Mohr's avatar Andreas Mohr Committed by Alexandre Julliard

Added support for the undocumented combination

GetPrivateProfileStringA(section == NULL, entry == NULL, ...
parent 6691fa81
...@@ -598,6 +598,29 @@ static INT PROFILE_GetSection( PROFILESECTION *section, LPCSTR section_name, ...@@ -598,6 +598,29 @@ static INT PROFILE_GetSection( PROFILESECTION *section, LPCSTR section_name,
} }
static INT PROFILE_GetSectionNames( LPSTR buffer, UINT len )
{
LPSTR buf = buffer;
WORD l, cursize = 0;
PROFILESECTION *section;
for (section = CurProfile->section; section; section = section->next)
if (section->name) {
l = strlen(section->name);
cursize += l+1;
if (cursize > len+1)
return len-2;
strcpy(buf, section->name);
buf += l+1;
}
*buf=0;
buf++;
return buf-buffer;
}
/*********************************************************************** /***********************************************************************
* PROFILE_GetString * PROFILE_GetString
* *
...@@ -618,8 +641,11 @@ static INT PROFILE_GetString( LPCSTR section, LPCSTR key_name, ...@@ -618,8 +641,11 @@ static INT PROFILE_GetString( LPCSTR section, LPCSTR key_name,
section, key_name, def_val, buffer ); section, key_name, def_val, buffer );
return strlen( buffer ); return strlen( buffer );
} }
if (section && section[0])
return PROFILE_GetSection(CurProfile->section, section, buffer, len, return PROFILE_GetSection(CurProfile->section, section, buffer, len,
FALSE, FALSE); FALSE, FALSE);
/* undocumented; both section and key_name are NULL */
return PROFILE_GetSectionNames(buffer, len);
} }
...@@ -1351,34 +1377,12 @@ BOOL WINAPI WriteProfileSectionW( LPCWSTR section, LPCWSTR keys_n_values) ...@@ -1351,34 +1377,12 @@ BOOL WINAPI WriteProfileSectionW( LPCWSTR section, LPCWSTR keys_n_values)
WORD WINAPI GetPrivateProfileSectionNames16( LPSTR buffer, WORD size, WORD WINAPI GetPrivateProfileSectionNames16( LPSTR buffer, WORD size,
LPCSTR filename ) LPCSTR filename )
{ {
char *buf; WORD ret = 0;
int l,cursize;
PROFILESECTION *section;
BOOL ret = FALSE;
EnterCriticalSection( &PROFILE_CritSect ); EnterCriticalSection( &PROFILE_CritSect );
if (PROFILE_Open( filename )) { if (PROFILE_Open( filename ))
buf = buffer; ret = PROFILE_GetSectionNames(buffer, size);
cursize = 0;
section = CurProfile->section;
for ( ; section; section = section->next)
if (section->name) {
l = strlen (section->name);
cursize += l+1;
if (cursize > size+1) {
LeaveCriticalSection( &PROFILE_CritSect );
return size-2;
}
strcpy (buf,section->name);
buf += l;
*buf = 0;
buf++;
}
buf++;
*buf=0;
ret = buf-buffer;
}
LeaveCriticalSection( &PROFILE_CritSect ); LeaveCriticalSection( &PROFILE_CritSect );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment