1 2/* : : generated by proto : : */ 3/*********************************************************************** 4* * 5* This software is part of the ast package * 6* Copyright (c) 1985-2010 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 <ast_std.h> 45#include <ast_fs.h> 46#include <ast_mode.h> 47 48/* 49 * fts_open flags 50 */ 51 52#define FTS_LOGICAL 0 /* logical traversal, follow symlinks */ 53#define FTS_META (1<<0) /* follow top dir symlinks even if phys */ 54#define FTS_NOCHDIR (1<<1) /* don't chdir */ 55#define FTS_NOPOSTORDER (1<<2) /* no postorder visits */ 56#define FTS_NOPREORDER (1<<3) /* no preorder visits */ 57#define FTS_NOSEEDOTDIR (1<<11) /* never retain leading . dir */ 58#define FTS_NOSTAT (1<<4) /* don't stat children */ 59#define FTS_ONEPATH (1<<5) /* pathnames arg is one const char* */ 60#define FTS_PHYSICAL (1<<6) /* physical traversal, don't follow */ 61#define FTS_SEEDOT (1<<7) /* return . and .. */ 62#define FTS_SEEDOTDIR (1<<10) /* always retain leading . dir */ 63#define FTS_TOP (1<<8) /* don't traverse subdirectories */ 64#define FTS_XDEV (1<<9) /* don't cross mount points */ 65 66#define FTS_USER (1<<12) /* first user flag bit */ 67 68#define FTS_COMFOLLOW FTS_META 69 70/* 71 * fts_info flags 72 */ 73 74#define FTS_DEFAULT 0 /* ok, someone must have wanted this */ 75 76#define FTS_NS (1<<0) /* stat failed */ 77#define FTS_F (1<<1) /* file - not directory or symbolic link*/ 78#define FTS_SL (1<<2) /* symbolic link */ 79#define FTS_D (1<<3) /* directory - pre-order visit */ 80 81#define FTS_C (1<<4) /* causes cycle */ 82#define FTS_ERR (1<<5) /* some other error */ 83#define FTS_DD (1<<6) /* . or .. */ 84#define FTS_NR (1<<7) /* cannot read */ 85#define FTS_NX (1<<8) /* cannot search */ 86#define FTS_OK (1<<9) /* no info but otherwise ok */ 87#define FTS_P (1<<10) /* post-order visit */ 88 89#define FTS_DC (FTS_D|FTS_C) /* dir - would cause cycle */ 90#define FTS_DNR (FTS_D|FTS_NR) /* dir - no read permission */ 91#define FTS_DNX (FTS_D|FTS_NX) /* dir - no search permission */ 92#define FTS_DOT (FTS_D|FTS_DD) /* . or .. */ 93#define FTS_DP (FTS_D|FTS_P) /* dir - post-order visit */ 94#define FTS_NSOK (FTS_NS|FTS_OK) /* no stat (because you asked) */ 95#define FTS_SLNONE (FTS_SL|FTS_NS) /* symlink - to nowhere */ 96 97/* 98 * fts_set flags 99 */ 100 101#define FTS_AGAIN FTS_TOP /* process entry again */ 102#define FTS_FOLLOW FTS_META /* follow FTS_SL symlink */ 103#define FTS_SKIP FTS_NOSTAT /* skip FTS_D directory */ 104#define FTS_STAT FTS_PHYSICAL /* stat() done by user */ 105 106typedef struct Fts FTS; 107typedef struct Ftsent FTSENT; 108 109struct Ftsent 110{ 111 char* fts_accpath; /* path relative to . */ 112 char* fts_name; /* file name */ 113 char* fts_path; /* path relative to top dir */ 114 FTSENT* fts_cycle; /* offender if cycle */ 115 FTSENT* fts_link; /* next child */ 116 FTSENT* fts_parent; /* parent directory */ 117 struct stat* fts_statp; /* stat info */ 118#ifdef _FTSENT_LOCAL_PRIVATE_ 119 _FTSENT_LOCAL_PRIVATE_ 120#else 121 __V_* fts_pointer; /* local pointer value */ 122#endif 123 long fts_number; /* local numeric value */ 124 int fts_errno; /* errno for this entry */ 125 unsigned short fts_info; /* info flags */ 126 127 unsigned short _fts_namelen; /* old fts_namelen */ 128 unsigned short _fts_pathlen; /* old fts_pathlen */ 129 short _fts_level; /* old fts_level */ 130 131 short _fts_status; /* <ftwalk.h> compatibility */ 132 struct stat _fts_statb; /* <ftwalk.h> compatibility */ 133 134 FTS* fts; /* fts_open() handle */ 135 size_t fts_namelen; /* strlen(fts_name) */ 136 size_t fts_pathlen; /* strlen(fts_path) */ 137 ssize_t fts_level; /* file tree depth, 0 at top */ 138 139#ifdef _FTSENT_PRIVATE_ 140 _FTSENT_PRIVATE_ 141#endif 142 143}; 144 145struct Fts 146{ 147 int fts_errno; /* last errno */ 148 __V_* fts_handle; /* user defined handle */ 149 150#ifdef _FTS_PRIVATE_ 151 _FTS_PRIVATE_ 152#endif 153 154}; 155 156#if _BLD_ast && defined(__EXPORT__) 157#undef __MANGLE__ 158#define __MANGLE__ __LINKAGE__ __EXPORT__ 159#endif 160 161extern __MANGLE__ FTSENT* fts_children __PROTO__((FTS*, int)); 162extern __MANGLE__ int fts_close __PROTO__((FTS*)); 163extern __MANGLE__ int fts_flags __PROTO__((void)); 164extern __MANGLE__ int fts_local __PROTO__((FTSENT*)); 165extern __MANGLE__ int fts_notify __PROTO__((int(*)(FTS*, FTSENT*, __V_*), __V_*)); 166extern __MANGLE__ FTS* fts_open __PROTO__((char* const*, int, int(*)(FTSENT* const*, FTSENT* const*))); 167extern __MANGLE__ FTSENT* fts_read __PROTO__((FTS*)); 168extern __MANGLE__ int fts_set __PROTO__((FTS*, FTSENT*, int)); 169 170#undef __MANGLE__ 171#define __MANGLE__ __LINKAGE__ 172 173#endif 174