14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 78462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 84887Schin * * 94887Schin * A copy of the License is available at * 104887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 124887Schin * * 134887Schin * Information and Software Systems Research * 144887Schin * AT&T Research * 154887Schin * Florham Park NJ * 164887Schin * * 174887Schin * Glenn Fowler <gsf@research.att.com> * 184887Schin * David Korn <dgk@research.att.com> * 194887Schin * Phong Vo <kpv@research.att.com> * 204887Schin * * 214887Schin ***********************************************************************/ 224887Schin #pragma prototyped 234887Schin /* 244887Schin * Glenn Fowler 254887Schin * David Korn 264887Schin * Phong Vo 274887Schin * AT&T Research 284887Schin * 294887Schin * fts interface definitions 304887Schin */ 314887Schin 324887Schin #ifndef _FTS_H 334887Schin #define _FTS_H 344887Schin 35*12068SRoger.Faulkner@Oracle.COM #include <ast_std.h> 36*12068SRoger.Faulkner@Oracle.COM #include <ast_fs.h> 37*12068SRoger.Faulkner@Oracle.COM #include <ast_mode.h> 384887Schin 394887Schin /* 404887Schin * fts_open flags 414887Schin */ 424887Schin 434887Schin #define FTS_LOGICAL 0 /* logical traversal, follow symlinks */ 444887Schin #define FTS_META (1<<0) /* follow top dir symlinks even if phys */ 454887Schin #define FTS_NOCHDIR (1<<1) /* don't chdir */ 464887Schin #define FTS_NOPOSTORDER (1<<2) /* no postorder visits */ 474887Schin #define FTS_NOPREORDER (1<<3) /* no preorder visits */ 484887Schin #define FTS_NOSEEDOTDIR (1<<11) /* never retain leading . dir */ 494887Schin #define FTS_NOSTAT (1<<4) /* don't stat children */ 504887Schin #define FTS_ONEPATH (1<<5) /* pathnames arg is one const char* */ 514887Schin #define FTS_PHYSICAL (1<<6) /* physical traversal, don't follow */ 524887Schin #define FTS_SEEDOT (1<<7) /* return . and .. */ 534887Schin #define FTS_SEEDOTDIR (1<<10) /* always retain leading . dir */ 544887Schin #define FTS_TOP (1<<8) /* don't traverse subdirectories */ 554887Schin #define FTS_XDEV (1<<9) /* don't cross mount points */ 564887Schin 574887Schin #define FTS_USER (1<<12) /* first user flag bit */ 584887Schin 594887Schin #define FTS_COMFOLLOW FTS_META 604887Schin 614887Schin /* 624887Schin * fts_info flags 634887Schin */ 644887Schin 654887Schin #define FTS_DEFAULT 0 /* ok, someone must have wanted this */ 664887Schin 674887Schin #define FTS_NS (1<<0) /* stat failed */ 684887Schin #define FTS_F (1<<1) /* file - not directory or symbolic link*/ 694887Schin #define FTS_SL (1<<2) /* symbolic link */ 704887Schin #define FTS_D (1<<3) /* directory - pre-order visit */ 714887Schin 724887Schin #define FTS_C (1<<4) /* causes cycle */ 734887Schin #define FTS_ERR (1<<5) /* some other error */ 744887Schin #define FTS_DD (1<<6) /* . or .. */ 754887Schin #define FTS_NR (1<<7) /* cannot read */ 764887Schin #define FTS_NX (1<<8) /* cannot search */ 774887Schin #define FTS_OK (1<<9) /* no info but otherwise ok */ 784887Schin #define FTS_P (1<<10) /* post-order visit */ 794887Schin 804887Schin #define FTS_DC (FTS_D|FTS_C) /* dir - would cause cycle */ 814887Schin #define FTS_DNR (FTS_D|FTS_NR) /* dir - no read permission */ 824887Schin #define FTS_DNX (FTS_D|FTS_NX) /* dir - no search permission */ 834887Schin #define FTS_DOT (FTS_D|FTS_DD) /* . or .. */ 844887Schin #define FTS_DP (FTS_D|FTS_P) /* dir - post-order visit */ 854887Schin #define FTS_NSOK (FTS_NS|FTS_OK) /* no stat (because you asked) */ 864887Schin #define FTS_SLNONE (FTS_SL|FTS_NS) /* symlink - to nowhere */ 874887Schin 884887Schin /* 894887Schin * fts_set flags 904887Schin */ 914887Schin 924887Schin #define FTS_AGAIN FTS_TOP /* process entry again */ 934887Schin #define FTS_FOLLOW FTS_META /* follow FTS_SL symlink */ 944887Schin #define FTS_SKIP FTS_NOSTAT /* skip FTS_D directory */ 954887Schin #define FTS_STAT FTS_PHYSICAL /* stat() done by user */ 964887Schin 974887Schin typedef struct Fts FTS; 984887Schin typedef struct Ftsent FTSENT; 994887Schin 1004887Schin struct Ftsent 1014887Schin { 1024887Schin char* fts_accpath; /* path relative to . */ 1034887Schin char* fts_name; /* file name */ 1044887Schin char* fts_path; /* path relative to top dir */ 1054887Schin FTSENT* fts_cycle; /* offender if cycle */ 1064887Schin FTSENT* fts_link; /* next child */ 1074887Schin FTSENT* fts_parent; /* parent directory */ 1084887Schin struct stat* fts_statp; /* stat info */ 1094887Schin #ifdef _FTSENT_LOCAL_PRIVATE_ 1104887Schin _FTSENT_LOCAL_PRIVATE_ 1114887Schin #else 1124887Schin void* fts_pointer; /* local pointer value */ 1134887Schin #endif 1144887Schin long fts_number; /* local numeric value */ 1154887Schin int fts_errno; /* errno for this entry */ 1164887Schin unsigned short fts_info; /* info flags */ 11710898Sroland.mainz@nrubsig.org 11810898Sroland.mainz@nrubsig.org unsigned short _fts_namelen; /* old fts_namelen */ 11910898Sroland.mainz@nrubsig.org unsigned short _fts_pathlen; /* old fts_pathlen */ 12010898Sroland.mainz@nrubsig.org short _fts_level; /* old fts_level */ 12110898Sroland.mainz@nrubsig.org 12210898Sroland.mainz@nrubsig.org short _fts_status; /* <ftwalk.h> compatibility */ 12310898Sroland.mainz@nrubsig.org struct stat _fts_statb; /* <ftwalk.h> compatibility */ 12410898Sroland.mainz@nrubsig.org 12510898Sroland.mainz@nrubsig.org FTS* fts; /* fts_open() handle */ 12610898Sroland.mainz@nrubsig.org size_t fts_namelen; /* strlen(fts_name) */ 12710898Sroland.mainz@nrubsig.org size_t fts_pathlen; /* strlen(fts_path) */ 12810898Sroland.mainz@nrubsig.org ssize_t fts_level; /* file tree depth, 0 at top */ 1294887Schin 1304887Schin #ifdef _FTSENT_PRIVATE_ 1314887Schin _FTSENT_PRIVATE_ 1324887Schin #endif 1334887Schin 1344887Schin }; 1354887Schin 1364887Schin struct Fts 1374887Schin { 1384887Schin int fts_errno; /* last errno */ 1398462SApril.Chin@Sun.COM void* fts_handle; /* user defined handle */ 1404887Schin 1414887Schin #ifdef _FTS_PRIVATE_ 1424887Schin _FTS_PRIVATE_ 1434887Schin #endif 1444887Schin 1454887Schin }; 1464887Schin 1474887Schin #if _BLD_ast && defined(__EXPORT__) 1484887Schin #define extern __EXPORT__ 1494887Schin #endif 1504887Schin 1514887Schin extern FTSENT* fts_children(FTS*, int); 1524887Schin extern int fts_close(FTS*); 1534887Schin extern int fts_flags(void); 1548462SApril.Chin@Sun.COM extern int fts_local(FTSENT*); 1554887Schin extern int fts_notify(int(*)(FTS*, FTSENT*, void*), void*); 1564887Schin extern FTS* fts_open(char* const*, int, int(*)(FTSENT* const*, FTSENT* const*)); 1574887Schin extern FTSENT* fts_read(FTS*); 1584887Schin extern int fts_set(FTS*, FTSENT*, int); 1594887Schin 1604887Schin #undef extern 1614887Schin 1624887Schin #endif 163