]> git.ipfire.org Git - pakfire.git/commitdiff
parser: Add support for flags
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 3 Mar 2021 10:35:10 +0000 (10:35 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 3 Mar 2021 11:42:52 +0000 (11:42 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/parser.c
src/libpakfire/archive.c
src/libpakfire/include/pakfire/parser.h
src/libpakfire/pakfire.c
src/libpakfire/parser.c
src/libpakfire/parser/grammar.y
tests/libpakfire/parser.c

index 651b7f58e02b62e45f3b6cca769b9e920203ea66..1e7df295560fb02c02c9ec8a6e96473763ffc0a1 100644 (file)
@@ -55,12 +55,13 @@ static void Parser_dealloc(ParserObject* self) {
 static int Parser_init(ParserObject* self, PyObject* args, PyObject* kwds) {
        PakfireObject* pakfire = NULL;
        const char* namespace = NULL;
+       int flags = 0;
 
-       if (!PyArg_ParseTuple(args, "O!|z", &PakfireType, &pakfire, &namespace))
+       if (!PyArg_ParseTuple(args, "O!|zi", &PakfireType, &pakfire, &namespace, &flags))
                return -1;
 
        // Allocate a new parser
-       self->parser = pakfire_parser_create(pakfire->pakfire, NULL, namespace);
+       self->parser = pakfire_parser_create(pakfire->pakfire, NULL, namespace, flags);
        if (!self->parser) {
                // What went wrong here?
                return -1;
index f5e964af306b9b413a7695bb3ee44d18e9f8855a..b41d769181ba0e8c6a9318c064989d043280ec58 100644 (file)
@@ -326,7 +326,7 @@ PAKFIRE_EXPORT PakfireArchive pakfire_archive_create(Pakfire pakfire) {
                archive->nrefs = 1;
 
                archive->format = -1;
-               archive->parser = pakfire_parser_create(pakfire, NULL, NULL);
+               archive->parser = pakfire_parser_create(pakfire, NULL, NULL, 0);
                archive->signatures = NULL;
        }
 
index 8f2dc3ac8e949f05bb97ab0c213697998e5ad523..f65def9c7a0ae751ad852e58181893c6b35e588f 100644 (file)
 
 #include <pakfire/types.h>
 
+enum pakfire_parser_flags {
+       PAKFIRE_PARSER_FLAGS_NONE            = 0,
+       PAKFIRE_PARSER_FLAGS_EXPAND_COMMANDS = (1 << 0),
+};
+
 struct pakfire_parser_error;
 
 PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParser parser,
-       const char* namespace);
+       const char* namespace, int flags);
 PakfireParser pakfire_parser_create_child(PakfireParser parser,
        const char* namespace);
 PakfireParser pakfire_parser_ref(PakfireParser parser);
index 824c2c6ec6346be09c17790ef79053ee59457c8c..526e96a841866bf910e0f517be28423a5bccac95 100644 (file)
@@ -780,7 +780,7 @@ PAKFIRE_EXPORT int pakfire_read_makefile(PakfireParser* parser, Pakfire pakfire,
                const char* path, struct pakfire_parser_error** error) {
        int r = 1;
 
-       *parser = pakfire_parser_create(pakfire, NULL, NULL);
+       *parser = pakfire_parser_create(pakfire, NULL, NULL, PAKFIRE_PARSER_FLAGS_EXPAND_COMMANDS);
        if (!*parser) {
                r = 1;
                goto ERROR;
index abf475c50da17d670666bd4351b5b127070233e9..44bf29aa0af11eca038f123237d958549f3ca422 100644 (file)
@@ -37,6 +37,7 @@ struct _PakfireParser {
        struct _PakfireParser* parent;
        int nrefs;
 
+       int flags;
        char* namespace;
 
        struct pakfire_parser_declaration** declarations;
@@ -57,7 +58,8 @@ static char* pakfire_parser_make_canonical_name(const char* namespace, const cha
        return buffer;
 }
 
-PAKFIRE_EXPORT PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParser parent, const char* namespace) {
+PAKFIRE_EXPORT PakfireParser pakfire_parser_create(Pakfire pakfire,
+               PakfireParser parent, const char* namespace, int flags) {
        PakfireParser parser = calloc(1, sizeof(*parser));
        if (parser) {
                parser->pakfire = pakfire_ref(pakfire);
@@ -67,6 +69,9 @@ PAKFIRE_EXPORT PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParse
                if (parent)
                        parser->parent = pakfire_parser_ref(parent);
 
+               // Store flags
+               parser->flags = flags;
+
                // Make namespace
                pakfire_parser_set_namespace(parser, namespace);
 
@@ -78,7 +83,7 @@ PAKFIRE_EXPORT PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParse
 }
 
 PAKFIRE_EXPORT PakfireParser pakfire_parser_create_child(PakfireParser parser, const char* namespace) {
-       return pakfire_parser_create(parser->pakfire, parser, namespace);
+       return pakfire_parser_create(parser->pakfire, parser, namespace, parser->flags);
 }
 
 PAKFIRE_EXPORT PakfireParser pakfire_parser_ref(PakfireParser parser) {
index 47432bd1ac4f791a622911a3bc9454eee4bb81cf..b08ddf4e4a1e31df440534f0ee85064e69806a20 100644 (file)
@@ -163,7 +163,7 @@ static void pakfire_parser_free_declaration(struct pakfire_parser_declaration* d
 
 grammar                                                : %empty
                                                        {
-                                                               $$ = pakfire_parser_create(pakfire, NULL, NULL);
+                                                               $$ = pakfire_parser_create(pakfire, NULL, NULL, 0);
                                                                if (!$$)
                                                                        ABORT;
 
@@ -293,7 +293,7 @@ subparser                                   : subparser_name T_EOL subgrammar T_END T_EOL
                                                                char* value;
 
                                                                // Create a new parser
-                                                               $$ = pakfire_parser_create(pakfire, NULL, NULL);
+                                                               $$ = pakfire_parser_create(pakfire, NULL, NULL, 0);
                                                                if (!$$)
                                                                        ABORT;
 
index bd3c5d01ca19660ec2895ba53f8c35aa1c0ac90c..6fc51f11eaf96e404dff99e6ff54c113b2f8a57d 100644 (file)
@@ -30,7 +30,7 @@ static int test_parser(const struct test* t) {
        char* value = NULL;
 
        // Create a new parser
-       PakfireParser parser = pakfire_parser_create(t->pakfire, NULL, NULL);
+       PakfireParser parser = pakfire_parser_create(t->pakfire, NULL, NULL, 0);
 
        // Retrieve a value that does not exist
        value = pakfire_parser_get(parser, NULL, "null");
@@ -118,7 +118,7 @@ static int test_parser_files(const struct test* t) {
                ASSERT(path);
 
                // Create a new parser
-               PakfireParser parser = pakfire_parser_create(t->pakfire, NULL, NULL);
+               PakfireParser parser = pakfire_parser_create(t->pakfire, NULL, NULL, 0);
 
                FILE* f = fopen(path, "r");
                ASSERT(f);