ftw.h revision 131661
1/*
2 * Copyright (c) 2003 by Joel Baker.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
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.
16 *
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
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD: head/include/ftw.h 131661 2004-07-05 23:13:16Z das $
30 */
31
32#ifndef _FTW_H
33#define _FTW_H
34
35#include <sys/stat.h>
36
37__BEGIN_DECLS
38
39/* Enumerated values for 'flag' when calling [n]ftw */
40
41enum {
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 */
47
48#if __XSI_VISIBLE /* X/Open */
49
50/* Flags for nftw only */
51
52    FTW_DP, /* Directory, subdirs visited */
53    FTW_SLN, /* Dangling symlink */
54
55#endif /* __XSI_VISIBLE */
56};
57
58#if __XSI_VISIBLE /* X/Open */
59
60/* Enumerated values for 'flags' when calling nftw */
61
62enum {
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 */
67};
68
69#define FTW_PHYS FTW_PHYS
70#define FTW_MOUNT FTW_MOUNT
71#define FTW_CHDIR FTW_CHDIR
72#define FTW_DEPTH FTW_DEPTH
73
74/* FTW struct for callbacks from nftw */
75
76struct FTW {
77    int base;
78    int level;
79};
80
81#endif /* __XSI_VISIBLE */
82
83/* Typecasts for callback functions */
84
85typedef int (*__ftw_func_t) \
86    (const char *file, const struct stat *status, int flag);
87
88/* ftw: walk a directory tree, calling a function for each element */
89
90extern int ftw (const char *dir, __ftw_func_t func, int descr);
91
92#if __XSI_VISIBLE /* X/Open */
93
94typedef int (*__nftw_func_t) \
95    (const char *file, const struct stat *status, int flag, struct FTW *detail);
96
97/* nftw: walk a directory tree, calling a function for each element; much
98 * like ftw, but with behavior flags and minty freshness.
99 */
100
101extern int nftw (const char *dir, __nftw_func_t func, int descr, int flags);
102
103#endif /* __XSI_VISIBLE */
104
105__END_DECLS
106
107#endif /* _FTW_H */
108