# HG changeset patch # User J. Ali Harlow # Date 1415875493 0 # Node ID 94d7459828bad15c75b3748d08be4605bdbecfd6 # Parent e1b95d57dd5400d3121bb9c85ffd6e82023b0d79 Add razor_install_prefix_iterator_create() diff -r e1b95d57dd54 -r 94d7459828ba librazor/iterator.c --- a/librazor/iterator.c Tue Nov 11 15:57:14 2014 +0000 +++ b/librazor/iterator.c Thu Nov 13 10:44:53 2014 +0000 @@ -317,6 +317,52 @@ free(fi); } +RAZOR_EXPORT struct razor_string_iterator * +razor_install_prefix_iterator_create(struct razor_set *set, + struct razor_package *package) +{ + struct razor_string_iterator *si; + + assert (set != NULL); + assert (package != NULL); + + si = zalloc(sizeof *si); + si->set = set; + + si->index = list_first(&package->install_prefixes, + &set->prefix_pool); + + return si; +} + +RAZOR_EXPORT int +razor_string_iterator_next(struct razor_string_iterator *si, + const char **string) +{ + char *pool; + int valid; + + assert (si != NULL); + + if (si->index) { + pool = si->set->string_pool.data; + *string = &pool[si->index->data]; + si->index = list_next(si->index); + valid = 1; + } else { + *string = NULL; + valid = 0; + } + + return valid; +} + +RAZOR_EXPORT void +razor_string_iterator_destroy(struct razor_string_iterator *si) +{ + free(si); +} + struct razor_package_query { struct razor_set *set; char *vector; diff -r e1b95d57dd54 -r 94d7459828ba librazor/razor-internal.h --- a/librazor/razor-internal.h Tue Nov 11 15:57:14 2014 +0000 +++ b/librazor/razor-internal.h Thu Nov 13 10:44:53 2014 +0000 @@ -175,6 +175,11 @@ int post_order; }; +struct razor_string_iterator { + struct razor_set *set; + struct list *index; +}; + int razor_set_aquire_lock(struct razor_set *set, const char *path, int exclusive); diff -r e1b95d57dd54 -r 94d7459828ba librazor/razor.c --- a/librazor/razor.c Tue Nov 11 15:57:14 2014 +0000 +++ b/librazor/razor.c Thu Nov 13 10:44:53 2014 +0000 @@ -540,8 +540,9 @@ { switch (type) { case RAZOR_DETAIL_PREFIXES: - /* We don't track prefixes in packages. Install prefixes - * are tracked, but we don't provide an API to get them. + /* We don't track prefixes in packages. Install + * prefixes are tracked, and made available via + * razor_install_prefix_iterator_create(). */ return NULL; diff -r e1b95d57dd54 -r 94d7459828ba librazor/razor.h.in --- a/librazor/razor.h.in Tue Nov 11 15:57:14 2014 +0000 +++ b/librazor/razor.h.in Thu Nov 13 10:44:53 2014 +0000 @@ -382,6 +382,14 @@ void razor_set_list_package_files(struct razor_set *set, struct razor_package *package); +struct razor_string_iterator; +struct razor_string_iterator * +razor_install_prefix_iterator_create(struct razor_set *set, + struct razor_package *package); +int razor_string_iterator_next(struct razor_string_iterator *si, + const char **string); +void razor_string_iterator_destroy(struct razor_string_iterator *si); + enum razor_diff_action { RAZOR_DIFF_ACTION_ADD, RAZOR_DIFF_ACTION_REMOVE, @@ -629,6 +637,7 @@ char *razor_concat(const char *s, ...) RAZOR_MALLOC RAZOR_NULL_TERMINATED; char *razor_path_add_root(const char *path, const char *root) RAZOR_MALLOC; +char *razor_path_from_url(const char *url) RAZOR_MALLOC; const char *razor_system_arch(void); diff -r e1b95d57dd54 -r 94d7459828ba src/main.c --- a/src/main.c Tue Nov 11 15:57:14 2014 +0000 +++ b/src/main.c Thu Nov 13 10:44:53 2014 +0000 @@ -1710,8 +1710,10 @@ struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; + struct razor_string_iterator *si; const char *pattern, *name, *version, *arch; const char *summary, *description, *url, *license; + const char *prefix; switch (razor_getopt(argc, argv, 0, NULL, "[pattern]", NULL)) { case -2: @@ -1743,6 +1745,18 @@ if (pattern && fnmatch(pattern, name, 0) != 0) continue; + printf ("Name: %s\n", name); + printf ("Arch: %s\n", arch); + printf ("Version: %s\n", version); + + si = razor_install_prefix_iterator_create(set, package); + if (razor_string_iterator_next(si, &prefix)) { + printf ("Relocations: %s\n", prefix); + while (razor_string_iterator_next(si, &prefix)) + printf (" : %s\n", prefix); + } + razor_string_iterator_destroy(si); + razor_package_get_details (set, package, RAZOR_DETAIL_SUMMARY, &summary, RAZOR_DETAIL_DESCRIPTION, &description, @@ -1750,9 +1764,6 @@ RAZOR_DETAIL_LICENSE, &license, RAZOR_DETAIL_LAST); - printf ("Name: %s\n", name); - printf ("Arch: %s\n", arch); - printf ("Version: %s\n", version); printf ("URL: %s\n", url); printf ("License: %s\n", license); printf ("Summary: %s\n", summary);