From: Kristian Høgsberg Date: Mon, 22 Oct 2007 02:41:02 +0000 (-0400) Subject: Implement listing only files in a subdirectory. X-Git-Tag: 0.1~311 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=ba90b59c193fd3a55789a57ab5fe887a2112bf3f;p=razor.git Implement listing only files in a subdirectory. --- diff --git a/main.c b/main.c index 9bc7cc4..dbbd854 100644 --- a/main.c +++ b/main.c @@ -54,7 +54,7 @@ command_list_files(int argc, const char *argv[]) set = razor_set_open(repo_filename); if (set == NULL) return 1; - razor_set_list_files(set); + razor_set_list_files(set, argv[0]); razor_set_destroy(set); return 0; diff --git a/razor.c b/razor.c index 8dfad97..9d12f92 100644 --- a/razor.c +++ b/razor.c @@ -815,6 +815,31 @@ build_file_tree(struct razor_importer *importer) array_release(&importer->files); } +static struct razor_entry * +find_entry(struct razor_set *set, struct razor_entry *dir, const char *name) +{ + struct razor_entry *e, *end; + char *pool = set->string_pool.data; + char *p, *n; + + if (name == NULL) + return dir; + + p = strchr(name + 1, '/'); + e = (struct razor_entry *) set->file_tree.data + dir->start; + end = e + dir->count; + + while (e < end) { + n = pool + e->name; + if ((p != NULL && strncmp(n, name + 1, p - (name + 1)) == 0) || + (p == NULL && strcmp(n, name + 1) == 0)) + return find_entry(set, e, p); + e++; + } + + return NULL; +} + static void list_dir(struct razor_set *set, struct razor_entry *e, int indent) { @@ -832,9 +857,14 @@ list_dir(struct razor_set *set, struct razor_entry *e, int indent) } void -razor_set_list_files(struct razor_set *set) +razor_set_list_files(struct razor_set *set, const char *prefix) { - list_dir(set, set->file_tree.data, 2); + struct razor_entry *e; + + e = find_entry(set, set->file_tree.data, prefix); + if (e == NULL) + return; + list_dir(set, e, 2); } struct razor_set * diff --git a/razor.h b/razor.h index e4b305b..553afac 100644 --- a/razor.h +++ b/razor.h @@ -18,7 +18,7 @@ void razor_set_list_requires_packages(struct razor_set *set, void razor_set_list_provides_packages(struct razor_set *set, const char *name, const char *version); -void razor_set_list_files(struct razor_set *set); +void razor_set_list_files(struct razor_set *set, const char *prefix); void razor_set_list_unsatisfied(struct razor_set *set); struct razor_set *razor_set_update(struct razor_set *set,