diff -r e94d16f789e5 -r 72671f8e5741 import.c --- a/import.c Sun Nov 04 01:11:53 2007 -0400 +++ b/import.c Tue Nov 13 01:07:03 2007 -0500 @@ -15,144 +15,6 @@ #include "sha1.h" #include "razor.h" -static void -parse_package(struct razor_importer *importer, const char **atts, void *data) -{ - const char *name = NULL, *version = NULL; - int i; - - for (i = 0; atts[i]; i += 2) { - if (strcmp(atts[i], "name") == 0) - name = atts[i + 1]; - else if (strcmp(atts[i], "version") == 0) - version = atts[i + 1]; - } - - if (name == NULL || version == NULL) { - fprintf(stderr, "invalid package tag, " - "missing name or version attributes\n"); - return; - } - - razor_importer_begin_package(importer, name, version); -} - -enum { - RZR_REQUIRES, RZR_PROVIDES -}; - -static void -parse_property(struct razor_importer *importer, const char **atts, void *data) -{ - const char *name = NULL, *version = NULL; - int i; - - for (i = 0; atts[i]; i += 2) { - if (strcmp(atts[i], "name") == 0) - name = atts[i + 1]; - if (strcmp(atts[i], "version") == 0) - version = atts[i + 1]; - } - - if (name == NULL) { - fprintf(stderr, "invalid tag, missing name attribute\n"); - return; - } - - switch ((int) data) { - case RZR_REQUIRES: - razor_importer_add_property(importer, name, version, - RAZOR_PROPERTY_REQUIRES); - break; - case RZR_PROVIDES: - razor_importer_add_property(importer, name, version, - RAZOR_PROPERTY_PROVIDES); - break; - } -} - -static void -start_element(void *data, const char *name, const char **atts) -{ - struct razor_importer *importer = data; - - if (strcmp(name, "package") == 0) - parse_package(importer, atts, NULL); - else if (strcmp(name, "requires") == 0) - parse_property(importer, atts, (void *) RZR_REQUIRES); - else if (strcmp(name, "provides") == 0) - parse_property(importer, atts, (void*) RZR_PROVIDES); -} - -static void -end_element (void *data, const char *name) -{ - struct razor_importer *importer = data; - - if (strcmp(name, "package") == 0) - razor_importer_finish_package(importer); -} - -static int -import_rzr_file(struct razor_importer *importer, const char *filename) -{ - SHA_CTX sha1; - XML_Parser parser; - int fd; - void *p; - struct stat stat; - unsigned char hash[20]; - - fd = open(filename, O_RDONLY); - if (fstat(fd, &stat) < 0) - return -1; - p = mmap(NULL, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0); - if (p == MAP_FAILED) - return -1; - - parser = XML_ParserCreate(NULL); - XML_SetUserData(parser, importer); - XML_SetElementHandler(parser, start_element, end_element); - if (XML_Parse(parser, p, stat.st_size, 1) == XML_STATUS_ERROR) { - fprintf(stderr, - "%s at line %ld, %s\n", - XML_ErrorString(XML_GetErrorCode(parser)), - XML_GetCurrentLineNumber(parser), - filename); - return 1; - } - - XML_ParserFree(parser); - - SHA1_Init(&sha1); - SHA1_Update(&sha1, p, stat.st_size); - SHA1_Final(hash, &sha1); - - close(fd); - - munmap(p, stat.st_size); - - return 0; -} - -struct razor_set * -razor_import_rzr_files(int count, const char *files[]) -{ - struct razor_importer *importer; - int i; - - importer = razor_importer_new(); - - for (i = 0; i < count; i++) { - if (import_rzr_file(importer, files[i]) < 0) { - fprintf(stderr, "failed to import %s\n", files[i]); - exit(-1); - } - } - - return razor_importer_finish(importer); -} - /* Import a yum filelist as a razor package set. */ enum {