Implement listing only files in a subdirectory.
authorKristian H?gsberg <krh@redhat.com>
Sun Oct 21 22:41:14 2007 -0400 (2007-10-21)
changeset 49c66fd9a1eabe
parent 48 458b03594baf
child 50 3ec35baa30c9
Implement listing only files in a subdirectory.
main.c
razor.c
razor.h
     1.1 --- a/main.c	Sun Oct 21 21:57:22 2007 -0400
     1.2 +++ b/main.c	Sun Oct 21 22:41:14 2007 -0400
     1.3 @@ -54,7 +54,7 @@
     1.4  	set = razor_set_open(repo_filename);
     1.5  	if (set == NULL)
     1.6  		return 1;
     1.7 -	razor_set_list_files(set);
     1.8 +	razor_set_list_files(set, argv[0]);
     1.9  	razor_set_destroy(set);
    1.10  
    1.11  	return 0;
     2.1 --- a/razor.c	Sun Oct 21 21:57:22 2007 -0400
     2.2 +++ b/razor.c	Sun Oct 21 22:41:14 2007 -0400
     2.3 @@ -815,6 +815,31 @@
     2.4  	array_release(&importer->files);
     2.5  }
     2.6  
     2.7 +static struct razor_entry *
     2.8 +find_entry(struct razor_set *set, struct razor_entry *dir, const char *name)
     2.9 +{
    2.10 +	struct razor_entry *e, *end;
    2.11 +	char *pool = set->string_pool.data;
    2.12 +	char *p, *n;
    2.13 +
    2.14 +	if (name == NULL)
    2.15 +		return dir;
    2.16 +
    2.17 +	p = strchr(name + 1, '/');
    2.18 +	e = (struct razor_entry *) set->file_tree.data + dir->start;
    2.19 +	end = e + dir->count;
    2.20 +
    2.21 +	while (e < end) {
    2.22 +		n = pool + e->name;
    2.23 +		if ((p != NULL && strncmp(n, name + 1, p - (name + 1)) == 0) ||
    2.24 +		    (p == NULL && strcmp(n, name + 1) == 0))
    2.25 +			return find_entry(set, e, p);
    2.26 +		e++;
    2.27 +	}
    2.28 +
    2.29 +	return NULL;
    2.30 +}
    2.31 +
    2.32  static void
    2.33  list_dir(struct razor_set *set, struct razor_entry *e, int indent)
    2.34  {
    2.35 @@ -832,9 +857,14 @@
    2.36  }
    2.37  
    2.38  void
    2.39 -razor_set_list_files(struct razor_set *set)
    2.40 +razor_set_list_files(struct razor_set *set, const char *prefix)
    2.41  {
    2.42 -	list_dir(set, set->file_tree.data, 2);
    2.43 +	struct razor_entry *e;
    2.44 +
    2.45 +	e = find_entry(set, set->file_tree.data, prefix);
    2.46 +	if (e == NULL)
    2.47 +		return;
    2.48 +	list_dir(set, e, 2);
    2.49  }
    2.50  
    2.51  struct razor_set *
     3.1 --- a/razor.h	Sun Oct 21 21:57:22 2007 -0400
     3.2 +++ b/razor.h	Sun Oct 21 22:41:14 2007 -0400
     3.3 @@ -18,7 +18,7 @@
     3.4  void razor_set_list_provides_packages(struct razor_set *set,
     3.5  				      const char *name,
     3.6  				      const char *version);
     3.7 -void razor_set_list_files(struct razor_set *set);
     3.8 +void razor_set_list_files(struct razor_set *set, const char *prefix);
     3.9  
    3.10  void razor_set_list_unsatisfied(struct razor_set *set);
    3.11  struct razor_set *razor_set_update(struct razor_set *set,