2
* Copyright (c) 2003-2004 Tim Kientzle
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer
10
* in this position and unchanged.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
15
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
* A set of routines for traversing directory trees.
29
* Similar in concept to the fts library, but with a few
30
* important differences:
31
* * Uses less memory. In particular, fts stores an entire directory
32
* in memory at a time. This package only keeps enough subdirectory
33
* information in memory to track the traversal. Information
34
* about non-directories is discarded as soon as possible.
35
* * Supports very deep logical traversals. The fts package
36
* uses "non-chdir" approach for logical traversals. This
37
* package does use a chdir approach for logical traversals
38
* and can therefore handle pathnames much longer than
40
* * Supports deep physical traversals "out of the box."
41
* Due to the memory optimizations above, there's no need to
42
* limit dir names to 32k.
49
struct tree *tree_open(const char *);
50
/* Returns TRUE if there is a next entry. Zero if there is no next entry. */
51
int tree_next(struct tree *);
52
/* Return information about the current entry. */
53
int tree_current_depth(struct tree *);
55
* The current full pathname, length of the full pathname,
56
* and a name that can be used to access the file.
57
* Because tree does use chdir extensively, the access path is
58
* almost never the same as the full current path.
60
const char *tree_current_path(struct tree *);
61
size_t tree_current_pathlen(struct tree *);
62
const char *tree_current_access_path(struct tree *);
64
* Request the lstat() or stat() data for the current path.
65
* Since the tree package needs to do some of this anyway,
66
* you should take advantage of it here if you need it.
68
const struct stat *tree_current_stat(struct tree *);
69
const struct stat *tree_current_lstat(struct tree *);
71
* Request that current entry be visited. If you invoke it on every
72
* directory, you'll get a physical traversal. This is ignored if the
73
* current entry isn't a directory or a link to a directory. So, if
74
* you invoke this on every returned path, you'll get a full logical
77
void tree_descend(struct tree *);
78
void tree_close(struct tree *);