Skip to content
Snippets Groups Projects
Commit a66f9c6e authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

iniRemoveKey() will now remove all keys matching teh passed key name

There shouldn't be multiple keys with the same name in a section, but if there
were, a call to iniRemoveKey() would would only remove the *first* key with
that name. So loop until all the keys with the matching name are removed and
return true only if they were all successfully removed from the specified
section.

This resolved an observed issue with sbbsctrl-windows displaying an error
dialog "Failure writing initialization file: path/to/sbbs.ini" when there
were multiple *Sound keys in a section and the first such key value matched
that same key in the [Global] section: in this case, we try to remove the
duplicate key/value from the non-global section, but that removal was
considered a failure (iniKeyExists returned TRUE) because we only removed
the *first* key with that name (assuming there would be only one). So we
would abort the save entirely and display the error dialog.
parent 6690bb0f
No related branches found
No related tags found
No related merge requests found
......@@ -401,13 +401,19 @@ BOOL iniRemoveKey(str_list_t* list, const char* section, const char* key)
{
size_t i;
char* vp=NULL;
BOOL removed = FALSE;
i=get_value(*list, section, key, NULL, &vp, /* literals_supported: */FALSE);
while(1) {
i=get_value(*list, section, key, NULL, &vp, /* literals_supported: */FALSE);
if(vp==NULL)
return(FALSE);
if(vp==NULL)
return removed;
return(strListDelete(list,i));
if(!strListDelete(list,i))
return FALSE;
removed = TRUE;
}
return removed;
}
BOOL iniRemoveValue(str_list_t* list, const char* section, const char* key)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment