Add generic parser to cfg to struct.

This commit is contained in:
jonathan santis
2025-05-14 09:41:41 +02:00
parent 4c2e79638d
commit 07bbca3143
5 changed files with 32 additions and 6 deletions

View File

@@ -47,6 +47,10 @@ int checkSection(char *str,char delimiterLeft,char delimiterRight,char **section
break;
}
}
if(state != ST_FOUND_LEFT_DELIMITER)
{
return ST_ERROR_NOT_FOUND_LEFT_DELIMITER;
}
break;
case ST_FOUND_LEFT_DELIMITER:
for(i=0;i<=len;i++) //find second (right) delimiter
@@ -153,7 +157,7 @@ int getNameValuePair(char *str,char leftDelimiterPos,char rightDelimiterPos,char
return NO_ERROR;
}
int parseConfig(char *buffer,struct configEntry **entry,int configSizeCount)
int parseConfig(char *buffer,struct configEntry **entry,int configSizeCount,int *returnedCount)
{
int state=ST_INIT;
int ret=0;
@@ -191,6 +195,7 @@ int parseConfig(char *buffer,struct configEntry **entry,int configSizeCount)
if(i<configSizeCount-1)
{
i++;
*returnedCount = i;
}
else {
return ERROR_STR;

9
config.cfg Normal file
View File

@@ -0,0 +1,9 @@
[PRINTER]
ip=192.168.209.173
[dööner]
df=123
[anothersection]
a=192
b=111
c=213

View File

@@ -12,8 +12,9 @@
#define ST_FOUND_LEFT_DELIMITER 1
#define ST_FOUND_RIGHT_DELIMITER 2
#define ST_ERROR_NOT_FOUND_RIGHT_DELIMITER 3
#define ST_FOUND_SECTION 4
#define ST_SKIP_READ 5
#define ST_ERROR_NOT_FOUND_LEFT_DELIMITER 4
#define ST_FOUND_SECTION 5
#define ST_SKIP_READ 6
#define ST_FINISH 20
@@ -37,4 +38,4 @@ int checkSection(char *str,char delimiterLeft,char delimiterRight,char **section
int getStrAtPos(char *str,int fromPos,int toPos, char **name,int sizeName);
int getNameValuePair(char *str,char leftDelimiterPos,char rightDelimiterPos,char **name,char **value,int sizeName,int sizeValue);
int parseConfig(char *buffer,struct configEntry **entry,int configSize);
int parseConfig(char *buffer,struct configEntry **entry,int configSize,int *returnedCount);

2
makefile Normal file
View File

@@ -0,0 +1,2 @@
default:
gcc -O0 -g test.c config.c file.c

11
test.c
View File

@@ -57,8 +57,17 @@ int main(void)
else {
printf("Error on getFile:%d\n",ret);
}
struct configEntry *entry=NULL;
int returnedCount=0;
int i=0;
parseConfig(content,&entry,sizeEntry);
entry = malloc(10*sizeof(struct configEntry));
parseConfig(content,&entry,10*sizeof(struct configEntry),&returnedCount);
for(i=0;i<returnedCount;i++)
{
printf("i:%d/%d, struct section: %s, keyname: %s, keyvalue: %s\n",i,returnedCount,entry[i].sectionName,entry[i].keyName,entry[i].keyValue);
}