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 #if defined(sun)
00055 # define _D_EXACT_NAMLEN(d) ((d)->d_reclen)
00056 #endif
00057
00058 #endif
00059
00060 #include <sys/types.h>
00061 #include <sys/stat.h>
00062 #include <dirent.h>
00063
00064 typedef struct {
00065
00066 struct _ftsent *fts_cur;
00067
00068 struct _ftsent *fts_child;
00069
00070 struct _ftsent **fts_array;
00071 dev_t fts_dev;
00072
00073 char *fts_path;
00074 int fts_rfd;
00075 int fts_pathlen;
00076 int fts_nitems;
00077
00078 int (*fts_compar) (const void *, const void *)
00079 ;
00081 DIR * (*fts_opendir) (const char * path)
00082
00083 ;
00084 struct dirent * (*fts_readdir) (DIR * dir)
00085
00086 ;
00087 int (*fts_closedir) ( DIR * dir)
00088
00089 ;
00090 int (*fts_stat) (const char * path, struct stat * st)
00091
00092 ;
00093 int (*fts_lstat) (const char * path, struct stat * st)
00094
00095 ;
00096
00097 #define FTS_COMFOLLOW 0x0001
00098 #define FTS_LOGICAL 0x0002
00099 #define FTS_NOCHDIR 0x0004
00100 #define FTS_NOSTAT 0x0008
00101 #define FTS_PHYSICAL 0x0010
00102 #define FTS_SEEDOT 0x0020
00103 #define FTS_XDEV 0x0040
00104 #define FTS_WHITEOUT 0x0080
00105 #define FTS_OPTIONMASK 0x00ff
00107 #define FTS_NAMEONLY 0x0100
00108 #define FTS_STOP 0x0200
00109 int fts_options;
00110 } FTS;
00111
00112 typedef struct _ftsent {
00113
00114 struct _ftsent *fts_cycle;
00115
00116 struct _ftsent *fts_parent;
00117
00118 struct _ftsent *fts_link;
00119 long fts_number;
00120 void *fts_pointer;
00121
00122 char *fts_accpath;
00123
00124 char *fts_path;
00125 int fts_errno;
00126 int fts_symfd;
00127 u_short fts_pathlen;
00128 u_short fts_namelen;
00130 ino_t fts_ino;
00131 dev_t fts_dev;
00132 nlink_t fts_nlink;
00134 #define FTS_ROOTPARENTLEVEL -1
00135 #define FTS_ROOTLEVEL 0
00136 short fts_level;
00138 #define FTS_D 1
00139 #define FTS_DC 2
00140 #define FTS_DEFAULT 3
00141 #define FTS_DNR 4
00142 #define FTS_DOT 5
00143 #define FTS_DP 6
00144 #define FTS_ERR 7
00145 #define FTS_F 8
00146 #define FTS_INIT 9
00147 #define FTS_NS 10
00148 #define FTS_NSOK 11
00149 #define FTS_SL 12
00150 #define FTS_SLNONE 13
00151 #define FTS_W 14
00152 u_short fts_info;
00154 #define FTS_DONTCHDIR 0x01
00155 #define FTS_SYMFOLLOW 0x02
00156 u_short fts_flags;
00158 #define FTS_AGAIN 1
00159 #define FTS_FOLLOW 2
00160 #define FTS_NOINSTR 3
00161 #define FTS_SKIP 4
00162 u_short fts_instr;
00164
00165 struct stat *fts_statp;
00166 char fts_name[1];
00167 } FTSENT;
00168
00169 __BEGIN_DECLS
00170
00177
00178 FTSENT *Fts_children (FTS * sp, int instr) __THROW
00179
00180 ;
00181
00187
00188 int Fts_close ( FTS * sp) __THROW
00189
00190 ;
00191
00199
00200 FTS *Fts_open (char * const * argv, int options,
00201
00202 int (*compar) (const FTSENT **, const FTSENT **)) __THROW
00203 ;
00204
00210
00211 FTSENT *Fts_read (FTS * sp) __THROW
00212
00213 ;
00214
00222
00223 int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW
00224 ;
00225
00226 __END_DECLS
00227
00228 #endif