rpm
4.5
|
00001 /* 00002 * Copyright (c) 1989, 1993 00003 * The Regents of the University of California. All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 4. Neither the name of the University nor the names of its contributors 00014 * may be used to endorse or promote products derived from this software 00015 * without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 00018 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 00021 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00022 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00023 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00024 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00025 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00027 * SUCH DAMAGE. 00028 * 00029 * @(#)fts.h 8.3 (Berkeley) 8/14/94 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 00041 #if defined(hpux) || defined(__hpux) 00042 # define _D_EXACT_NAMLEN(d) ((d)->d_namlen) 00043 # define _INCLUDE_POSIX_SOURCE 00044 # define _LARGEFILE64_SOURCE 00045 #endif 00046 00047 #if defined(__FreeBSD__) 00048 # define _D_EXACT_NAMLEN(d) ((d)->d_namlen) 00049 #endif 00050 00051 #if !defined(_D_EXACT_NAMLEN) 00052 # define _D_EXACT_NAMLEN(d) (strlen((d)->d_name)) 00053 #endif 00054 00055 #endif 00056 00057 #include <sys/types.h> 00058 #include <sys/stat.h> 00059 #include <dirent.h> 00060 00061 typedef struct { 00062 /*@owned@*/ /*@relnull@*/ 00063 struct _ftsent *fts_cur; 00064 /*@owned@*/ /*@null@*/ 00065 struct _ftsent *fts_child; 00066 /*@owned@*/ /*@null@*/ 00067 struct _ftsent **fts_array; 00068 dev_t fts_dev; 00069 /*@owned@*/ /*@relnull@*/ 00070 char *fts_path; 00071 int fts_rfd; 00072 int fts_pathlen; 00073 int fts_nitems; 00074 /*@null@*/ 00075 int (*fts_compar) (const void *, const void *) 00076 /*@*/; 00078 DIR * (*fts_opendir) (const char * path) 00079 /*@globals fileSystem @*/ 00080 /*@modifies fileSystem @*/; 00081 struct dirent * (*fts_readdir) (DIR * dir) 00082 /*@globals fileSystem @*/ 00083 /*@modifies *dir, fileSystem @*/; 00084 int (*fts_closedir) (/*@only@*/ DIR * dir) 00085 /*@globals fileSystem @*/ 00086 /*@modifies *dir, fileSystem @*/; 00087 int (*fts_stat) (const char * path, /*@out@*/ struct stat * st) 00088 /*@globals fileSystem @*/ 00089 /*@modifies *st, fileSystem @*/; 00090 int (*fts_lstat) (const char * path, /*@out@*/ struct stat * st) 00091 /*@globals fileSystem @*/ 00092 /*@modifies *st, fileSystem @*/; 00093 00094 #define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */ 00095 #define FTS_LOGICAL 0x0002 /* logical walk */ 00096 #define FTS_NOCHDIR 0x0004 /* don't change directories */ 00097 #define FTS_NOSTAT 0x0008 /* don't get stat info */ 00098 #define FTS_PHYSICAL 0x0010 /* physical walk */ 00099 #define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ 00100 #define FTS_XDEV 0x0040 /* don't cross devices */ 00101 #define FTS_WHITEOUT 0x0080 /* return whiteout information */ 00102 #define FTS_OPTIONMASK 0x00ff /* valid user option mask */ 00103 00104 #define FTS_NAMEONLY 0x0100 /* (private) child names only */ 00105 #define FTS_STOP 0x0200 /* (private) unrecoverable error */ 00106 int fts_options; 00107 } FTS; 00108 00109 typedef struct _ftsent { 00110 /*@dependent@*/ 00111 struct _ftsent *fts_cycle; 00112 /*@dependent@*/ /*@relnull@*/ 00113 struct _ftsent *fts_parent; 00114 /*@dependent@*/ /*@null@*/ 00115 struct _ftsent *fts_link; 00116 long fts_number; 00117 /*@null@*/ 00118 void *fts_pointer; 00119 /*@dependent@*/ 00120 char *fts_accpath; 00121 /*@dependent@*/ 00122 char *fts_path; 00123 int fts_errno; 00124 int fts_symfd; 00125 u_short fts_pathlen; 00126 u_short fts_namelen; 00128 ino_t fts_ino; 00129 dev_t fts_dev; 00130 nlink_t fts_nlink; 00132 #define FTS_ROOTPARENTLEVEL -1 00133 #define FTS_ROOTLEVEL 0 00134 short fts_level; 00136 #define FTS_D 1 /* preorder directory */ 00137 #define FTS_DC 2 /* directory that causes cycles */ 00138 #define FTS_DEFAULT 3 /* none of the above */ 00139 #define FTS_DNR 4 /* unreadable directory */ 00140 #define FTS_DOT 5 /* dot or dot-dot */ 00141 #define FTS_DP 6 /* postorder directory */ 00142 #define FTS_ERR 7 /* error; errno is set */ 00143 #define FTS_F 8 /* regular file */ 00144 #define FTS_INIT 9 /* initialized only */ 00145 #define FTS_NS 10 /* stat(2) failed */ 00146 #define FTS_NSOK 11 /* no stat(2) requested */ 00147 #define FTS_SL 12 /* symbolic link */ 00148 #define FTS_SLNONE 13 /* symbolic link without target */ 00149 #define FTS_W 14 /* whiteout object */ 00150 u_short fts_info; 00152 #define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */ 00153 #define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */ 00154 u_short fts_flags; 00156 #define FTS_AGAIN 1 /* read node again */ 00157 #define FTS_FOLLOW 2 /* follow symbolic link */ 00158 #define FTS_NOINSTR 3 /* no instructions */ 00159 #define FTS_SKIP 4 /* discard node */ 00160 u_short fts_instr; 00162 /*@dependent@*/ 00163 struct stat *fts_statp; 00164 char fts_name[1]; 00165 } FTSENT; 00166 00167 #ifdef __cplusplus 00168 extern "C" { 00169 #endif 00170 00177 /*@dependent@*/ /*@null@*/ 00178 FTSENT *Fts_children (FTS * sp, int instr) __THROW 00179 /*@globals fileSystem, internalState @*/ 00180 /*@modifies *sp, fileSystem, internalState @*/; 00181 00187 int Fts_close (/*@only@*/ /*@null@*/ FTS * sp) __THROW 00188 /*@globals fileSystem, internalState @*/ 00189 /*@modifies *sp, fileSystem, internalState @*/; 00190 00198 /*@only@*/ /*@null@*/ 00199 FTS *Fts_open (char * const * argv, int options, 00200 /*@null@*/ 00201 int (*compar) (const FTSENT **, const FTSENT **)) __THROW 00202 /*@*/; 00203 00209 /*@null@*/ 00210 FTSENT *Fts_read (/*@null@*/ FTS * sp) __THROW 00211 /*@globals fileSystem, internalState @*/ 00212 /*@modifies *sp, fileSystem, internalState @*/; 00213 00221 int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW 00222 /*@modifies *p @*/; 00223 00224 #ifdef __cplusplus 00225 } 00226 #endif 00227 00228 #endif /* fts.h */