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

Add iniGet/ReadSectionListWithDupes()

For use cases were we don't want to silenty ignore duplicate (secondary)
section definitions.
parent 72b92a53
Branches
Tags
No related merge requests found
...@@ -1263,7 +1263,7 @@ void* iniFreeNamedStringList(named_string_t** list) ...@@ -1263,7 +1263,7 @@ void* iniFreeNamedStringList(named_string_t** list)
return(NULL); return(NULL);
} }
str_list_t iniReadSectionList(FILE* fp, const char* prefix) static str_list_t ini_read_section_list(FILE* fp, const char* prefix, bool include_dupes)
{ {
char* p; char* p;
char str[INI_MAX_LINE_LEN]; char str[INI_MAX_LINE_LEN];
...@@ -1288,7 +1288,7 @@ str_list_t iniReadSectionList(FILE* fp, const char* prefix) ...@@ -1288,7 +1288,7 @@ str_list_t iniReadSectionList(FILE* fp, const char* prefix)
if(prefix!=NULL) if(prefix!=NULL)
if(strnicmp(p,prefix,strlen(prefix))!=0) if(strnicmp(p,prefix,strlen(prefix))!=0)
continue; continue;
if(strListFind(lp, p, /* case_sensitive */false) >= 0) if(!include_dupes && strListFind(lp, p, /* case_sensitive */false) >= 0)
continue; continue;
if(strListAppend(&lp,p,items++)==NULL) if(strListAppend(&lp,p,items++)==NULL)
break; break;
...@@ -1297,7 +1297,17 @@ str_list_t iniReadSectionList(FILE* fp, const char* prefix) ...@@ -1297,7 +1297,17 @@ str_list_t iniReadSectionList(FILE* fp, const char* prefix)
return(lp); return(lp);
} }
str_list_t iniGetSectionList(str_list_t list, const char* prefix) str_list_t iniReadSectionList(FILE* fp, const char* prefix)
{
return ini_read_section_list(fp, prefix, /* include dupes: */false);
}
str_list_t iniReadSectionListWithDupes(FILE* fp, const char* prefix)
{
return ini_read_section_list(fp, prefix, /* include dupes: */true);
}
static str_list_t ini_get_section_list(str_list_t list, const char* prefix, bool include_dupes)
{ {
char* p; char* p;
char str[INI_MAX_LINE_LEN]; char str[INI_MAX_LINE_LEN];
...@@ -1319,7 +1329,7 @@ str_list_t iniGetSectionList(str_list_t list, const char* prefix) ...@@ -1319,7 +1329,7 @@ str_list_t iniGetSectionList(str_list_t list, const char* prefix)
if(prefix!=NULL) if(prefix!=NULL)
if(strnicmp(p,prefix,strlen(prefix))!=0) if(strnicmp(p,prefix,strlen(prefix))!=0)
continue; continue;
if(strListFind(lp, p, /* case_sensitive */false) >= 0) if(include_dupes && strListFind(lp, p, /* case_sensitive */false) >= 0)
continue; continue;
if(strListAppend(&lp,p,items++)==NULL) if(strListAppend(&lp,p,items++)==NULL)
break; break;
...@@ -1328,6 +1338,16 @@ str_list_t iniGetSectionList(str_list_t list, const char* prefix) ...@@ -1328,6 +1338,16 @@ str_list_t iniGetSectionList(str_list_t list, const char* prefix)
return(lp); return(lp);
} }
str_list_t iniGetSectionList(str_list_t list, const char* prefix)
{
return ini_get_section_list(list, prefix, /* include_dupes: */false);
}
str_list_t iniGetSectionListWithDupes(str_list_t list, const char* prefix)
{
return ini_get_section_list(list, prefix, /* include_dupes: */true);
}
size_t iniGetSectionCount(str_list_t list, const char* prefix) size_t iniGetSectionCount(str_list_t list, const char* prefix)
{ {
char* p; char* p;
......
...@@ -52,6 +52,7 @@ extern "C" { ...@@ -52,6 +52,7 @@ extern "C" {
/* Read all section names and return as an allocated string list */ /* Read all section names and return as an allocated string list */
/* Optionally (if prefix!=NULL), returns a subset of section names */ /* Optionally (if prefix!=NULL), returns a subset of section names */
DLLEXPORT str_list_t iniReadSectionList(FILE*, const char* prefix); DLLEXPORT str_list_t iniReadSectionList(FILE*, const char* prefix);
DLLEXPORT str_list_t iniReadSectionListWithDupes(FILE*, const char* prefix);
/* Returns number (count) of sections */ /* Returns number (count) of sections */
DLLEXPORT size_t iniReadSectionCount(FILE*, const char* prefix); DLLEXPORT size_t iniReadSectionCount(FILE*, const char* prefix);
/* Read all key names and return as an allocated string list */ /* Read all key names and return as an allocated string list */
...@@ -137,9 +138,10 @@ DLLEXPORT bool iniCloseFile(FILE*); ...@@ -137,9 +138,10 @@ DLLEXPORT bool iniCloseFile(FILE*);
/* StringList functions */ /* StringList functions */
DLLEXPORT str_list_t iniGetSectionList(str_list_t list, const char* prefix); DLLEXPORT str_list_t iniGetSectionList(str_list_t list, const char* prefix);
DLLEXPORT str_list_t iniGetSectionListWithDupes(str_list_t list, const char* prefix);
DLLEXPORT size_t iniGetSectionCount(str_list_t list, const char* prefix); DLLEXPORT size_t iniGetSectionCount(str_list_t list, const char* prefix);
DLLEXPORT str_list_t iniGetKeyList(str_list_t list, const char* section); DLLEXPORT str_list_t iniGetKeyList(str_list_t list, const char* section);
DLLEXPORT named_string_t** DLLEXPORT named_string_t**
iniGetNamedStringList(str_list_t list, const char* section); iniGetNamedStringList(str_list_t list, const char* section);
/* Return the unparsed value (string literals not supported): */ /* Return the unparsed value (string literals not supported): */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment