Add razor_install_prefix_iterator_create()
authorJ. Ali Harlow <ali@juiblex.co.uk>
Thu, 13 Nov 2014 10:44:53 +0000 (10:44 +0000)
committerJ. Ali Harlow <ali@juiblex.co.uk>
Thu, 13 Nov 2014 10:44:53 +0000 (10:44 +0000)
librazor/iterator.c
librazor/razor-internal.h
librazor/razor.c
librazor/razor.h.in
src/main.c

index 060467f..e86eb0b 100644 (file)
@@ -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;
index e9fff68..64f6622 100644 (file)
@@ -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);
 
index 60cd2cf..f292d04 100644 (file)
@@ -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;
 
index fd1a777..4909bb2 100644 (file)
@@ -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);
 
index 5598cfc..8df104d 100644 (file)
@@ -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);