Added support for the undocumented combination

GetPrivateProfileStringA(section == NULL, entry == NULL, ...
This commit is contained in:
Andreas Mohr 1999-05-22 16:04:57 +00:00 committed by Alexandre Julliard
parent 6691fa81ed
commit adfeec96dd
1 changed files with 30 additions and 26 deletions

View File

@ -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
*
@ -618,8 +641,11 @@ static INT PROFILE_GetString( LPCSTR section, LPCSTR key_name,
section, key_name, def_val, buffer );
return strlen( buffer );
}
return PROFILE_GetSection(CurProfile->section, section, buffer, len,
if (section && section[0])
return PROFILE_GetSection(CurProfile->section, section, buffer, len,
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)
WORD WINAPI GetPrivateProfileSectionNames16( LPSTR buffer, WORD size,
LPCSTR filename )
{
char *buf;
int l,cursize;
PROFILESECTION *section;
BOOL ret = FALSE;
WORD ret = 0;
EnterCriticalSection( &PROFILE_CritSect );
if (PROFILE_Open( filename )) {
buf = buffer;
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;
}
if (PROFILE_Open( filename ))
ret = PROFILE_GetSectionNames(buffer, size);
LeaveCriticalSection( &PROFILE_CritSect );