From 64c5d7ab942d8f4589f43909497ae07cc69231d0 Mon Sep 17 00:00:00 2001 From: pommicket Date: Sat, 13 Sep 2025 23:33:13 -0400 Subject: Check for duplicates --- pom.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pom.c b/pom.c index d0d8406..5846226 100644 --- a/pom.c +++ b/pom.c @@ -926,7 +926,29 @@ parser_finish(struct parser *parser) { #endif } qsort(items, items_count, sizeof *items, conf_item_cmp_qsort); - // TODO: check for duplicates + for (size_t i = 0; i + 1 < items_count; i++) { + struct conf_item *item1 = &items[i]; + struct conf_item *item2 = &items[i+1]; + if (strcmp(item1->key, item2->key) != 0) { + // OK + continue; + } + uint64_t min_line, max_line; + if (item1->line < item2->line) { + min_line = item1->line; + max_line = item2->line; + } else { + min_line = item2->line; + max_line = item1->line; + } + parser->line_number = max_line; + parser_error(parser, "Re-definition of %s (previously defined on line %" PRIu64 ")", + item1->key, min_line); + } + if (parser->errors.count) { + conf_free(conf); + return NULL; + } pom_conf *root = conf_calloc(conf, 1, sizeof *root); if (!root) goto out_of_memory; -- cgit v1.2.3