Add razor_install_prefix_iterator_create()
authorJ. Ali Harlow <ali@juiblex.co.uk>
Thu Nov 13 10:44:53 2014 +0000 (2014-11-13)
changeset 46294d7459828ba
parent 461 e1b95d57dd54
child 463 1ca7a49838e9
Add razor_install_prefix_iterator_create()
librazor/iterator.c
librazor/razor-internal.h
librazor/razor.c
librazor/razor.h.in
src/main.c
     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);