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 */