1*53ee8cc1Swenshuai.xi /* Copyright (C) 1992,1996-1999,2003,2004 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 5*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 6*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 7*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 10*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 11*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 15*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 16*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi /* 20*53ee8cc1Swenshuai.xi * X/Open Portability Guide 4.2: ftw.h 21*53ee8cc1Swenshuai.xi */ 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi #ifndef _FTW_H 24*53ee8cc1Swenshuai.xi #define _FTW_H 1 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi #include <features.h> 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi #include <sys/types.h> 29*53ee8cc1Swenshuai.xi #include <sys/stat.h> 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi 32*53ee8cc1Swenshuai.xi __BEGIN_DECLS 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi /* Values for the FLAG argument to the user function passed to `ftw' 35*53ee8cc1Swenshuai.xi and 'nftw'. */ 36*53ee8cc1Swenshuai.xi enum 37*53ee8cc1Swenshuai.xi { 38*53ee8cc1Swenshuai.xi FTW_F, /* Regular file. */ 39*53ee8cc1Swenshuai.xi #define FTW_F FTW_F 40*53ee8cc1Swenshuai.xi FTW_D, /* Directory. */ 41*53ee8cc1Swenshuai.xi #define FTW_D FTW_D 42*53ee8cc1Swenshuai.xi FTW_DNR, /* Unreadable directory. */ 43*53ee8cc1Swenshuai.xi #define FTW_DNR FTW_DNR 44*53ee8cc1Swenshuai.xi FTW_NS, /* Unstatable file. */ 45*53ee8cc1Swenshuai.xi #define FTW_NS FTW_NS 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 48*53ee8cc1Swenshuai.xi 49*53ee8cc1Swenshuai.xi FTW_SL, /* Symbolic link. */ 50*53ee8cc1Swenshuai.xi # define FTW_SL FTW_SL 51*53ee8cc1Swenshuai.xi #endif 52*53ee8cc1Swenshuai.xi 53*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 54*53ee8cc1Swenshuai.xi /* These flags are only passed from the `nftw' function. */ 55*53ee8cc1Swenshuai.xi FTW_DP, /* Directory, all subdirs have been visited. */ 56*53ee8cc1Swenshuai.xi # define FTW_DP FTW_DP 57*53ee8cc1Swenshuai.xi FTW_SLN /* Symbolic link naming non-existing file. */ 58*53ee8cc1Swenshuai.xi # define FTW_SLN FTW_SLN 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi #endif /* extended X/Open */ 61*53ee8cc1Swenshuai.xi }; 62*53ee8cc1Swenshuai.xi 63*53ee8cc1Swenshuai.xi 64*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 65*53ee8cc1Swenshuai.xi /* Flags for fourth argument of `nftw'. */ 66*53ee8cc1Swenshuai.xi enum 67*53ee8cc1Swenshuai.xi { 68*53ee8cc1Swenshuai.xi FTW_PHYS = 1, /* Perform physical walk, ignore symlinks. */ 69*53ee8cc1Swenshuai.xi # define FTW_PHYS FTW_PHYS 70*53ee8cc1Swenshuai.xi FTW_MOUNT = 2, /* Report only files on same file system as the 71*53ee8cc1Swenshuai.xi argument. */ 72*53ee8cc1Swenshuai.xi # define FTW_MOUNT FTW_MOUNT 73*53ee8cc1Swenshuai.xi FTW_CHDIR = 4, /* Change to current directory while processing it. */ 74*53ee8cc1Swenshuai.xi # define FTW_CHDIR FTW_CHDIR 75*53ee8cc1Swenshuai.xi FTW_DEPTH = 8 /* Report files in directory before directory itself.*/ 76*53ee8cc1Swenshuai.xi # define FTW_DEPTH FTW_DEPTH 77*53ee8cc1Swenshuai.xi # ifdef __USE_GNU 78*53ee8cc1Swenshuai.xi , 79*53ee8cc1Swenshuai.xi FTW_ACTIONRETVAL = 16 /* Assume callback to return FTW_* values instead of 80*53ee8cc1Swenshuai.xi zero to continue and non-zero to terminate. */ 81*53ee8cc1Swenshuai.xi # define FTW_ACTIONRETVAL FTW_ACTIONRETVAL 82*53ee8cc1Swenshuai.xi # endif 83*53ee8cc1Swenshuai.xi }; 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 86*53ee8cc1Swenshuai.xi /* Return values from callback functions. */ 87*53ee8cc1Swenshuai.xi enum 88*53ee8cc1Swenshuai.xi { 89*53ee8cc1Swenshuai.xi FTW_CONTINUE = 0, /* Continue with next sibling or for FTW_D with the 90*53ee8cc1Swenshuai.xi first child. */ 91*53ee8cc1Swenshuai.xi # define FTW_CONTINUE FTW_CONTINUE 92*53ee8cc1Swenshuai.xi FTW_STOP = 1, /* Return from `ftw' or `nftw' with FTW_STOP as return 93*53ee8cc1Swenshuai.xi value. */ 94*53ee8cc1Swenshuai.xi # define FTW_STOP FTW_STOP 95*53ee8cc1Swenshuai.xi FTW_SKIP_SUBTREE = 2, /* Only meaningful for FTW_D: Don't walk through the 96*53ee8cc1Swenshuai.xi subtree, instead just continue with its next 97*53ee8cc1Swenshuai.xi sibling. */ 98*53ee8cc1Swenshuai.xi # define FTW_SKIP_SUBTREE FTW_SKIP_SUBTREE 99*53ee8cc1Swenshuai.xi FTW_SKIP_SIBLINGS = 3,/* Continue with FTW_DP callback for current directory 100*53ee8cc1Swenshuai.xi (if FTW_DEPTH) and then its siblings. */ 101*53ee8cc1Swenshuai.xi # define FTW_SKIP_SIBLINGS FTW_SKIP_SIBLINGS 102*53ee8cc1Swenshuai.xi }; 103*53ee8cc1Swenshuai.xi #endif 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi /* Structure used for fourth argument to callback function for `nftw'. */ 106*53ee8cc1Swenshuai.xi struct FTW 107*53ee8cc1Swenshuai.xi { 108*53ee8cc1Swenshuai.xi int base; 109*53ee8cc1Swenshuai.xi int level; 110*53ee8cc1Swenshuai.xi }; 111*53ee8cc1Swenshuai.xi #endif /* extended X/Open */ 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi /* Convenient types for callback functions. */ 115*53ee8cc1Swenshuai.xi typedef int (*__ftw_func_t) (__const char *__filename, 116*53ee8cc1Swenshuai.xi __const struct stat *__status, int __flag); 117*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64 118*53ee8cc1Swenshuai.xi typedef int (*__ftw64_func_t) (__const char *__filename, 119*53ee8cc1Swenshuai.xi __const struct stat64 *__status, int __flag); 120*53ee8cc1Swenshuai.xi #endif 121*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 122*53ee8cc1Swenshuai.xi typedef int (*__nftw_func_t) (__const char *__filename, 123*53ee8cc1Swenshuai.xi __const struct stat *__status, int __flag, 124*53ee8cc1Swenshuai.xi struct FTW *__info); 125*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64 126*53ee8cc1Swenshuai.xi typedef int (*__nftw64_func_t) (__const char *__filename, 127*53ee8cc1Swenshuai.xi __const struct stat64 *__status, 128*53ee8cc1Swenshuai.xi int __flag, struct FTW *__info); 129*53ee8cc1Swenshuai.xi # endif 130*53ee8cc1Swenshuai.xi #endif 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi /* Call a function on every element in a directory tree. 133*53ee8cc1Swenshuai.xi 134*53ee8cc1Swenshuai.xi This function is a possible cancellation point and therefore not 135*53ee8cc1Swenshuai.xi marked with __THROW. */ 136*53ee8cc1Swenshuai.xi #ifndef __USE_FILE_OFFSET64 137*53ee8cc1Swenshuai.xi extern int ftw (__const char *__dir, __ftw_func_t __func, int __descriptors) 138*53ee8cc1Swenshuai.xi __nonnull ((1, 2)); 139*53ee8cc1Swenshuai.xi #else 140*53ee8cc1Swenshuai.xi # ifdef __REDIRECT 141*53ee8cc1Swenshuai.xi extern int __REDIRECT (ftw, (__const char *__dir, __ftw_func_t __func, 142*53ee8cc1Swenshuai.xi int __descriptors), ftw64) __nonnull ((1, 2)); 143*53ee8cc1Swenshuai.xi # else 144*53ee8cc1Swenshuai.xi # define ftw ftw64 145*53ee8cc1Swenshuai.xi # endif 146*53ee8cc1Swenshuai.xi #endif 147*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64 148*53ee8cc1Swenshuai.xi extern int ftw64 (__const char *__dir, __ftw64_func_t __func, 149*53ee8cc1Swenshuai.xi int __descriptors) __nonnull ((1, 2)); 150*53ee8cc1Swenshuai.xi #endif 151*53ee8cc1Swenshuai.xi 152*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 153*53ee8cc1Swenshuai.xi /* Call a function on every element in a directory tree. FLAG allows 154*53ee8cc1Swenshuai.xi to specify the behaviour more detailed. 155*53ee8cc1Swenshuai.xi 156*53ee8cc1Swenshuai.xi This function is a possible cancellation point and therefore not 157*53ee8cc1Swenshuai.xi marked with __THROW. */ 158*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64 159*53ee8cc1Swenshuai.xi extern int nftw (__const char *__dir, __nftw_func_t __func, int __descriptors, 160*53ee8cc1Swenshuai.xi int __flag) __nonnull ((1, 2)); 161*53ee8cc1Swenshuai.xi # else 162*53ee8cc1Swenshuai.xi # ifdef __REDIRECT 163*53ee8cc1Swenshuai.xi extern int __REDIRECT (nftw, (__const char *__dir, __nftw_func_t __func, 164*53ee8cc1Swenshuai.xi int __descriptors, int __flag), nftw64) 165*53ee8cc1Swenshuai.xi __nonnull ((1, 2)); 166*53ee8cc1Swenshuai.xi # else 167*53ee8cc1Swenshuai.xi # define nftw nftw64 168*53ee8cc1Swenshuai.xi # endif 169*53ee8cc1Swenshuai.xi # endif 170*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64 171*53ee8cc1Swenshuai.xi extern int nftw64 (__const char *__dir, __nftw64_func_t __func, 172*53ee8cc1Swenshuai.xi int __descriptors, int __flag) __nonnull ((1, 2)); 173*53ee8cc1Swenshuai.xi # endif 174*53ee8cc1Swenshuai.xi #endif 175*53ee8cc1Swenshuai.xi 176*53ee8cc1Swenshuai.xi __END_DECLS 177*53ee8cc1Swenshuai.xi 178*53ee8cc1Swenshuai.xi #endif /* ftw.h */ 179