--- a/src/server/config/serverconfig.c Mon Nov 07 17:59:44 2022 +0100 +++ b/src/server/config/serverconfig.c Mon Nov 07 22:30:12 2022 +0100 @@ -294,6 +294,12 @@ obj->text_begin = new_textbegin; } else { // normal line containing a directive, space or comment + + // add it to parent node + current->text_begin = line_cp; + CFG_NODE_ADD(&parent->children_begin, &parent->children_end, current); + + // validate after CFG_NODE_ADD, because now current->prev is set if(current->type == CONFIG_NODE_DIRECTIVE && parser->validateDirective && parser->validateDirective(parser, current)) @@ -301,9 +307,6 @@ err = 1; break; } - // add it to parent node - current->text_begin = line_cp; - CFG_NODE_ADD(&parent->children_begin, &parent->children_end, current); } // obj points to the previous node that started as a directive @@ -478,3 +481,26 @@ } return 0; } + +ConfigNode* serverconfig_previous_dir_or_obj(ConfigNode *node) { + node = node->prev; + while(node) { + if(node->type == CONFIG_NODE_DIRECTIVE || node->type == CONFIG_NODE_OBJECT) { + return node; + } + node = node->prev; + } + return NULL; +} + +size_t serverconfig_children_count(ConfigNode *node, ConfigNodeType type) { + size_t count = 0; + node = node->children_begin; + while(node) { + if(node->type == type) { + count++; + } + node = node->next; + } + return count; +}