mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 01:13:38 +00:00
James Hawkins : kernel32: Handle writing empty sections and keys in WritePrivateProfileString.
svn path=/trunk/; revision=40488
This commit is contained in:
parent
1ceab2328e
commit
75d63be3e0
|
@ -213,31 +213,31 @@ static void PROFILE_Save( HANDLE hFile, const PROFILESECTION *section, ENCODING
|
|||
|
||||
for ( ; section; section = section->next)
|
||||
{
|
||||
int len = 0;
|
||||
int len = 4;
|
||||
|
||||
if (section->name[0]) len += wcslen(section->name) + 6;
|
||||
if (section->name[0]) len += wcslen(section->name);
|
||||
|
||||
for (key = section->key; key; key = key->next)
|
||||
{
|
||||
len += wcslen(key->name) + 2;
|
||||
if (key->value) len += wcslen(key->value) + 1;
|
||||
len += wcslen(key->name);
|
||||
if (key->value && key->value[0]) len += wcslen(key->value);
|
||||
len += 3; /* '=' and "\r\n" */
|
||||
}
|
||||
|
||||
buffer = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
||||
if (!buffer) return;
|
||||
|
||||
p = buffer;
|
||||
*p++ = '[';
|
||||
if (section->name[0])
|
||||
{
|
||||
*p++ = '\r';
|
||||
*p++ = '\n';
|
||||
*p++ = '[';
|
||||
wcscpy( p, section->name );
|
||||
p += wcslen(p);
|
||||
*p++ = ']';
|
||||
*p++ = '\r';
|
||||
*p++ = '\n';
|
||||
}
|
||||
*p++ = ']';
|
||||
*p++ = '\r';
|
||||
*p++ = '\n';
|
||||
|
||||
for (key = section->key; key; key = key->next)
|
||||
{
|
||||
wcscpy( p, key->name );
|
||||
|
@ -607,12 +607,20 @@ static PROFILEKEY *PROFILE_Find( PROFILESECTION **section, LPCWSTR section_name,
|
|||
int seclen, keylen;
|
||||
|
||||
while (PROFILE_isspaceW(*section_name)) section_name++;
|
||||
p = section_name + wcslen(section_name) - 1;
|
||||
if (*section_name)
|
||||
p = section_name + wcslen(section_name) - 1;
|
||||
else
|
||||
p = section_name;
|
||||
|
||||
while ((p > section_name) && PROFILE_isspaceW(*p)) p--;
|
||||
seclen = p - section_name + 1;
|
||||
|
||||
while (PROFILE_isspaceW(*key_name)) key_name++;
|
||||
p = key_name + wcslen(key_name) - 1;
|
||||
if (*key_name)
|
||||
p = key_name + wcslen(key_name) - 1;
|
||||
else
|
||||
p = key_name;
|
||||
|
||||
while ((p > key_name) && PROFILE_isspaceW(*p)) p--;
|
||||
keylen = p - key_name + 1;
|
||||
|
||||
|
|
Loading…
Reference in a new issue