1 2 /* : : generated by proto : : */ 3 /*********************************************************************** 4 * * 5 * This software is part of the ast package * 6 * Copyright (c) 1985-2008 AT&T Intellectual Property * 7 * and is licensed under the * 8 * Common Public License, Version 1.0 * 9 * by AT&T Intellectual Property * 10 * * 11 * A copy of the License is available at * 12 * http://www.opensource.org/licenses/cpl1.0.txt * 13 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 14 * * 15 * Information and Software Systems Research * 16 * AT&T Research * 17 * Florham Park NJ * 18 * * 19 * Glenn Fowler <gsf@research.att.com> * 20 * David Korn <dgk@research.att.com> * 21 * Phong Vo <kpv@research.att.com> * 22 * * 23 ***********************************************************************/ 24 25 /* 26 * Glenn Fowler 27 * David Korn 28 * Phong Vo 29 * AT&T Research 30 * 31 * fts interface definitions 32 */ 33 34 #ifndef _FTS_H 35 #if !defined(__PROTO__) 36 #include <prototyped.h> 37 #endif 38 #if !defined(__LINKAGE__) 39 #define __LINKAGE__ /* 2004-08-11 transition */ 40 #endif 41 42 #define _FTS_H 43 44 #include <ls.h> 45 46 /* 47 * fts_open flags 48 */ 49 50 #define FTS_LOGICAL 0 /* logical traversal, follow symlinks */ 51 #define FTS_META (1<<0) /* follow top dir symlinks even if phys */ 52 #define FTS_NOCHDIR (1<<1) /* don't chdir */ 53 #define FTS_NOPOSTORDER (1<<2) /* no postorder visits */ 54 #define FTS_NOPREORDER (1<<3) /* no preorder visits */ 55 #define FTS_NOSEEDOTDIR (1<<11) /* never retain leading . dir */ 56 #define FTS_NOSTAT (1<<4) /* don't stat children */ 57 #define FTS_ONEPATH (1<<5) /* pathnames arg is one const char* */ 58 #define FTS_PHYSICAL (1<<6) /* physical traversal, don't follow */ 59 #define FTS_SEEDOT (1<<7) /* return . and .. */ 60 #define FTS_SEEDOTDIR (1<<10) /* always retain leading . dir */ 61 #define FTS_TOP (1<<8) /* don't traverse subdirectories */ 62 #define FTS_XDEV (1<<9) /* don't cross mount points */ 63 64 #define FTS_USER (1<<12) /* first user flag bit */ 65 66 #define FTS_COMFOLLOW FTS_META 67 68 /* 69 * fts_info flags 70 */ 71 72 #define FTS_DEFAULT 0 /* ok, someone must have wanted this */ 73 74 #define FTS_NS (1<<0) /* stat failed */ 75 #define FTS_F (1<<1) /* file - not directory or symbolic link*/ 76 #define FTS_SL (1<<2) /* symbolic link */ 77 #define FTS_D (1<<3) /* directory - pre-order visit */ 78 79 #define FTS_C (1<<4) /* causes cycle */ 80 #define FTS_ERR (1<<5) /* some other error */ 81 #define FTS_DD (1<<6) /* . or .. */ 82 #define FTS_NR (1<<7) /* cannot read */ 83 #define FTS_NX (1<<8) /* cannot search */ 84 #define FTS_OK (1<<9) /* no info but otherwise ok */ 85 #define FTS_P (1<<10) /* post-order visit */ 86 87 #define FTS_DC (FTS_D|FTS_C) /* dir - would cause cycle */ 88 #define FTS_DNR (FTS_D|FTS_NR) /* dir - no read permission */ 89 #define FTS_DNX (FTS_D|FTS_NX) /* dir - no search permission */ 90 #define FTS_DOT (FTS_D|FTS_DD) /* . or .. */ 91 #define FTS_DP (FTS_D|FTS_P) /* dir - post-order visit */ 92 #define FTS_NSOK (FTS_NS|FTS_OK) /* no stat (because you asked) */ 93 #define FTS_SLNONE (FTS_SL|FTS_NS) /* symlink - to nowhere */ 94 95 /* 96 * fts_set flags 97 */ 98 99 #define FTS_AGAIN FTS_TOP /* process entry again */ 100 #define FTS_FOLLOW FTS_META /* follow FTS_SL symlink */ 101 #define FTS_SKIP FTS_NOSTAT /* skip FTS_D directory */ 102 #define FTS_STAT FTS_PHYSICAL /* stat() done by user */ 103 104 typedef struct Fts FTS; 105 typedef struct Ftsent FTSENT; 106 107 struct Ftsent 108 { 109 char* fts_accpath; /* path relative to . */ 110 char* fts_name; /* file name */ 111 char* fts_path; /* path relative to top dir */ 112 FTSENT* fts_cycle; /* offender if cycle */ 113 FTSENT* fts_link; /* next child */ 114 FTSENT* fts_parent; /* parent directory */ 115 struct stat* fts_statp; /* stat info */ 116 #ifdef _FTSENT_LOCAL_PRIVATE_ 117 _FTSENT_LOCAL_PRIVATE_ 118 #else 119 __V_* fts_pointer; /* local pointer value */ 120 #endif 121 long fts_number; /* local numeric value */ 122 int fts_errno; /* errno for this entry */ 123 unsigned short fts_info; /* info flags */ 124 unsigned short fts_namelen; /* strlen(fts_name) */ 125 unsigned short fts_pathlen; /* strlen(fts_path) */ 126 short fts_level; /* file tree depth, 0 at top */ 127 128 #ifdef _FTSENT_PRIVATE_ 129 _FTSENT_PRIVATE_ 130 #else 131 short _fts_pad_1; /* <ftwalk.h> compatibility */ 132 struct stat _fts_pad_2; /* <ftwalk.h> compatibility */ 133 FTS* fts; /* fts_open() handle */ 134 #endif 135 136 }; 137 138 struct Fts 139 { 140 int fts_errno; /* last errno */ 141 __V_* fts_handle; /* user defined handle */ 142 143 #ifdef _FTS_PRIVATE_ 144 _FTS_PRIVATE_ 145 #endif 146 147 }; 148 149 #if _BLD_ast && defined(__EXPORT__) 150 #undef __MANGLE__ 151 #define __MANGLE__ __LINKAGE__ __EXPORT__ 152 #endif 153 154 extern __MANGLE__ FTSENT* fts_children __PROTO__((FTS*, int)); 155 extern __MANGLE__ int fts_close __PROTO__((FTS*)); 156 extern __MANGLE__ int fts_flags __PROTO__((void)); 157 extern __MANGLE__ int fts_local __PROTO__((FTSENT*)); 158 extern __MANGLE__ int fts_notify __PROTO__((int(*)(FTS*, FTSENT*, __V_*), __V_*)); 159 extern __MANGLE__ FTS* fts_open __PROTO__((char* const*, int, int(*)(FTSENT* const*, FTSENT* const*))); 160 extern __MANGLE__ FTSENT* fts_read __PROTO__((FTS*)); 161 extern __MANGLE__ int fts_set __PROTO__((FTS*, FTSENT*, int)); 162 163 #undef __MANGLE__ 164 #define __MANGLE__ __LINKAGE__ 165 166 #endif 167