xref: /freebsd/lib/libc/gen/ftw.3 (revision 0aee91e1fb311f4f92779bb2c7ef0c1fe10d8d35)
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"
4016a97b85SRuslan 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
90*0aee91e1SChristian Brueffer.Po Fn nftw
91*0aee91e1SChristian Bruefferonly
92*0aee91e1SChristian Brueffer.Pc .
93c8f7bbe3SDavid Schultz.It Dv FTW_NS
94c8f7bbe3SDavid SchultzA file for which no
95c8f7bbe3SDavid Schultz.Xr stat 2
96c8f7bbe3SDavid Schultzinformation was available.
971c5f1e7aSRuslan ErmilovThe contents of the
981c5f1e7aSRuslan Ermilov.Vt stat
991c5f1e7aSRuslan Ermilovstructure are undefined.
100c8f7bbe3SDavid Schultz.It Dv FTW_SL
101c8f7bbe3SDavid SchultzA symbolic link.
102c8f7bbe3SDavid Schultz.It Dv FTW_SLN
103c8f7bbe3SDavid SchultzA symbolic link with a non-existent target
104*0aee91e1SChristian Brueffer.Po Fn nftw
105*0aee91e1SChristian Bruefferonly
106*0aee91e1SChristian Brueffer.Pc .
107c8f7bbe3SDavid Schultz.El
108c8f7bbe3SDavid Schultz.Pp
109c8f7bbe3SDavid SchultzThe
110c8f7bbe3SDavid Schultz.Fn ftw
111c8f7bbe3SDavid Schultzfunction traverses the tree in pre-order.
112c8f7bbe3SDavid SchultzThat is, it processes the directory before the directory's contents.
113c8f7bbe3SDavid Schultz.Pp
114c8f7bbe3SDavid SchultzThe
115c8f7bbe3SDavid Schultz.Fa maxfds
116c8f7bbe3SDavid Schultzargument specifies the maximum number of file descriptors
117c8f7bbe3SDavid Schultzto keep open while traversing the tree.
118c8f7bbe3SDavid SchultzIt has no effect in this implementation.
119c8f7bbe3SDavid Schultz.Pp
120c8f7bbe3SDavid SchultzThe
121c8f7bbe3SDavid Schultz.Fn nftw
122c8f7bbe3SDavid Schultzfunction has an additional
123c8f7bbe3SDavid Schultz.Fa flags
124c8f7bbe3SDavid Schultzargument with the following possible values:
1251c5f1e7aSRuslan Ermilov.Bl -tag -width ".Dv FTW_MOUNT"
126c8f7bbe3SDavid Schultz.It Dv FTW_PHYS
1271c5f1e7aSRuslan ErmilovPhysical walk, do not follow symbolic links.
128c8f7bbe3SDavid Schultz.It Dv FTW_MOUNT
129c8f7bbe3SDavid SchultzThe walk will not cross a mount point.
130c8f7bbe3SDavid Schultz.It FTW_DEPTH
131c8f7bbe3SDavid SchultzProcess directories in post-order.
132c8f7bbe3SDavid SchultzContents of a directory are visited before the directory itself.
133c8f7bbe3SDavid SchultzBy default,
134c8f7bbe3SDavid Schultz.Fn nftw
135c8f7bbe3SDavid Schultztraverses the tree in pre-order.
136c8f7bbe3SDavid Schultz.It FTW_CHDIR
137c8f7bbe3SDavid SchultzChange to a directory before reading it.
138c8f7bbe3SDavid SchultzBy default,
139c8f7bbe3SDavid Schultz.Fn nftw
140c8f7bbe3SDavid Schultzwill change its starting directory.
141c8f7bbe3SDavid SchultzThe current working directory will be restored to its original value before
142c8f7bbe3SDavid Schultz.Fn nftw
143c8f7bbe3SDavid Schultzreturns.
144c8f7bbe3SDavid Schultz.El
145c8f7bbe3SDavid Schultz.Sh RETURN VALUES
146c8f7bbe3SDavid SchultzIf the tree was traversed successfully, the
147c8f7bbe3SDavid Schultz.Fn ftw
148c8f7bbe3SDavid Schultzand
149c8f7bbe3SDavid Schultz.Fn nftw
150c8f7bbe3SDavid Schultzfunctions return 0.
151c8f7bbe3SDavid SchultzIf the function pointed to by
152c8f7bbe3SDavid Schultz.Fa fn
153c8f7bbe3SDavid Schultzreturns a non-zero value,
154c8f7bbe3SDavid Schultz.Fn ftw
155c8f7bbe3SDavid Schultzand
156c8f7bbe3SDavid Schultz.Fn nftw
157c8f7bbe3SDavid Schultzwill stop processing the tree and return the value from
158c8f7bbe3SDavid Schultz.Fa fn .
159c8f7bbe3SDavid SchultzBoth functions return \-1 if an error is detected.
160c8f7bbe3SDavid Schultz.Sh ERRORS
161c8f7bbe3SDavid SchultzThe
162c8f7bbe3SDavid Schultz.Fn ftw
163c8f7bbe3SDavid Schultzand
164c8f7bbe3SDavid Schultz.Fn nftw
165c8f7bbe3SDavid Schultzfunctions may fail and set
166c8f7bbe3SDavid Schultz.Va errno
167c8f7bbe3SDavid Schultzfor any of the errors specified for the library functions
168c8f7bbe3SDavid Schultz.Xr close 2 ,
169c8f7bbe3SDavid Schultz.Xr open 2 ,
170c8f7bbe3SDavid Schultz.Xr stat 2 ,
171c8f7bbe3SDavid Schultz.Xr malloc 3 ,
172c8f7bbe3SDavid Schultz.Xr opendir 3
173c8f7bbe3SDavid Schultzand
174c8f7bbe3SDavid Schultz.Xr readdir 3 .
175c8f7bbe3SDavid SchultzIf the
176c8f7bbe3SDavid Schultz.Dv FTW_CHDIR
177c8f7bbe3SDavid Schultzflag is set, the
178c8f7bbe3SDavid Schultz.Fn nftw
179c8f7bbe3SDavid Schultzfunction may fail and set
180c8f7bbe3SDavid Schultz.Va errno
181c8f7bbe3SDavid Schultzfor any of the errors specified for
182c8f7bbe3SDavid Schultz.Xr chdir 2 .
183c8f7bbe3SDavid SchultzIn addition, either function may fail and set
184c8f7bbe3SDavid Schultz.Va errno
185c8f7bbe3SDavid Schultzas follows:
186c8f7bbe3SDavid Schultz.Bl -tag -width Er
187c8f7bbe3SDavid Schultz.It Bq Er EINVAL
188c8f7bbe3SDavid SchultzThe
189c8f7bbe3SDavid Schultz.Fa maxfds
190c8f7bbe3SDavid Schultzargument is less than 1.
191c8f7bbe3SDavid Schultz.El
192c8f7bbe3SDavid Schultz.Sh SEE ALSO
193c8f7bbe3SDavid Schultz.Xr chdir 2 ,
194c8f7bbe3SDavid Schultz.Xr close 2 ,
195c8f7bbe3SDavid Schultz.Xr open 2 ,
196c8f7bbe3SDavid Schultz.Xr stat 2 ,
197c8f7bbe3SDavid Schultz.Xr fts 3 ,
198c8f7bbe3SDavid Schultz.Xr malloc 3 ,
199c8f7bbe3SDavid Schultz.Xr opendir 3 ,
200c8f7bbe3SDavid Schultz.Xr readdir 3
201c8f7bbe3SDavid Schultz.Sh STANDARDS
202c8f7bbe3SDavid SchultzThe
203c8f7bbe3SDavid Schultz.Fn ftw
204c8f7bbe3SDavid Schultzand
205c8f7bbe3SDavid Schultz.Fn nftw
206c8f7bbe3SDavid Schultzfunctions conform to
207c8f7bbe3SDavid Schultz.St -p1003.1-2001 .
208c8f7bbe3SDavid Schultz.Sh HISTORY
2091c5f1e7aSRuslan ErmilovThese functions first appeared in
2101c5f1e7aSRuslan Ermilov.At V.3 .
211c8f7bbe3SDavid SchultzTheir first
212c8f7bbe3SDavid Schultz.Fx
213c8f7bbe3SDavid Schultzappearance was in
214c8f7bbe3SDavid Schultz.Fx 5.3 .
215c8f7bbe3SDavid Schultz.Sh BUGS
216c8f7bbe3SDavid SchultzThe
217c8f7bbe3SDavid Schultz.Fa maxfds
218c8f7bbe3SDavid Schultzargument is currently ignored.
219