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