From: J. Ali Harlow Date: Thu, 13 Nov 2014 10:44:53 +0000 (+0000) Subject: Add razor_install_prefix_iterator_create() X-Git-Tag: 0.6~1 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=145b1fd47c760d56513bb8e7d69f4b339ba42701;p=razor.git Add razor_install_prefix_iterator_create() --- diff --git a/librazor/iterator.c b/librazor/iterator.c index 060467f..e86eb0b 100644 --- a/librazor/iterator.c +++ b/librazor/iterator.c @@ -317,6 +317,52 @@ RAZOR_EXPORT void razor_file_iterator_destroy(struct razor_file_iterator *fi) 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 --git a/librazor/razor-internal.h b/librazor/razor-internal.h index e9fff68..64f6622 100644 --- a/librazor/razor-internal.h +++ b/librazor/razor-internal.h @@ -175,6 +175,11 @@ struct razor_file_iterator { 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 --git a/librazor/razor.c b/librazor/razor.c index 60cd2cf..f292d04 100644 --- a/librazor/razor.c +++ b/librazor/razor.c @@ -540,8 +540,9 @@ razor_package_get_details_array(struct razor_set *set, { 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 --git a/librazor/razor.h.in b/librazor/razor.h.in index fd1a777..4909bb2 100644 --- a/librazor/razor.h.in +++ b/librazor/razor.h.in @@ -382,6 +382,14 @@ void razor_set_list_files(struct razor_set *set, const char *prefix); 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 @@ void (*razor_get_lua_loader(const char *modname))(); 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 --git a/src/main.c b/src/main.c index 5598cfc..8df104d 100644 --- a/src/main.c +++ b/src/main.c @@ -1710,8 +1710,10 @@ command_info(int argc, char * const argv[]) 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 @@ command_info(int argc, char * const argv[]) 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 @@ command_info(int argc, char * const argv[]) 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);