rpm 5.2.1
|
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 # define __THROW 00039 #if defined(hpux) || defined(__hpux) 00040 # define _INCLUDE_POSIX_SOURCE 00041 # define _LARGEFILE64_SOURCE 00042 #endif 00043 #endif 00044 00045 #include <sys/types.h> 00046 #include <sys/stat.h> 00047 #include <dirent.h> 00048 00049 /*@unchecked@*/ 00050 extern int _fts_debug; 00051 00054 typedef struct { 00055 /*@owned@*/ /*@relnull@*/ 00056 struct _ftsent *fts_cur; 00057 /*@owned@*/ /*@null@*/ 00058 struct _ftsent *fts_child; 00059 /*@owned@*/ /*@null@*/ 00060 struct _ftsent **fts_array; 00061 dev_t fts_dev; 00062 /*@owned@*/ /*@relnull@*/ 00063 char *fts_path; 00064 int fts_rfd; 00065 int fts_pathlen; 00066 int fts_nitems; 00067 /*@null@*/ 00068 int (*fts_compar) (const void *, const void *) 00069 /*@*/; 00071 DIR * (*fts_opendir) (const char * path) 00072 /*@globals fileSystem @*/ 00073 /*@modifies fileSystem @*/; 00074 struct dirent * (*fts_readdir) (DIR * dir) 00075 /*@globals fileSystem @*/ 00076 /*@modifies *dir, fileSystem @*/; 00077 int (*fts_closedir) (/*@only@*/ DIR * dir) 00078 /*@globals fileSystem @*/ 00079 /*@modifies *dir, fileSystem @*/; 00080 int (*fts_stat) (const char * path, /*@out@*/ struct stat * st) 00081 /*@globals fileSystem @*/ 00082 /*@modifies *st, fileSystem @*/; 00083 int (*fts_lstat) (const char * path, /*@out@*/ struct stat * st) 00084 /*@globals fileSystem @*/ 00085 /*@modifies *st, fileSystem @*/; 00086 00087 #define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */ 00088 #define FTS_LOGICAL 0x0002 /* logical walk */ 00089 #define FTS_NOCHDIR 0x0004 /* don't change directories */ 00090 #define FTS_NOSTAT 0x0008 /* don't get stat info */ 00091 #define FTS_PHYSICAL 0x0010 /* physical walk */ 00092 #define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ 00093 #define FTS_XDEV 0x0040 /* don't cross devices */ 00094 #define FTS_WHITEOUT 0x0080 /* return whiteout information */ 00095 #define FTS_OPTIONMASK 0x00ff /* valid user option mask */ 00096 00097 #define FTS_NAMEONLY 0x0100 /* (private) child names only */ 00098 #define FTS_STOP 0x0200 /* (private) unrecoverable error */ 00099 int fts_options; 00100 } FTS; 00101 00102 typedef struct _ftsent { 00103 /*@dependent@*/ 00104 struct _ftsent *fts_cycle; 00105 /*@dependent@*/ /*@relnull@*/ 00106 struct _ftsent *fts_parent; 00107 /*@dependent@*/ /*@null@*/ 00108 struct _ftsent *fts_link; 00109 long fts_number; 00110 /*@null@*/ 00111 void *fts_pointer; 00112 /*@dependent@*/ 00113 char *fts_accpath; 00114 /*@dependent@*/ 00115 char *fts_path; 00116 int fts_errno; 00117 int fts_symfd; 00118 u_short fts_pathlen; 00119 u_short fts_namelen; 00121 ino_t fts_ino; 00122 dev_t fts_dev; 00123 nlink_t fts_nlink; 00125 #define FTS_ROOTPARENTLEVEL -1 00126 #define FTS_ROOTLEVEL 0 00127 short fts_level; 00129 #define FTS_D 1 /* preorder directory */ 00130 #define FTS_DC 2 /* directory that causes cycles */ 00131 #define FTS_DEFAULT 3 /* none of the above */ 00132 #define FTS_DNR 4 /* unreadable directory */ 00133 #define FTS_DOT 5 /* dot or dot-dot */ 00134 #define FTS_DP 6 /* postorder directory */ 00135 #define FTS_ERR 7 /* error; errno is set */ 00136 #define FTS_F 8 /* regular file */ 00137 #define FTS_INIT 9 /* initialized only */ 00138 #define FTS_NS 10 /* stat(2) failed */ 00139 #define FTS_NSOK 11 /* no stat(2) requested */ 00140 #define FTS_SL 12 /* symbolic link */ 00141 #define FTS_SLNONE 13 /* symbolic link without target */ 00142 #define FTS_W 14 /* whiteout object */ 00143 u_short fts_info; 00145 #define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */ 00146 #define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */ 00147 u_short fts_flags; 00149 #define FTS_AGAIN 1 /* read node again */ 00150 #define FTS_FOLLOW 2 /* follow symbolic link */ 00151 #define FTS_NOINSTR 3 /* no instructions */ 00152 #define FTS_SKIP 4 /* discard node */ 00153 u_short fts_instr; 00155 /*@dependent@*/ 00156 struct stat *fts_statp; 00157 char fts_name[1]; 00158 } FTSENT; 00159 00160 #ifdef __cplusplus 00161 extern "C" { 00162 #endif 00163 00170 /*@dependent@*/ /*@null@*/ 00171 FTSENT *Fts_children (FTS * sp, int instr) __THROW 00172 /*@globals fileSystem, internalState @*/ 00173 /*@modifies *sp, fileSystem, internalState @*/; 00174 00180 int Fts_close (/*@only@*/ /*@null@*/ FTS * sp) __THROW 00181 /*@globals fileSystem, internalState @*/ 00182 /*@modifies *sp, fileSystem, internalState @*/; 00183 00191 /*@only@*/ /*@null@*/ 00192 FTS *Fts_open (char * const * argv, int options, 00193 /*@null@*/ 00194 int (*compar) (const FTSENT **, const FTSENT **)) __THROW 00195 /*@*/; 00196 00202 /*@null@*/ 00203 FTSENT *Fts_read (/*@null@*/ FTS * sp) __THROW 00204 /*@globals fileSystem, internalState @*/ 00205 /*@modifies *sp, fileSystem, internalState @*/; 00206 00214 int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW 00215 /*@modifies *p @*/; 00216 00217 #ifdef __cplusplus 00218 } 00219 #endif 00220 00221 #endif /* fts.h */