razor.c
changeset 49 c66fd9a1eabe
parent 48 458b03594baf
child 52 8cb4c45dc86f
     1.1 --- a/razor.c	Sun Oct 21 21:57:22 2007 -0400
     1.2 +++ b/razor.c	Sun Oct 21 22:41:14 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 *