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 #ifndef _FTS_H
00033 #define _FTS_H 1
00034
00035 #if defined(__GLIBC__)
00036 #include <features.h>
00037 #else
00038
00039 # define __THROW
00040 #ifdef __cplusplus
00041 # define __BEGIN_DECLS extern "C" {
00042 # define __END_DECLS }
00043 #else
00044 # define __BEGIN_DECLS
00045 # define __END_DECLS
00046 #endif
00047
00048 #if defined(hpux)
00049 # define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
00050 # define _INCLUDE_POSIX_SOURCE
00051 # define _LARGEFILE64_SOURCE
00052 #endif
00053
00054 #endif
00055
00056 #include <sys/types.h>
00057 #include <sys/stat.h>
00058 #include <dirent.h>
00059
00060
00061
00062
00063 #ifdef __USE_FILE_OFFSET64
00064 # error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64"
00065 #endif
00066
00067
00068 typedef struct {
00069
00070 struct _ftsent *fts_cur;
00071
00072 struct _ftsent *fts_child;
00073
00074 struct _ftsent **fts_array;
00075 dev_t fts_dev;
00076
00077 char *fts_path;
00078 int fts_rfd;
00079 int fts_pathlen;
00080 int fts_nitems;
00081
00082 int (*fts_compar) (const void *, const void *)
00083 ;
00085 DIR * (*fts_opendir) (const char * path)
00086
00087 ;
00088 struct dirent * (*fts_readdir) (DIR * dir)
00089
00090 ;
00091 int (*fts_closedir) ( DIR * dir)
00092
00093 ;
00094 int (*fts_stat) (const char * path, struct stat * st)
00095
00096 ;
00097 int (*fts_lstat) (const char * path, struct stat * st)
00098
00099 ;
00100
00101 #define FTS_COMFOLLOW 0x0001
00102 #define FTS_LOGICAL 0x0002
00103 #define FTS_NOCHDIR 0x0004
00104 #define FTS_NOSTAT 0x0008
00105 #define FTS_PHYSICAL 0x0010
00106 #define FTS_SEEDOT 0x0020
00107 #define FTS_XDEV 0x0040
00108 #define FTS_WHITEOUT 0x0080
00109 #define FTS_OPTIONMASK 0x00ff
00111 #define FTS_NAMEONLY 0x0100
00112 #define FTS_STOP 0x0200
00113 int fts_options;
00114 } FTS;
00115
00116 typedef struct _ftsent {
00117
00118 struct _ftsent *fts_cycle;
00119
00120 struct _ftsent *fts_parent;
00121
00122 struct _ftsent *fts_link;
00123 long fts_number;
00124 void *fts_pointer;
00125
00126 char *fts_accpath;
00127
00128 char *fts_path;
00129 int fts_errno;
00130 int fts_symfd;
00131 u_short fts_pathlen;
00132 u_short fts_namelen;
00134 ino_t fts_ino;
00135 dev_t fts_dev;
00136 nlink_t fts_nlink;
00138 #define FTS_ROOTPARENTLEVEL -1
00139 #define FTS_ROOTLEVEL 0
00140 short fts_level;
00142 #define FTS_D 1
00143 #define FTS_DC 2
00144 #define FTS_DEFAULT 3
00145 #define FTS_DNR 4
00146 #define FTS_DOT 5
00147 #define FTS_DP 6
00148 #define FTS_ERR 7
00149 #define FTS_F 8
00150 #define FTS_INIT 9
00151 #define FTS_NS 10
00152 #define FTS_NSOK 11
00153 #define FTS_SL 12
00154 #define FTS_SLNONE 13
00155 #define FTS_W 14
00156 u_short fts_info;
00158 #define FTS_DONTCHDIR 0x01
00159 #define FTS_SYMFOLLOW 0x02
00160 u_short fts_flags;
00162 #define FTS_AGAIN 1
00163 #define FTS_FOLLOW 2
00164 #define FTS_NOINSTR 3
00165 #define FTS_SKIP 4
00166 u_short fts_instr;
00168
00169 struct stat *fts_statp;
00170 char fts_name[1];
00171 } FTSENT;
00172
00173 __BEGIN_DECLS
00174
00181
00182 FTSENT *Fts_children (FTS * sp, int instr) __THROW
00183
00184 ;
00185
00191
00192 int Fts_close ( FTS * sp) __THROW
00193
00194 ;
00195
00203
00204 FTS *Fts_open (char * const * argv, int options,
00205
00206 int (*compar) (const FTSENT **, const FTSENT **)) __THROW
00207 ;
00208
00214
00215 FTSENT *Fts_read (FTS * sp) __THROW
00216
00217 ;
00218
00226
00227 int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW
00228 ;
00229
00230 __END_DECLS
00231
00232 #endif