From: Michael Tremer Date: Wed, 22 May 2019 15:32:02 +0000 (+0100) Subject: libpakfire: parser: Rename pakfire_parser_add_declaration() to set X-Git-Tag: 0.9.28~1285^2~1027 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e5f2d2b521fe7ea334c422954059bcf4a86ae30;p=pakfire.git libpakfire: parser: Rename pakfire_parser_add_declaration() to set This is what the function really does and it now also updates values correctly. Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/parser.h b/src/libpakfire/include/pakfire/parser.h index 2d48124c5..504e95c79 100644 --- a/src/libpakfire/include/pakfire/parser.h +++ b/src/libpakfire/include/pakfire/parser.h @@ -27,7 +27,7 @@ PakfireParser pakfire_parser_create(Pakfire pakfire); PakfireParser pakfire_parser_unref(PakfireParser parser); -int pakfire_parser_add_declaration(PakfireParser parser, +int pakfire_parser_set_declaration(PakfireParser parser, const char* name, const char* value); int pakfire_parser_append_declaration(PakfireParser parser, const char* name, const char* value); diff --git a/src/libpakfire/parser.c b/src/libpakfire/parser.c index 95f800ee9..161852527 100644 --- a/src/libpakfire/parser.c +++ b/src/libpakfire/parser.c @@ -108,18 +108,31 @@ static struct pakfire_parser_declaration* pakfire_parser_get_declaration( return NULL; } -PAKFIRE_EXPORT int pakfire_parser_add_declaration(PakfireParser parser, +PAKFIRE_EXPORT int pakfire_parser_set_declaration(PakfireParser parser, const char* name, const char* value) { + // Handle when name already exists + struct pakfire_parser_declaration* d = pakfire_parser_get_declaration(parser, name); + if (d) { + // Replace value + if (d->value) + pakfire_free(d->value); + d->value = pakfire_strdup(value); + + DEBUG(parser->pakfire, "Updated declaration: %s = %s\n", + d->name, d->value); + + // All done + return 0; + } + // Check if we have any space left if (parser->next_declaration >= parser->num_declarations) { ERROR(parser->pakfire, "No free declarations left\n"); return -1; } - // XXX handle when name already exists - // Allocate a new declaration - struct pakfire_parser_declaration* d = pakfire_calloc(1, sizeof(*d)); + d = pakfire_calloc(1, sizeof(*d)); if (!d) return -1; @@ -141,7 +154,7 @@ PAKFIRE_EXPORT int pakfire_parser_append_declaration(PakfireParser parser, // Add the declaration if we could not find it if (!d) - return pakfire_parser_add_declaration(parser, name, value); + return pakfire_parser_set_declaration(parser, name, value); char* buffer = NULL; diff --git a/src/libpakfire/parser/grammar.y b/src/libpakfire/parser/grammar.y index be1e58011..679803d00 100644 --- a/src/libpakfire/parser/grammar.y +++ b/src/libpakfire/parser/grammar.y @@ -174,7 +174,7 @@ assignment : variable T_ASSIGN value T_EOL if (!name) ABORT; - int r = pakfire_parser_add_declaration(parser, name, $3); + int r = pakfire_parser_set_declaration(parser, name, $3); pakfire_free(name); if (r < 0) @@ -198,7 +198,7 @@ assignment : variable T_ASSIGN value T_EOL if (!name) ABORT; - int r = pakfire_parser_add_declaration(parser, name, $2); + int r = pakfire_parser_set_declaration(parser, name, $2); pakfire_free(name); if (r < 0)