00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "config.h"
00033
00034 #if !defined(HAVE_FTS_OPEN)
00035
00036 #ifndef _FTS_H
00037 #define _FTS_H 1
00038
00039
00040 #if defined(__GLIBC__)
00041 #include <features.h>
00042 #else
00043
00044 # define __THROW
00045 #ifdef __cplusplus
00046 # define __BEGIN_DECLS extern "C" {
00047 # define __END_DECLS }
00048 #else
00049 # define __BEGIN_DECLS
00050 # define __END_DECLS
00051 #endif
00052
00053 #if defined(hpux)
00054 # define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
00055 # define _INCLUDE_POSIX_SOURCE
00056 # define _LARGEFILE64_SOURCE
00057 #endif
00058
00059
00060 #if defined(__SVR4)
00061 # define _D_EXACT_NAMLEN(d) (strlen((d)->d_name))
00062 # ifndef _INCLUDE_POSIX_SOURCE
00063 # define _INCLUDE_POSIX_SOURCE
00064 # endif
00065 # ifndef _LARGEFILE64_SOURCE
00066 # define _LARGEFILE64_SOURCE
00067 # endif
00068 #endif
00069
00070 #endif
00071
00072 #include <sys/types.h>
00073 #include <sys/stat.h>
00074 #include <dirent.h>
00075
00076
00077
00078
00079 #ifdef __USE_FILE_OFFSET64
00080 # error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64"
00081 #endif
00082
00083
00084 typedef struct {
00085
00086 struct _ftsent *fts_cur;
00087
00088 struct _ftsent *fts_child;
00089
00090 struct _ftsent **fts_array;
00091 dev_t fts_dev;
00092
00093 char *fts_path;
00094 int fts_rfd;
00095 int fts_pathlen;
00096 int fts_nitems;
00097
00098 int (*fts_compar) (const void *, const void *)
00099 ;
00101 DIR * (*fts_opendir) (const char * path)
00102
00103 ;
00104 struct dirent * (*fts_readdir) (DIR * dir)
00105
00106 ;
00107 int (*fts_closedir) ( DIR * dir)
00108
00109 ;
00110 int (*fts_stat) (const char * path, struct stat * st)
00111
00112 ;
00113 int (*fts_lstat) (const char * path, struct stat * st)
00114
00115 ;
00116
00117 #define FTS_COMFOLLOW 0x0001
00118 #define FTS_LOGICAL 0x0002
00119 #define FTS_NOCHDIR 0x0004
00120 #define FTS_NOSTAT 0x0008
00121 #define FTS_PHYSICAL 0x0010
00122 #define FTS_SEEDOT 0x0020
00123 #define FTS_XDEV 0x0040
00124 #define FTS_WHITEOUT 0x0080
00125 #define FTS_OPTIONMASK 0x00ff
00127 #define FTS_NAMEONLY 0x0100
00128 #define FTS_STOP 0x0200
00129 int fts_options;
00130 } FTS;
00131
00132 typedef struct _ftsent {
00133
00134 struct _ftsent *fts_cycle;
00135
00136 struct _ftsent *fts_parent;
00137
00138 struct _ftsent *fts_link;
00139 long fts_number;
00140 void *fts_pointer;
00141
00142 char *fts_accpath;
00143
00144 char *fts_path;
00145 int fts_errno;
00146 int fts_symfd;
00147 u_short fts_pathlen;
00148 u_short fts_namelen;
00150 ino_t fts_ino;
00151 dev_t fts_dev;
00152 nlink_t fts_nlink;
00154 #define FTS_ROOTPARENTLEVEL -1
00155 #define FTS_ROOTLEVEL 0
00156 short fts_level;
00158 #define FTS_D 1
00159 #define FTS_DC 2
00160 #define FTS_DEFAULT 3
00161 #define FTS_DNR 4
00162 #define FTS_DOT 5
00163 #define FTS_DP 6
00164 #define FTS_ERR 7
00165 #define FTS_F 8
00166 #define FTS_INIT 9
00167 #define FTS_NS 10
00168 #define FTS_NSOK 11
00169 #define FTS_SL 12
00170 #define FTS_SLNONE 13
00171 #define FTS_W 14
00172 u_short fts_info;
00174 #define FTS_DONTCHDIR 0x01
00175 #define FTS_SYMFOLLOW 0x02
00176 u_short fts_flags;
00178 #define FTS_AGAIN 1
00179 #define FTS_FOLLOW 2
00180 #define FTS_NOINSTR 3
00181 #define FTS_SKIP 4
00182 u_short fts_instr;
00184
00185 struct stat *fts_statp;
00186 char fts_name[1];
00187 } FTSENT;
00188
00189 __BEGIN_DECLS
00190
00191 extern int dirfd (DIR * dirp);
00192
00199
00200 FTSENT *fts_children (FTS * sp, int instr) __THROW
00201
00202 ;
00203
00209
00210 int fts_close ( FTS * sp) __THROW
00211
00212 ;
00213
00221
00222 FTS *fts_open (char * const * argv, int options,
00223
00224 int (*compar) (const FTSENT **, const FTSENT **)) __THROW
00225 ;
00226
00232
00233 FTSENT *fts_read (FTS * sp) __THROW
00234
00235 ;
00236
00244
00245 int fts_set (FTS * sp, FTSENT * p, int instr) __THROW
00246 ;
00247
00248 __END_DECLS
00249
00250 #endif
00251
00252 #endif