Implement listing only files in a subdirectory.
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,