xref: /onnv-gate/usr/src/lib/libast/common/include/fts.h (revision 12068:08a39a083754)
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