From dfa684b1a9c340d9ee66d5b6453b63bec2a40d45 Mon Sep 17 00:00:00 2001 From: James Bowes Date: Sun, 8 Jun 2008 18:29:24 -0400 Subject: [PATCH] Add url and license package data as well --- main.c | 10 ++++++++-- razor.c | 30 ++++++++++++++++++------------ razor.h | 12 +++++++----- rpm.c | 9 +++++++-- yum.c | 19 +++++++++++++++++-- 5 files changed, 57 insertions(+), 23 deletions(-) diff --git a/main.c b/main.c index f2f587d..060c335 100644 --- a/main.c +++ b/main.c @@ -817,6 +817,7 @@ command_info(int argc, const char *argv[]) struct razor_package_iterator *pi; struct razor_package *package; const char *pattern = argv[0], *name, *version, *arch; + const char *summary, *description, *url, *license; set = razor_set_open(repo_filename); pi = razor_package_iterator_create(set); @@ -825,12 +826,17 @@ command_info(int argc, const char *argv[]) if (pattern && fnmatch(pattern, name, 0) != 0) continue; + razor_package_get_details (set, package, &summary, &description, + &url, &license); + printf ("Name: %s\n", name); printf ("Arch: %s\n", arch); printf ("Version: %s\n", version); - printf ("Summary: %s\n", razor_package_get_summary (set, package)); + printf ("URL: %s\n", url); + printf ("License: %s\n", license); + printf ("Summary: %s\n", summary); printf ("Description:\n"); - printf ("%s\n", razor_package_get_description (set, package)); + printf ("%s\n", description); printf ("\n"); } razor_package_iterator_destroy(pi); diff --git a/razor.c b/razor.c index eebdd51..33aae80 100644 --- a/razor.c +++ b/razor.c @@ -63,10 +63,12 @@ struct razor_set_header { struct razor_package { uint name : 24; uint flags : 8; - uint32_t summary; - uint32_t description; uint32_t version; uint32_t arch; + uint32_t summary; + uint32_t description; + uint32_t url; + uint32_t license; struct list_head properties; struct list_head files; }; @@ -332,10 +334,15 @@ razor_importer_finish_package(struct razor_importer *importer) void razor_importer_add_details(struct razor_importer *importer, const char *summary, - const char *description) + const char *description, + const char *url, + const char *license) { importer->package->summary = hashtable_tokenize(&importer->table, summary); importer->package->description = hashtable_tokenize(&importer->table, description); + importer->package->url = hashtable_tokenize(&importer->table, url); + importer->package->license = hashtable_tokenize(&importer->table, license); + } void @@ -921,18 +928,17 @@ razor_set_get_package(struct razor_set *set, const char *package) return p; } -const char * -razor_package_get_summary(struct razor_set *set, struct razor_package *package) +void +razor_package_get_details(struct razor_set *set, struct razor_package *package, + const char **summary, const char **description, + const char **url, const char **license) { const char *pool = set->string_pool.data; - return &pool[package->summary]; -} -const char * -razor_package_get_description(struct razor_set *set, struct razor_package *package) -{ - const char *pool = set->string_pool.data; - return &pool[package->description]; + *summary = &pool[package->summary]; + *description = &pool[package->description]; + *url = &pool[package->url]; + *license = &pool[package->license]; } struct razor_property_iterator { diff --git a/razor.h b/razor.h index 5927991..036285f 100644 --- a/razor.h +++ b/razor.h @@ -51,10 +51,10 @@ int razor_set_write(struct razor_set *set, const char *filename); struct razor_package * razor_set_get_package(struct razor_set *set, const char *package); -const char * -razor_package_get_summary(struct razor_set *set, struct razor_package *package); -const char * -razor_package_get_description(struct razor_set *set, struct razor_package *package); +void +razor_package_get_details(struct razor_set *set, struct razor_package *package, + const char **summary, const char **description, + const char **url, const char **license); struct razor_package_iterator; struct razor_package_iterator * @@ -177,7 +177,9 @@ void razor_importer_begin_package(struct razor_importer *importer, const char *arch); void razor_importer_add_details(struct razor_importer *importer, const char *summary, - const char *description); + const char *description, + const char *url, + const char *license); void razor_importer_add_property(struct razor_importer *importer, const char *name, enum razor_version_relation relation, diff --git a/rpm.c b/rpm.c index 4eec65f..2832da3 100644 --- a/rpm.c +++ b/rpm.c @@ -673,7 +673,8 @@ razor_set_create_from_rpmdb(void) rpmdbMatchIterator iter; Header h; int_32 type, count, i; - union rpm_entry name, epoch, version, release, arch, summary, description; + union rpm_entry name, epoch, version, release, arch; + union rpm_entry summary, description, url, license; union rpm_entry basenames, dirnames, dirindexes; char filename[PATH_MAX], evr[128], buf[16]; rpmdb db; @@ -696,6 +697,8 @@ razor_set_create_from_rpmdb(void) headerGetEntry(h, RPMTAG_ARCH, &type, &arch.p, &count); headerGetEntry(h, RPMTAG_SUMMARY, &type, &summary.p, &count); headerGetEntry(h, RPMTAG_DESCRIPTION, &type, &description.p, &count); + headerGetEntry(h, RPMTAG_URL, &type, &url.p, &count); + headerGetEntry(h, RPMTAG_LICENSE, &type, &license.p, &count); if (epoch.flags != NULL) { snprintf(buf, sizeof buf, "%u", *epoch.flags); @@ -708,7 +711,9 @@ razor_set_create_from_rpmdb(void) razor_importer_begin_package(importer, name.string, evr, arch.string); - razor_importer_add_details(importer, summary.string, description.string); + razor_importer_add_details(importer, summary.string, + description.string, url.string, + license.string); add_properties(importer, RAZOR_PROPERTY_REQUIRES, h, RPMTAG_REQUIRENAME, diff --git a/yum.c b/yum.c index 0cb69f0..9ed10cf 100644 --- a/yum.c +++ b/yum.c @@ -39,6 +39,8 @@ enum { YUM_STATE_PACKAGE_ARCH, YUM_STATE_SUMMARY, YUM_STATE_DESCRIPTION, + YUM_STATE_URL, + YUM_STATE_LICENSE, YUM_STATE_CHECKSUM, YUM_STATE_REQUIRES, YUM_STATE_PROVIDES, @@ -54,7 +56,8 @@ struct yum_context { struct razor_importer *importer; struct import_property_context *current_property_context; - char name[256], arch[64], summary[512], description[4096], buffer[512], *p; + char name[256], arch[64], summary[512], description[4096]; + char url[256], license[64], buffer[512], *p; char pkgid[128]; int state; }; @@ -121,9 +124,15 @@ yum_primary_start_element(void *data, const char *name, const char **atts) } else if (strcmp(name, "description") == 0) { ctx->p = ctx->description; ctx->state = YUM_STATE_DESCRIPTION; + } else if (strcmp(name, "url") == 0) { + ctx->p = ctx->url; + ctx->state = YUM_STATE_URL; } else if (strcmp(name, "checksum") == 0) { ctx->p = ctx->pkgid; ctx->state = YUM_STATE_CHECKSUM; + } else if (strcmp(name, "rpm:license") == 0) { + ctx->p = ctx->license; + ctx->state = YUM_STATE_LICENSE; } else if (strcmp(name, "rpm:requires") == 0) { ctx->state = YUM_STATE_REQUIRES; } else if (strcmp(name, "rpm:provides") == 0) { @@ -198,6 +207,8 @@ yum_primary_end_element (void *data, const char *name) case YUM_STATE_PACKAGE_ARCH: case YUM_STATE_SUMMARY: case YUM_STATE_DESCRIPTION: + case YUM_STATE_URL: + case YUM_STATE_LICENSE: case YUM_STATE_CHECKSUM: case YUM_STATE_FILE: ctx->state = YUM_STATE_BEGIN; @@ -205,7 +216,9 @@ yum_primary_end_element (void *data, const char *name) } if (strcmp(name, "package") == 0) { - razor_importer_add_details(ctx->importer, ctx->summary, ctx->description); + razor_importer_add_details(ctx->importer, ctx->summary, + ctx->description, ctx->url, + ctx->license); XML_StopParser(ctx->current_parser, XML_TRUE); ctx->current_parser = ctx->filelists_parser; @@ -222,6 +235,8 @@ yum_character_data (void *data, const XML_Char *s, int len) case YUM_STATE_PACKAGE_ARCH: case YUM_STATE_SUMMARY: case YUM_STATE_DESCRIPTION: + case YUM_STATE_URL: + case YUM_STATE_LICENSE: case YUM_STATE_CHECKSUM: case YUM_STATE_FILE: memcpy(ctx->p, s, len); -- 1.7.1