1.1 --- a/razor.c Sun Oct 21 21:57:22 2007 -0400
1.2 +++ b/razor.c Mon Oct 22 20:41:54 2007 -0400
1.3 @@ -815,6 +815,31 @@
1.4 array_release(&importer->files);
1.5 }
1.6
1.7 +static struct razor_entry *
1.8 +find_entry(struct razor_set *set, struct razor_entry *dir, const char *name)
1.9 +{
1.10 + struct razor_entry *e, *end;
1.11 + char *pool = set->string_pool.data;
1.12 + char *p, *n;
1.13 +
1.14 + if (name == NULL)
1.15 + return dir;
1.16 +
1.17 + p = strchr(name + 1, '/');
1.18 + e = (struct razor_entry *) set->file_tree.data + dir->start;
1.19 + end = e + dir->count;
1.20 +
1.21 + while (e < end) {
1.22 + n = pool + e->name;
1.23 + if ((p != NULL && strncmp(n, name + 1, p - (name + 1)) == 0) ||
1.24 + (p == NULL && strcmp(n, name + 1) == 0))
1.25 + return find_entry(set, e, p);
1.26 + e++;
1.27 + }
1.28 +
1.29 + return NULL;
1.30 +}
1.31 +
1.32 static void
1.33 list_dir(struct razor_set *set, struct razor_entry *e, int indent)
1.34 {
1.35 @@ -832,9 +857,14 @@
1.36 }
1.37
1.38 void
1.39 -razor_set_list_files(struct razor_set *set)
1.40 +razor_set_list_files(struct razor_set *set, const char *prefix)
1.41 {
1.42 - list_dir(set, set->file_tree.data, 2);
1.43 + struct razor_entry *e;
1.44 +
1.45 + e = find_entry(set, set->file_tree.data, prefix);
1.46 + if (e == NULL)
1.47 + return;
1.48 + list_dir(set, e, 2);
1.49 }
1.50
1.51 struct razor_set *