archive->nrefs = 1;
archive->format = -1;
- archive->parser = pakfire_parser_create(pakfire, NULL);
+ archive->parser = pakfire_parser_create(pakfire, NULL, NULL);
archive->signatures = NULL;
}
#include <pakfire/types.h>
-PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParser parser);
+PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParser parser,
+ const char* namespace);
PakfireParser pakfire_parser_ref(PakfireParser parser);
PakfireParser pakfire_parser_unref(PakfireParser parser);
int pakfire_parser_set_declaration(PakfireParser parser,
struct _PakfireParser* parent;
int nrefs;
+ char* namespace;
+
struct pakfire_parser_declaration** declarations;
unsigned int next_declaration;
unsigned int num_declarations;
};
-PAKFIRE_EXPORT PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParser parent) {
+static char* pakfire_parser_make_namespace(PakfireParser parent, const char* namespace) {
+ if (!namespace)
+ namespace = "";
+
+ char* buffer = NULL;
+
+ if (parent && *parent->namespace)
+ asprintf(&buffer, "%s.%s", parent->namespace, namespace);
+ else
+ buffer = pakfire_strdup(namespace);
+
+ return buffer;
+}
+
+PAKFIRE_EXPORT PakfireParser pakfire_parser_create(Pakfire pakfire, PakfireParser parent, const char* namespace) {
PakfireParser parser = pakfire_calloc(1, sizeof(*parser));
if (parser) {
parser->pakfire = pakfire_ref(pakfire);
if (parent)
parser->parent = pakfire_parser_ref(parent);
+ // Make namespace
+ parser->namespace = pakfire_parser_make_namespace(parent, namespace);
+
parser->num_declarations = NUM_DECLARATIONS;
// Allocate a decent number of declarations
parser->num_declarations, sizeof(*parser->declarations));
parser->next_declaration = 0;
+
+ DEBUG(pakfire, "Allocated new parser at %p (%s)\n",
+ parser, parser->namespace);
}
return parser;
pakfire_parser_unref(parser->parent);
pakfire_unref(parser->pakfire);
+ pakfire_free(parser->namespace);
pakfire_free(parser);
}
DEBUG(pakfire, "Parsing the following data:\n%s\n", data);
// Create a new sub-parser
- PakfireParser parser = pakfire_parser_create(pakfire, parent);
+ PakfireParser parser = pakfire_parser_create(pakfire, parent, NULL);
num_lines = 1;
static PakfireParser new_parser(PakfireParser parent) {
Pakfire pakfire = pakfire_parser_get_pakfire(parent);
- PakfireParser parser = pakfire_parser_create(pakfire, parent);
+ PakfireParser parser = pakfire_parser_create(pakfire, parent, current_block);
pakfire_unref(pakfire);
return parser;
FILE* f = fopen(path, "r");
assert_return(f, EXIT_FAILURE);
- PakfireParser parser = pakfire_parser_create(t->pakfire, NULL);
+ PakfireParser parser = pakfire_parser_create(t->pakfire, NULL, NULL);
int r = pakfire_parser_read(parser, f);
assert_return(r == 0, EXIT_FAILURE);