X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FConfigParser.c;h=bbf479131800b177e0331cc9828f4c4791057d89;hb=902ebfe5551be2daa3edf8141bcee91f62c0a5e0;hp=061e2488d34d35c7fd66bf21c09292dd42554572;hpb=b2d36921d551c63c612e2926b38dd09d55c36dea;p=NeonServV5.git diff --git a/src/ConfigParser.c b/src/ConfigParser.c index 061e248..bbf4791 100644 --- a/src/ConfigParser.c +++ b/src/ConfigParser.c @@ -1,5 +1,5 @@ -/* ConfigParser.c - NeonServ v5.2 - * Copyright (C) 2011 Philipp Kreil (pk910) +/* ConfigParser.c - NeonServ v5.3 + * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -299,6 +299,52 @@ char *get_string_field(char *field_path) { return NULL; } +char **get_all_fieldnames(char *block_path) { + struct ConfigEntry *centry = root_entry; + char *a, *b = block_path; + struct ConfigEntry *subentry; + while((a = strstr(b, ".")) && centry) { + if(centry->type == ENTRYTYPE_BLOCK) { + int found = 0; + for(subentry = centry->value; subentry; subentry = subentry->next) { + if(!stricmplen(subentry->name, b, a-b)) { + centry = subentry; + found = 1; + break; + } + } + if(!found) + return NULL; + } else + return NULL; + b = a+1; + } + if(centry->type == ENTRYTYPE_BLOCK) { + int found = 0; + for(subentry = centry->value; subentry; subentry = subentry->next) { + if(!stricmp(subentry->name, b)) { + centry = subentry; + found = 1; + break; + } + } + if(!found) + return NULL; + } else + return NULL; + if(centry->type != ENTRYTYPE_BLOCK) return NULL; + int count = 0; + for(subentry = centry->value; subentry; subentry = subentry->next) { + count++; + } + char **fieldnames = calloc(count+1, sizeof(char *)); + count = 0; + for(subentry = centry->value; subentry; subentry = subentry->next) { + fieldnames[count++] = subentry->name; + } + return fieldnames; +} + void free_loaded_config() { if(root_entry) { free_entry_rekursiv(root_entry, 1);