Added support for the undocumented combination
GetPrivateProfileStringA(section == NULL, entry == NULL, ...
diff --git a/files/profile.c b/files/profile.c
index 1fc08dc..0d5a1330 100644
--- a/files/profile.c
+++ b/files/profile.c
@@ -598,6 +598,29 @@
}
+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 @@
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 @@
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 );