xref: /freebsd/lib/libc/gen/ftw.3 (revision 1c5f1e7afd22d1216b748375e88c14544192fa3b)
1c8f7bbe3SDavid Schultz.\"	$OpenBSD: ftw.3,v 1.5 2004/01/25 14:48:32 jmc Exp $
2c8f7bbe3SDavid Schultz.\"
3c8f7bbe3SDavid Schultz.\" Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
4c8f7bbe3SDavid Schultz.\"
5c8f7bbe3SDavid Schultz.\" Permission to use, copy, modify, and distribute this software for any
6c8f7bbe3SDavid Schultz.\" purpose with or without fee is hereby granted, provided that the above
7c8f7bbe3SDavid Schultz.\" copyright notice and this permission notice appear in all copies.
8c8f7bbe3SDavid Schultz.\"
9c8f7bbe3SDavid Schultz.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10c8f7bbe3SDavid Schultz.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11c8f7bbe3SDavid Schultz.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12c8f7bbe3SDavid Schultz.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13c8f7bbe3SDavid Schultz.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14c8f7bbe3SDavid Schultz.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15c8f7bbe3SDavid Schultz.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16c8f7bbe3SDavid Schultz.\"
17c8f7bbe3SDavid Schultz.\" Sponsored in part by the Defense Advanced Research Projects
18c8f7bbe3SDavid Schultz.\" Agency (DARPA) and Air Force Research Laboratory, Air Force
19c8f7bbe3SDavid Schultz.\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
20c8f7bbe3SDavid Schultz.\"
21c8f7bbe3SDavid Schultz.\" $FreeBSD$
22c8f7bbe3SDavid Schultz.\"
23c8f7bbe3SDavid Schultz.Dd July 5, 2004
24c8f7bbe3SDavid Schultz.Dt FTW 3
25c8f7bbe3SDavid Schultz.Os
26c8f7bbe3SDavid Schultz.Sh NAME
27c8f7bbe3SDavid Schultz.Nm ftw , nftw
28c8f7bbe3SDavid Schultz.Nd traverse (walk) a file tree
29c8f7bbe3SDavid Schultz.Sh SYNOPSIS
301c5f1e7aSRuslan Ermilov.In ftw.h
31c8f7bbe3SDavid Schultz.Ft int
32c8f7bbe3SDavid Schultz.Fo ftw
33c8f7bbe3SDavid Schultz.Fa "const char *path"
341c5f1e7aSRuslan Ermilov.Fa "int \*[lp]*fn\*[rp]\*[lp]const char *, const struct stat *, int\*[rp]"
35c8f7bbe3SDavid Schultz.Fa "int maxfds"
36c8f7bbe3SDavid Schultz.Fc
37c8f7bbe3SDavid Schultz.Ft int
38c8f7bbe3SDavid Schultz.Fo nftw
39c8f7bbe3SDavid Schultz.Fa "const char *path"
401c5f1e7aSRuslan Ermilov.Fa "int \*[lp]*fn\*[rp]\*[lp](const char *, const struct stat *, int, struct FTW *\*[rp]"
41c8f7bbe3SDavid Schultz.Fa "int maxfds"
42c8f7bbe3SDavid Schultz.Fa "int flags"
43c8f7bbe3SDavid Schultz.Fc
44c8f7bbe3SDavid Schultz.Sh DESCRIPTION
45c8f7bbe3SDavid SchultzThe
46c8f7bbe3SDavid Schultz.Fn ftw
47c8f7bbe3SDavid Schultzand
48c8f7bbe3SDavid Schultz.Fn nftw
49c8f7bbe3SDavid Schultzfunctions traverse (walk) the directory hierarchy rooted in
50c8f7bbe3SDavid Schultz.Fa path .
51c8f7bbe3SDavid SchultzFor each object in the hierarchy, these functions call the function
52c8f7bbe3SDavid Schultzpointed to by
53c8f7bbe3SDavid Schultz.Fa fn .
54c8f7bbe3SDavid SchultzThe
55c8f7bbe3SDavid Schultz.Fn ftw
561c5f1e7aSRuslan Ermilovfunction passes this function a pointer to a
571c5f1e7aSRuslan Ermilov.Dv NUL Ns
581c5f1e7aSRuslan Ermilov-terminated string containing
591c5f1e7aSRuslan Ermilovthe name of the object, a pointer to a
601c5f1e7aSRuslan Ermilov.Vt stat
611c5f1e7aSRuslan Ermilovstructure corresponding to the
62c8f7bbe3SDavid Schultzobject, and an integer flag.
63c8f7bbe3SDavid SchultzThe
64c8f7bbe3SDavid Schultz.Fn nftw
65c8f7bbe3SDavid Schultzfunction passes the aforementioned arguments plus a pointer to a
661c5f1e7aSRuslan Ermilov.Vt FTW
67c8f7bbe3SDavid Schultzstructure as defined by
681c5f1e7aSRuslan Ermilov.In ftw.h
69c8f7bbe3SDavid Schultz(shown below):
70c8f7bbe3SDavid Schultz.Bd -literal
71c8f7bbe3SDavid Schultzstruct FTW {
72c8f7bbe3SDavid Schultz    int base;	/* offset of basename into pathname */
73c8f7bbe3SDavid Schultz    int level;	/* directory depth relative to starting point */
74c8f7bbe3SDavid Schultz};
75c8f7bbe3SDavid Schultz.Ed
76c8f7bbe3SDavid Schultz.Pp
77c8f7bbe3SDavid SchultzPossible values for the flag passed to
78c8f7bbe3SDavid Schultz.Fa fn
79c8f7bbe3SDavid Schultzare:
801c5f1e7aSRuslan Ermilov.Bl -tag -width ".Dv FTW_DNR"
81c8f7bbe3SDavid Schultz.It Dv FTW_F
82c8f7bbe3SDavid SchultzA regular file.
83c8f7bbe3SDavid Schultz.It Dv FTW_D
84c8f7bbe3SDavid SchultzA directory being visited in pre-order.
85c8f7bbe3SDavid Schultz.It Dv FTW_DNR
86c8f7bbe3SDavid SchultzA directory which cannot be read.
87c8f7bbe3SDavid SchultzThe directory will not be descended into.
88c8f7bbe3SDavid Schultz.It Dv FTW_DP
89c8f7bbe3SDavid SchultzA directory being visited in post-order
901c5f1e7aSRuslan Ermilov.Fn ( nftw
91c8f7bbe3SDavid Schultzonly).
92c8f7bbe3SDavid Schultz.It Dv FTW_NS
93c8f7bbe3SDavid SchultzA file for which no
94c8f7bbe3SDavid Schultz.Xr stat 2
95c8f7bbe3SDavid Schultzinformation was available.
961c5f1e7aSRuslan ErmilovThe contents of the
971c5f1e7aSRuslan Ermilov.Vt stat
981c5f1e7aSRuslan Ermilovstructure are undefined.
99c8f7bbe3SDavid Schultz.It Dv FTW_SL
100c8f7bbe3SDavid SchultzA symbolic link.
101c8f7bbe3SDavid Schultz.It Dv FTW_SLN
102c8f7bbe3SDavid SchultzA symbolic link with a non-existent target
1031c5f1e7aSRuslan Ermilov.Fn ( nftw
104c8f7bbe3SDavid Schultzonly).
105c8f7bbe3SDavid Schultz.El
106c8f7bbe3SDavid Schultz.Pp
107c8f7bbe3SDavid SchultzThe
108c8f7bbe3SDavid Schultz.Fn ftw
109c8f7bbe3SDavid Schultzfunction traverses the tree in pre-order.
110c8f7bbe3SDavid SchultzThat is, it processes the directory before the directory's contents.
111c8f7bbe3SDavid Schultz.Pp
112c8f7bbe3SDavid SchultzThe
113c8f7bbe3SDavid Schultz.Fa maxfds
114c8f7bbe3SDavid Schultzargument specifies the maximum number of file descriptors
115c8f7bbe3SDavid Schultzto keep open while traversing the tree.
116c8f7bbe3SDavid SchultzIt has no effect in this implementation.
117c8f7bbe3SDavid Schultz.Pp
118c8f7bbe3SDavid SchultzThe
119c8f7bbe3SDavid Schultz.Fn nftw
120c8f7bbe3SDavid Schultzfunction has an additional
121c8f7bbe3SDavid Schultz.Fa flags
122c8f7bbe3SDavid Schultzargument with the following possible values:
1231c5f1e7aSRuslan Ermilov.Bl -tag -width ".Dv FTW_MOUNT"
124c8f7bbe3SDavid Schultz.It Dv FTW_PHYS
1251c5f1e7aSRuslan ErmilovPhysical walk, do not follow symbolic links.
126c8f7bbe3SDavid Schultz.It Dv FTW_MOUNT
127c8f7bbe3SDavid SchultzThe walk will not cross a mount point.
128c8f7bbe3SDavid Schultz.It FTW_DEPTH
129c8f7bbe3SDavid SchultzProcess directories in post-order.
130c8f7bbe3SDavid SchultzContents of a directory are visited before the directory itself.
131c8f7bbe3SDavid SchultzBy default,
132c8f7bbe3SDavid Schultz.Fn nftw
133c8f7bbe3SDavid Schultztraverses the tree in pre-order.
134c8f7bbe3SDavid Schultz.It FTW_CHDIR
135c8f7bbe3SDavid SchultzChange to a directory before reading it.
136c8f7bbe3SDavid SchultzBy default,
137c8f7bbe3SDavid Schultz.Fn nftw
138c8f7bbe3SDavid Schultzwill change its starting directory.
139c8f7bbe3SDavid SchultzThe current working directory will be restored to its original value before
140c8f7bbe3SDavid Schultz.Fn nftw
141c8f7bbe3SDavid Schultzreturns.
142c8f7bbe3SDavid Schultz.El
143c8f7bbe3SDavid Schultz.Sh RETURN VALUES
144c8f7bbe3SDavid SchultzIf the tree was traversed successfully, the
145c8f7bbe3SDavid Schultz.Fn ftw
146c8f7bbe3SDavid Schultzand
147c8f7bbe3SDavid Schultz.Fn nftw
148c8f7bbe3SDavid Schultzfunctions return 0.
149c8f7bbe3SDavid SchultzIf the function pointed to by
150c8f7bbe3SDavid Schultz.Fa fn
151c8f7bbe3SDavid Schultzreturns a non-zero value,
152c8f7bbe3SDavid Schultz.Fn ftw
153c8f7bbe3SDavid Schultzand
154c8f7bbe3SDavid Schultz.Fn nftw
155c8f7bbe3SDavid Schultzwill stop processing the tree and return the value from
156c8f7bbe3SDavid Schultz.Fa fn .
157c8f7bbe3SDavid SchultzBoth functions return \-1 if an error is detected.
158c8f7bbe3SDavid Schultz.Sh ERRORS
159c8f7bbe3SDavid SchultzThe
160c8f7bbe3SDavid Schultz.Fn ftw
161c8f7bbe3SDavid Schultzand
162c8f7bbe3SDavid Schultz.Fn nftw
163c8f7bbe3SDavid Schultzfunctions may fail and set
164c8f7bbe3SDavid Schultz.Va errno
165c8f7bbe3SDavid Schultzfor any of the errors specified for the library functions
166c8f7bbe3SDavid Schultz.Xr close 2 ,
167c8f7bbe3SDavid Schultz.Xr open 2 ,
168c8f7bbe3SDavid Schultz.Xr stat 2 ,
169c8f7bbe3SDavid Schultz.Xr malloc 3 ,
170c8f7bbe3SDavid Schultz.Xr opendir 3
171c8f7bbe3SDavid Schultzand
172c8f7bbe3SDavid Schultz.Xr readdir 3 .
173c8f7bbe3SDavid SchultzIf the
174c8f7bbe3SDavid Schultz.Dv FTW_CHDIR
175c8f7bbe3SDavid Schultzflag is set, the
176c8f7bbe3SDavid Schultz.Fn nftw
177c8f7bbe3SDavid Schultzfunction may fail and set
178c8f7bbe3SDavid Schultz.Va errno
179c8f7bbe3SDavid Schultzfor any of the errors specified for
180c8f7bbe3SDavid Schultz.Xr chdir 2 .
181c8f7bbe3SDavid SchultzIn addition, either function may fail and set
182c8f7bbe3SDavid Schultz.Va errno
183c8f7bbe3SDavid Schultzas follows:
184c8f7bbe3SDavid Schultz.Bl -tag -width Er
185c8f7bbe3SDavid Schultz.It Bq Er EINVAL
186c8f7bbe3SDavid SchultzThe
187c8f7bbe3SDavid Schultz.Fa maxfds
188c8f7bbe3SDavid Schultzargument is less than 1.
189c8f7bbe3SDavid Schultz.El
190c8f7bbe3SDavid Schultz.Sh SEE ALSO
191c8f7bbe3SDavid Schultz.Xr chdir 2 ,
192c8f7bbe3SDavid Schultz.Xr close 2 ,
193c8f7bbe3SDavid Schultz.Xr open 2 ,
194c8f7bbe3SDavid Schultz.Xr stat 2 ,
195c8f7bbe3SDavid Schultz.Xr fts 3 ,
196c8f7bbe3SDavid Schultz.Xr malloc 3 ,
197c8f7bbe3SDavid Schultz.Xr opendir 3 ,
198c8f7bbe3SDavid Schultz.Xr readdir 3
199c8f7bbe3SDavid Schultz.Sh STANDARDS
200c8f7bbe3SDavid SchultzThe
201c8f7bbe3SDavid Schultz.Fn ftw
202c8f7bbe3SDavid Schultzand
203c8f7bbe3SDavid Schultz.Fn nftw
204c8f7bbe3SDavid Schultzfunctions conform to
205c8f7bbe3SDavid Schultz.St -p1003.1-2001 .
206c8f7bbe3SDavid Schultz.Sh HISTORY
2071c5f1e7aSRuslan ErmilovThese functions first appeared in
2081c5f1e7aSRuslan Ermilov.At V.3 .
209c8f7bbe3SDavid SchultzTheir first
210c8f7bbe3SDavid Schultz.Fx
211c8f7bbe3SDavid Schultzappearance was in
212c8f7bbe3SDavid Schultz.Fx 5.3 .
213c8f7bbe3SDavid Schultz.Sh BUGS
214c8f7bbe3SDavid SchultzThe
215c8f7bbe3SDavid Schultz.Fa maxfds
216c8f7bbe3SDavid Schultzargument is currently ignored.
217