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$ 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 41 enum { 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 62 enum { 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 76 struct FTW { 77 int base; 78 int level; 79 }; 80 81 #endif /* __XSI_VISIBLE */ 82 83 /* Typecasts for callback functions */ 84 85 typedef 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 90 extern int ftw (const char *dir, __ftw_func_t func, int descr); 91 92 #if __XSI_VISIBLE /* X/Open */ 93 94 typedef 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 101 extern 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