2 * Copyright (c) 2003 by Joel Baker.
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 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the Author nor the names of any contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 /* Enumerated values for 'flag' when calling [n]ftw */
42 FTW_D, /* Directories */
43 FTW_DNR, /* Unreadable directory */
44 FTW_F, /* Regular files */
45 FTW_SL, /* Symbolic link */
46 FTW_NS, /* stat(2) failed */
48 #if __XSI_VISIBLE /* X/Open */
50 /* Flags for nftw only */
52 FTW_DP, /* Directory, subdirs visited */
53 FTW_SLN, /* Dangling symlink */
55 #endif /* __XSI_VISIBLE */
58 #if __XSI_VISIBLE /* X/Open */
60 /* Enumerated values for 'flags' when calling nftw */
63 FTW_CHDIR = 1, /* Do a chdir(2) when entering a directory */
64 FTW_DEPTH = 2, /* Report files first (before directory) */
65 FTW_MOUNT = 4, /* Single filesystem */
66 FTW_PHYS = 8 /* Physical walk; ignore symlinks */
69 #define FTW_PHYS FTW_PHYS
70 #define FTW_MOUNT FTW_MOUNT
71 #define FTW_CHDIR FTW_CHDIR
72 #define FTW_DEPTH FTW_DEPTH
74 /* FTW struct for callbacks from nftw */
81 #endif /* __XSI_VISIBLE */
83 /* Typecasts for callback functions */
85 typedef int (*__ftw_func_t) \
86 (const char *file, const struct stat *status, int flag);
88 /* ftw: walk a directory tree, calling a function for each element */
90 extern int ftw (const char *dir, __ftw_func_t func, int descr);
92 #if __XSI_VISIBLE /* X/Open */
94 typedef int (*__nftw_func_t) \
95 (const char *file, const struct stat *status, int flag, struct FTW *detail);
97 /* nftw: walk a directory tree, calling a function for each element; much
98 * like ftw, but with behavior flags and minty freshness.
101 extern int nftw (const char *dir, __nftw_func_t func, int descr, int flags);
103 #endif /* __XSI_VISIBLE */