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