1.1 --- a/librazor/iterator.c Tue Nov 11 15:57:14 2014 +0000
1.2 +++ b/librazor/iterator.c Thu Nov 13 10:44:53 2014 +0000
1.3 @@ -317,6 +317,52 @@
1.4 free(fi);
1.5 }
1.6
1.7 +RAZOR_EXPORT struct razor_string_iterator *
1.8 +razor_install_prefix_iterator_create(struct razor_set *set,
1.9 + struct razor_package *package)
1.10 +{
1.11 + struct razor_string_iterator *si;
1.12 +
1.13 + assert (set != NULL);
1.14 + assert (package != NULL);
1.15 +
1.16 + si = zalloc(sizeof *si);
1.17 + si->set = set;
1.18 +
1.19 + si->index = list_first(&package->install_prefixes,
1.20 + &set->prefix_pool);
1.21 +
1.22 + return si;
1.23 +}
1.24 +
1.25 +RAZOR_EXPORT int
1.26 +razor_string_iterator_next(struct razor_string_iterator *si,
1.27 + const char **string)
1.28 +{
1.29 + char *pool;
1.30 + int valid;
1.31 +
1.32 + assert (si != NULL);
1.33 +
1.34 + if (si->index) {
1.35 + pool = si->set->string_pool.data;
1.36 + *string = &pool[si->index->data];
1.37 + si->index = list_next(si->index);
1.38 + valid = 1;
1.39 + } else {
1.40 + *string = NULL;
1.41 + valid = 0;
1.42 + }
1.43 +
1.44 + return valid;
1.45 +}
1.46 +
1.47 +RAZOR_EXPORT void
1.48 +razor_string_iterator_destroy(struct razor_string_iterator *si)
1.49 +{
1.50 + free(si);
1.51 +}
1.52 +
1.53 struct razor_package_query {
1.54 struct razor_set *set;
1.55 char *vector;
2.1 --- a/librazor/razor-internal.h Tue Nov 11 15:57:14 2014 +0000
2.2 +++ b/librazor/razor-internal.h Thu Nov 13 10:44:53 2014 +0000
2.3 @@ -175,6 +175,11 @@
2.4 int post_order;
2.5 };
2.6
2.7 +struct razor_string_iterator {
2.8 + struct razor_set *set;
2.9 + struct list *index;
2.10 +};
2.11 +
2.12 int
2.13 razor_set_aquire_lock(struct razor_set *set, const char *path, int exclusive);
2.14
3.1 --- a/librazor/razor.c Tue Nov 11 15:57:14 2014 +0000
3.2 +++ b/librazor/razor.c Thu Nov 13 10:44:53 2014 +0000
3.3 @@ -540,8 +540,9 @@
3.4 {
3.5 switch (type) {
3.6 case RAZOR_DETAIL_PREFIXES:
3.7 - /* We don't track prefixes in packages. Install prefixes
3.8 - * are tracked, but we don't provide an API to get them.
3.9 + /* We don't track prefixes in packages. Install
3.10 + * prefixes are tracked, and made available via
3.11 + * razor_install_prefix_iterator_create().
3.12 */
3.13 return NULL;
3.14
4.1 --- a/librazor/razor.h.in Tue Nov 11 15:57:14 2014 +0000
4.2 +++ b/librazor/razor.h.in Thu Nov 13 10:44:53 2014 +0000
4.3 @@ -382,6 +382,14 @@
4.4 void razor_set_list_package_files(struct razor_set *set,
4.5 struct razor_package *package);
4.6
4.7 +struct razor_string_iterator;
4.8 +struct razor_string_iterator *
4.9 +razor_install_prefix_iterator_create(struct razor_set *set,
4.10 + struct razor_package *package);
4.11 +int razor_string_iterator_next(struct razor_string_iterator *si,
4.12 + const char **string);
4.13 +void razor_string_iterator_destroy(struct razor_string_iterator *si);
4.14 +
4.15 enum razor_diff_action {
4.16 RAZOR_DIFF_ACTION_ADD,
4.17 RAZOR_DIFF_ACTION_REMOVE,
4.18 @@ -629,6 +637,7 @@
4.19 char *razor_concat(const char *s, ...) RAZOR_MALLOC RAZOR_NULL_TERMINATED;
4.20
4.21 char *razor_path_add_root(const char *path, const char *root) RAZOR_MALLOC;
4.22 +char *razor_path_from_url(const char *url) RAZOR_MALLOC;
4.23
4.24 const char *razor_system_arch(void);
4.25
5.1 --- a/src/main.c Tue Nov 11 15:57:14 2014 +0000
5.2 +++ b/src/main.c Thu Nov 13 10:44:53 2014 +0000
5.3 @@ -1710,8 +1710,10 @@
5.4 struct razor_set *set;
5.5 struct razor_package_iterator *pi;
5.6 struct razor_package *package;
5.7 + struct razor_string_iterator *si;
5.8 const char *pattern, *name, *version, *arch;
5.9 const char *summary, *description, *url, *license;
5.10 + const char *prefix;
5.11
5.12 switch (razor_getopt(argc, argv, 0, NULL, "[pattern]", NULL)) {
5.13 case -2:
5.14 @@ -1743,6 +1745,18 @@
5.15 if (pattern && fnmatch(pattern, name, 0) != 0)
5.16 continue;
5.17
5.18 + printf ("Name: %s\n", name);
5.19 + printf ("Arch: %s\n", arch);
5.20 + printf ("Version: %s\n", version);
5.21 +
5.22 + si = razor_install_prefix_iterator_create(set, package);
5.23 + if (razor_string_iterator_next(si, &prefix)) {
5.24 + printf ("Relocations: %s\n", prefix);
5.25 + while (razor_string_iterator_next(si, &prefix))
5.26 + printf (" : %s\n", prefix);
5.27 + }
5.28 + razor_string_iterator_destroy(si);
5.29 +
5.30 razor_package_get_details (set, package,
5.31 RAZOR_DETAIL_SUMMARY, &summary,
5.32 RAZOR_DETAIL_DESCRIPTION, &description,
5.33 @@ -1750,9 +1764,6 @@
5.34 RAZOR_DETAIL_LICENSE, &license,
5.35 RAZOR_DETAIL_LAST);
5.36
5.37 - printf ("Name: %s\n", name);
5.38 - printf ("Arch: %s\n", arch);
5.39 - printf ("Version: %s\n", version);
5.40 printf ("URL: %s\n", url);
5.41 printf ("License: %s\n", license);
5.42 printf ("Summary: %s\n", summary);