xref: /aosp_15_r20/bionic/libc/include/fts.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*	$OpenBSD: fts.h,v 1.12 2009/08/27 16:19:27 millert Exp $	*/
2*8d67ca89SAndroid Build Coastguard Worker /*	$NetBSD: fts.h,v 1.5 1994/12/28 01:41:50 mycroft Exp $	*/
3*8d67ca89SAndroid Build Coastguard Worker 
4*8d67ca89SAndroid Build Coastguard Worker /*
5*8d67ca89SAndroid Build Coastguard Worker  * Copyright (c) 1989, 1993
6*8d67ca89SAndroid Build Coastguard Worker  *	The Regents of the University of California.  All rights reserved.
7*8d67ca89SAndroid Build Coastguard Worker  *
8*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
9*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
10*8d67ca89SAndroid Build Coastguard Worker  * are met:
11*8d67ca89SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
12*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
13*8d67ca89SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
14*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
15*8d67ca89SAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
16*8d67ca89SAndroid Build Coastguard Worker  * 3. Neither the name of the University nor the names of its contributors
17*8d67ca89SAndroid Build Coastguard Worker  *    may be used to endorse or promote products derived from this software
18*8d67ca89SAndroid Build Coastguard Worker  *    without specific prior written permission.
19*8d67ca89SAndroid Build Coastguard Worker  *
20*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21*8d67ca89SAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22*8d67ca89SAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23*8d67ca89SAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24*8d67ca89SAndroid Build Coastguard Worker  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25*8d67ca89SAndroid Build Coastguard Worker  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26*8d67ca89SAndroid Build Coastguard Worker  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27*8d67ca89SAndroid Build Coastguard Worker  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28*8d67ca89SAndroid Build Coastguard Worker  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29*8d67ca89SAndroid Build Coastguard Worker  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
31*8d67ca89SAndroid Build Coastguard Worker  *
32*8d67ca89SAndroid Build Coastguard Worker  *	@(#)fts.h	8.3 (Berkeley) 8/14/94
33*8d67ca89SAndroid Build Coastguard Worker  */
34*8d67ca89SAndroid Build Coastguard Worker 
35*8d67ca89SAndroid Build Coastguard Worker #ifndef	_FTS_H_
36*8d67ca89SAndroid Build Coastguard Worker #define	_FTS_H_
37*8d67ca89SAndroid Build Coastguard Worker 
38*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h>
39*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h>
40*8d67ca89SAndroid Build Coastguard Worker 
41*8d67ca89SAndroid Build Coastguard Worker typedef struct {
42*8d67ca89SAndroid Build Coastguard Worker 	struct _ftsent * _Nullable fts_cur;	/* current node */
43*8d67ca89SAndroid Build Coastguard Worker 	struct _ftsent * _Nullable fts_child;	/* linked list of children */
44*8d67ca89SAndroid Build Coastguard Worker 	struct _ftsent * _Nullable * _Nullable fts_array;	/* sort array */
45*8d67ca89SAndroid Build Coastguard Worker 	dev_t fts_dev;			/* starting device # */
46*8d67ca89SAndroid Build Coastguard Worker 	char * _Nullable fts_path;			/* path for this descent */
47*8d67ca89SAndroid Build Coastguard Worker 	int fts_rfd;			/* fd for root */
48*8d67ca89SAndroid Build Coastguard Worker 	size_t fts_pathlen;		/* sizeof(path) */
49*8d67ca89SAndroid Build Coastguard Worker 	int fts_nitems;			/* elements in the sort array */
50*8d67ca89SAndroid Build Coastguard Worker 	int (* _Nullable fts_compar)();		/* compare function */
51*8d67ca89SAndroid Build Coastguard Worker 
52*8d67ca89SAndroid Build Coastguard Worker #define	FTS_COMFOLLOW	0x0001		/* follow command line symlinks */
53*8d67ca89SAndroid Build Coastguard Worker #define	FTS_LOGICAL	0x0002		/* logical walk */
54*8d67ca89SAndroid Build Coastguard Worker #define	FTS_NOCHDIR	0x0004		/* don't change directories */
55*8d67ca89SAndroid Build Coastguard Worker #define	FTS_NOSTAT	0x0008		/* don't get stat info */
56*8d67ca89SAndroid Build Coastguard Worker #define	FTS_PHYSICAL	0x0010		/* physical walk */
57*8d67ca89SAndroid Build Coastguard Worker #define	FTS_SEEDOT	0x0020		/* return dot and dot-dot */
58*8d67ca89SAndroid Build Coastguard Worker #define	FTS_XDEV	0x0040		/* don't cross devices */
59*8d67ca89SAndroid Build Coastguard Worker #define	FTS_OPTIONMASK	0x00ff		/* valid user option mask */
60*8d67ca89SAndroid Build Coastguard Worker 
61*8d67ca89SAndroid Build Coastguard Worker #define FTS_NAMEONLY 0x1000  /* (private) child names only */
62*8d67ca89SAndroid Build Coastguard Worker #define FTS_STOP 0x2000      /* (private) unrecoverable error */
63*8d67ca89SAndroid Build Coastguard Worker #define FTS_FOR_FTW 0x4000   /* (private) fts is being called by ftw/nftw */
64*8d67ca89SAndroid Build Coastguard Worker 	int fts_options;		/* fts_open options, global flags */
65*8d67ca89SAndroid Build Coastguard Worker } FTS;
66*8d67ca89SAndroid Build Coastguard Worker 
67*8d67ca89SAndroid Build Coastguard Worker typedef struct _ftsent {
68*8d67ca89SAndroid Build Coastguard Worker 	struct _ftsent * _Nullable fts_cycle;	/* cycle node */
69*8d67ca89SAndroid Build Coastguard Worker 	struct _ftsent * _Nullable fts_parent;	/* parent directory */
70*8d67ca89SAndroid Build Coastguard Worker 	struct _ftsent * _Nullable fts_link;	/* next file in directory */
71*8d67ca89SAndroid Build Coastguard Worker 	long fts_number;	        /* local numeric value */
72*8d67ca89SAndroid Build Coastguard Worker 	void * _Nullable fts_pointer;	        /* local address value */
73*8d67ca89SAndroid Build Coastguard Worker 	char * _Nullable fts_accpath;		/* access path */
74*8d67ca89SAndroid Build Coastguard Worker 	char * _Nullable fts_path;			/* root path */
75*8d67ca89SAndroid Build Coastguard Worker 	int fts_errno;			/* errno for this node */
76*8d67ca89SAndroid Build Coastguard Worker 	int fts_symfd;			/* fd for symlink */
77*8d67ca89SAndroid Build Coastguard Worker 	size_t fts_pathlen;		/* strlen(fts_path) */
78*8d67ca89SAndroid Build Coastguard Worker 	size_t fts_namelen;		/* strlen(fts_name) */
79*8d67ca89SAndroid Build Coastguard Worker 
80*8d67ca89SAndroid Build Coastguard Worker 	ino_t fts_ino;			/* inode */
81*8d67ca89SAndroid Build Coastguard Worker 	dev_t fts_dev;			/* device */
82*8d67ca89SAndroid Build Coastguard Worker 	nlink_t fts_nlink;		/* link count */
83*8d67ca89SAndroid Build Coastguard Worker 
84*8d67ca89SAndroid Build Coastguard Worker #define	FTS_ROOTPARENTLEVEL	-1
85*8d67ca89SAndroid Build Coastguard Worker #define	FTS_ROOTLEVEL		 0
86*8d67ca89SAndroid Build Coastguard Worker #define	FTS_MAXLEVEL		 0x7fff
87*8d67ca89SAndroid Build Coastguard Worker 	short fts_level;		/* depth (-1 to N) */
88*8d67ca89SAndroid Build Coastguard Worker 
89*8d67ca89SAndroid Build Coastguard Worker #define	FTS_D		 1		/* preorder directory */
90*8d67ca89SAndroid Build Coastguard Worker #define	FTS_DC		 2		/* directory that causes cycles */
91*8d67ca89SAndroid Build Coastguard Worker #define	FTS_DEFAULT	 3		/* none of the above */
92*8d67ca89SAndroid Build Coastguard Worker #define	FTS_DNR		 4		/* unreadable directory */
93*8d67ca89SAndroid Build Coastguard Worker #define	FTS_DOT		 5		/* dot or dot-dot */
94*8d67ca89SAndroid Build Coastguard Worker #define	FTS_DP		 6		/* postorder directory */
95*8d67ca89SAndroid Build Coastguard Worker #define	FTS_ERR		 7		/* error; errno is set */
96*8d67ca89SAndroid Build Coastguard Worker #define	FTS_F		 8		/* regular file */
97*8d67ca89SAndroid Build Coastguard Worker #define	FTS_INIT	 9		/* initialized only */
98*8d67ca89SAndroid Build Coastguard Worker #define	FTS_NS		10		/* stat(2) failed */
99*8d67ca89SAndroid Build Coastguard Worker #define	FTS_NSOK	11		/* no stat(2) requested */
100*8d67ca89SAndroid Build Coastguard Worker #define	FTS_SL		12		/* symbolic link */
101*8d67ca89SAndroid Build Coastguard Worker #define	FTS_SLNONE	13		/* symbolic link without target */
102*8d67ca89SAndroid Build Coastguard Worker 	unsigned short fts_info;	/* user flags for FTSENT structure */
103*8d67ca89SAndroid Build Coastguard Worker 
104*8d67ca89SAndroid Build Coastguard Worker #define	FTS_DONTCHDIR	 0x01		/* don't chdir .. to the parent */
105*8d67ca89SAndroid Build Coastguard Worker #define	FTS_SYMFOLLOW	 0x02		/* followed a symlink to get here */
106*8d67ca89SAndroid Build Coastguard Worker 	unsigned short fts_flags;	/* private flags for FTSENT structure */
107*8d67ca89SAndroid Build Coastguard Worker 
108*8d67ca89SAndroid Build Coastguard Worker #define	FTS_AGAIN	 1		/* read node again */
109*8d67ca89SAndroid Build Coastguard Worker #define	FTS_FOLLOW	 2		/* follow symbolic link */
110*8d67ca89SAndroid Build Coastguard Worker #define	FTS_NOINSTR	 3		/* no instructions */
111*8d67ca89SAndroid Build Coastguard Worker #define	FTS_SKIP	 4		/* discard node */
112*8d67ca89SAndroid Build Coastguard Worker 	unsigned short fts_instr;	/* fts_set() instructions */
113*8d67ca89SAndroid Build Coastguard Worker 
114*8d67ca89SAndroid Build Coastguard Worker 	struct stat * _Nullable fts_statp;		/* stat(2) information */
115*8d67ca89SAndroid Build Coastguard Worker 	char fts_name[1];		/* file name */
116*8d67ca89SAndroid Build Coastguard Worker } FTSENT;
117*8d67ca89SAndroid Build Coastguard Worker 
118*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS
119*8d67ca89SAndroid Build Coastguard Worker 
120*8d67ca89SAndroid Build Coastguard Worker FTSENT* _Nullable fts_children(FTS* _Nonnull __fts, int __options);
121*8d67ca89SAndroid Build Coastguard Worker int fts_close(FTS* _Nonnull __fts);
122*8d67ca89SAndroid Build Coastguard Worker FTS* _Nullable fts_open(char* _Nullable const* _Nonnull __path, int __options, int (* _Nullable __comparator)(const FTSENT* _Nonnull * _Nonnull  __lhs, const FTSENT* _Nonnull * _Nonnull __rhs));
123*8d67ca89SAndroid Build Coastguard Worker FTSENT* _Nullable fts_read(FTS* _Nonnull __fts);
124*8d67ca89SAndroid Build Coastguard Worker int fts_set(FTS* _Nonnull __fts, FTSENT* _Nonnull __entry, int __options);
125*8d67ca89SAndroid Build Coastguard Worker 
126*8d67ca89SAndroid Build Coastguard Worker __END_DECLS
127*8d67ca89SAndroid Build Coastguard Worker 
128*8d67ca89SAndroid Build Coastguard Worker #endif /* !_FTS_H_ */
129