diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c index 46ed993a55bef5ecc00ab741ed0096368800ac21..02f346aa96a900ac5c19007b7ef962252a8eb0f6 100644 --- a/src/xpdev/ini_file.c +++ b/src/xpdev/ini_file.c @@ -931,6 +931,33 @@ size_t iniGetSectionCount(str_list_t list, const char* prefix) return(items); } +size_t iniReadSectionCount(FILE* fp, const char* prefix) +{ + char* p; + char str[INI_MAX_LINE_LEN]; + ulong items=0; + + if(fp==NULL) + return(0); + + rewind(fp); + + while(!feof(fp)) { + if(fgets(str,sizeof(str),fp)==NULL) + break; + if(is_eof(str)) + break; + if((p=section_name(str))==NULL) + continue; + if(prefix!=NULL) + if(strnicmp(p,prefix,strlen(prefix))!=0) + continue; + items++; + } + + return(items); +} + str_list_t iniReadKeyList(FILE* fp, const char* section) { diff --git a/src/xpdev/ini_file.h b/src/xpdev/ini_file.h index cb986e72b712af4803e99131cd64c74a218793a9..82c794f550bd2c8a58d70ca51a15eae84633ce98 100644 --- a/src/xpdev/ini_file.h +++ b/src/xpdev/ini_file.h @@ -67,6 +67,8 @@ extern "C" { /* Read all section names and return as an allocated string list */ /* Optionally (if prefix!=NULL), returns a subset of section names */ str_list_t iniReadSectionList(FILE*, const char* prefix); +/* Returns number (count) of sections */ +size_t iniReadSectionCount(FILE*, const char* prefix); /* Read all key names and return as an allocated string list */ str_list_t iniReadKeyList(FILE*, const char* section); /* Read all key and value pairs and return as a named string list */