xref: /dflybsd-src/lib/libc/gen/ftw.3 (revision 4ca2ad2717ad6660cf122bb0fbc4ebeaeed6e638)
1176bf03bSSascha Wildner.\"	$OpenBSD: ftw.3,v 1.5 2004/01/25 14:48:32 jmc Exp $
2176bf03bSSascha Wildner.\"
3176bf03bSSascha Wildner.\" Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
4176bf03bSSascha Wildner.\"
5176bf03bSSascha Wildner.\" Permission to use, copy, modify, and distribute this software for any
6176bf03bSSascha Wildner.\" purpose with or without fee is hereby granted, provided that the above
7176bf03bSSascha Wildner.\" copyright notice and this permission notice appear in all copies.
8176bf03bSSascha Wildner.\"
9176bf03bSSascha Wildner.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10176bf03bSSascha Wildner.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11176bf03bSSascha Wildner.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12176bf03bSSascha Wildner.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13176bf03bSSascha Wildner.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14176bf03bSSascha Wildner.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15176bf03bSSascha Wildner.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16176bf03bSSascha Wildner.\"
17176bf03bSSascha Wildner.\" Sponsored in part by the Defense Advanced Research Projects
18176bf03bSSascha Wildner.\" Agency (DARPA) and Air Force Research Laboratory, Air Force
19176bf03bSSascha Wildner.\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
20176bf03bSSascha Wildner.\"
21176bf03bSSascha Wildner.\" $FreeBSD: src/lib/libc/gen/ftw.3,v 1.3 2005/11/23 15:41:36 ru Exp $
22176bf03bSSascha Wildner.\"
23176bf03bSSascha Wildner.Dd December 13, 2008
24176bf03bSSascha Wildner.Dt FTW 3
25176bf03bSSascha Wildner.Os
26176bf03bSSascha Wildner.Sh NAME
27176bf03bSSascha Wildner.Nm ftw , nftw
28176bf03bSSascha Wildner.Nd traverse (walk) a file tree
29bfceb400SSascha Wildner.Sh LIBRARY
30bfceb400SSascha Wildner.Lb libc
31176bf03bSSascha Wildner.Sh SYNOPSIS
32176bf03bSSascha Wildner.In ftw.h
33176bf03bSSascha Wildner.Ft int
34176bf03bSSascha Wildner.Fo ftw
35176bf03bSSascha Wildner.Fa "const char *path"
3625c75583SFranco Fichtner.Fa "int (*fn)(const char *, const struct stat *, int)"
37176bf03bSSascha Wildner.Fa "int maxfds"
38176bf03bSSascha Wildner.Fc
39176bf03bSSascha Wildner.Ft int
40176bf03bSSascha Wildner.Fo nftw
41176bf03bSSascha Wildner.Fa "const char *path"
4225c75583SFranco Fichtner.Fa "int (*fn)(const char *, const struct stat *, int, struct FTW *)"
43176bf03bSSascha Wildner.Fa "int maxfds"
44176bf03bSSascha Wildner.Fa "int flags"
45176bf03bSSascha Wildner.Fc
46176bf03bSSascha Wildner.Sh DESCRIPTION
47176bf03bSSascha WildnerThe
48176bf03bSSascha Wildner.Fn ftw
49176bf03bSSascha Wildnerand
50176bf03bSSascha Wildner.Fn nftw
51176bf03bSSascha Wildnerfunctions traverse (walk) the directory hierarchy rooted in
52176bf03bSSascha Wildner.Fa path .
53176bf03bSSascha WildnerFor each object in the hierarchy, these functions call the function
54176bf03bSSascha Wildnerpointed to by
55176bf03bSSascha Wildner.Fa fn .
56176bf03bSSascha WildnerThe
57176bf03bSSascha Wildner.Fn ftw
58176bf03bSSascha Wildnerfunction passes this function a pointer to a
59176bf03bSSascha Wildner.Dv NUL Ns
60176bf03bSSascha Wildner-terminated string containing
61176bf03bSSascha Wildnerthe name of the object, a pointer to a
62176bf03bSSascha Wildner.Vt stat
63176bf03bSSascha Wildnerstructure corresponding to the
64176bf03bSSascha Wildnerobject, and an integer flag.
65176bf03bSSascha WildnerThe
66176bf03bSSascha Wildner.Fn nftw
67176bf03bSSascha Wildnerfunction passes the aforementioned arguments plus a pointer to a
68176bf03bSSascha Wildner.Vt FTW
69176bf03bSSascha Wildnerstructure as defined by
70176bf03bSSascha Wildner.In ftw.h
71176bf03bSSascha Wildner(shown below):
72176bf03bSSascha Wildner.Bd -literal
73176bf03bSSascha Wildnerstruct FTW {
74176bf03bSSascha Wildner    int base;	/* offset of basename into pathname */
75176bf03bSSascha Wildner    int level;	/* directory depth relative to starting point */
76176bf03bSSascha Wildner};
77176bf03bSSascha Wildner.Ed
78176bf03bSSascha Wildner.Pp
79176bf03bSSascha WildnerPossible values for the flag passed to
80176bf03bSSascha Wildner.Fa fn
81176bf03bSSascha Wildnerare:
82176bf03bSSascha Wildner.Bl -tag -width ".Dv FTW_DNR"
83176bf03bSSascha Wildner.It Dv FTW_F
84176bf03bSSascha WildnerA regular file.
85176bf03bSSascha Wildner.It Dv FTW_D
86176bf03bSSascha WildnerA directory being visited in pre-order.
87176bf03bSSascha Wildner.It Dv FTW_DNR
88176bf03bSSascha WildnerA directory which cannot be read.
89176bf03bSSascha WildnerThe directory will not be descended into.
90176bf03bSSascha Wildner.It Dv FTW_DP
91176bf03bSSascha WildnerA directory being visited in post-order
92176bf03bSSascha Wildner.Fn ( nftw
93176bf03bSSascha Wildneronly).
94176bf03bSSascha Wildner.It Dv FTW_NS
95176bf03bSSascha WildnerA file for which no
96176bf03bSSascha Wildner.Xr stat 2
97176bf03bSSascha Wildnerinformation was available.
98176bf03bSSascha WildnerThe contents of the
99176bf03bSSascha Wildner.Vt stat
100176bf03bSSascha Wildnerstructure are undefined.
101176bf03bSSascha Wildner.It Dv FTW_SL
102176bf03bSSascha WildnerA symbolic link.
103176bf03bSSascha Wildner.It Dv FTW_SLN
104176bf03bSSascha WildnerA symbolic link with a non-existent target
105176bf03bSSascha Wildner.Fn ( nftw
106176bf03bSSascha Wildneronly).
107176bf03bSSascha Wildner.El
108176bf03bSSascha Wildner.Pp
109176bf03bSSascha WildnerThe
110176bf03bSSascha Wildner.Fn ftw
111176bf03bSSascha Wildnerfunction traverses the tree in pre-order.
112176bf03bSSascha WildnerThat is, it processes the directory before the directory's contents.
113176bf03bSSascha Wildner.Pp
114176bf03bSSascha WildnerThe
115176bf03bSSascha Wildner.Fa maxfds
116176bf03bSSascha Wildnerargument specifies the maximum number of file descriptors
117176bf03bSSascha Wildnerto keep open while traversing the tree.
118176bf03bSSascha WildnerIt has no effect in this implementation.
119176bf03bSSascha Wildner.Pp
120176bf03bSSascha WildnerThe
121176bf03bSSascha Wildner.Fn nftw
122176bf03bSSascha Wildnerfunction has an additional
123176bf03bSSascha Wildner.Fa flags
124176bf03bSSascha Wildnerargument with the following possible values:
125176bf03bSSascha Wildner.Bl -tag -width ".Dv FTW_MOUNT"
126176bf03bSSascha Wildner.It Dv FTW_PHYS
127176bf03bSSascha WildnerPhysical walk, do not follow symbolic links.
128176bf03bSSascha Wildner.It Dv FTW_MOUNT
129176bf03bSSascha WildnerThe walk will not cross a mount point.
130*4ca2ad27SSascha Wildner.It Dv FTW_DEPTH
131176bf03bSSascha WildnerProcess directories in post-order.
132176bf03bSSascha WildnerContents of a directory are visited before the directory itself.
133176bf03bSSascha WildnerBy default,
134176bf03bSSascha Wildner.Fn nftw
135176bf03bSSascha Wildnertraverses the tree in pre-order.
136*4ca2ad27SSascha Wildner.It Dv FTW_CHDIR
137176bf03bSSascha WildnerChange to a directory before reading it.
138176bf03bSSascha WildnerBy default,
139176bf03bSSascha Wildner.Fn nftw
140176bf03bSSascha Wildnerwill change its starting directory.
141176bf03bSSascha WildnerThe current working directory will be restored to its original value before
142176bf03bSSascha Wildner.Fn nftw
143176bf03bSSascha Wildnerreturns.
144176bf03bSSascha Wildner.El
145176bf03bSSascha Wildner.Sh RETURN VALUES
146176bf03bSSascha WildnerIf the tree was traversed successfully, the
147176bf03bSSascha Wildner.Fn ftw
148176bf03bSSascha Wildnerand
149176bf03bSSascha Wildner.Fn nftw
150176bf03bSSascha Wildnerfunctions return 0.
151176bf03bSSascha WildnerIf the function pointed to by
152176bf03bSSascha Wildner.Fa fn
153176bf03bSSascha Wildnerreturns a non-zero value,
154176bf03bSSascha Wildner.Fn ftw
155176bf03bSSascha Wildnerand
156176bf03bSSascha Wildner.Fn nftw
157176bf03bSSascha Wildnerwill stop processing the tree and return the value from
158176bf03bSSascha Wildner.Fa fn .
159176bf03bSSascha WildnerBoth functions return \-1 if an error is detected.
160176bf03bSSascha Wildner.Sh ERRORS
161176bf03bSSascha WildnerThe
162176bf03bSSascha Wildner.Fn ftw
163176bf03bSSascha Wildnerand
164176bf03bSSascha Wildner.Fn nftw
165176bf03bSSascha Wildnerfunctions may fail and set
166176bf03bSSascha Wildner.Va errno
167176bf03bSSascha Wildnerfor any of the errors specified for the library functions
168176bf03bSSascha Wildner.Xr close 2 ,
169176bf03bSSascha Wildner.Xr open 2 ,
170176bf03bSSascha Wildner.Xr stat 2 ,
171176bf03bSSascha Wildner.Xr malloc 3 ,
172176bf03bSSascha Wildner.Xr opendir 3
173176bf03bSSascha Wildnerand
174176bf03bSSascha Wildner.Xr readdir 3 .
175176bf03bSSascha WildnerIf the
176176bf03bSSascha Wildner.Dv FTW_CHDIR
177176bf03bSSascha Wildnerflag is set, the
178176bf03bSSascha Wildner.Fn nftw
179176bf03bSSascha Wildnerfunction may fail and set
180176bf03bSSascha Wildner.Va errno
181176bf03bSSascha Wildnerfor any of the errors specified for
182176bf03bSSascha Wildner.Xr chdir 2 .
183176bf03bSSascha WildnerIn addition, either function may fail and set
184176bf03bSSascha Wildner.Va errno
185176bf03bSSascha Wildneras follows:
186176bf03bSSascha Wildner.Bl -tag -width Er
187176bf03bSSascha Wildner.It Bq Er EINVAL
188176bf03bSSascha WildnerThe
189176bf03bSSascha Wildner.Fa maxfds
190176bf03bSSascha Wildnerargument is less than 1.
191176bf03bSSascha Wildner.El
192176bf03bSSascha Wildner.Sh SEE ALSO
193176bf03bSSascha Wildner.Xr chdir 2 ,
194176bf03bSSascha Wildner.Xr close 2 ,
195176bf03bSSascha Wildner.Xr open 2 ,
196176bf03bSSascha Wildner.Xr stat 2 ,
197176bf03bSSascha Wildner.Xr fts 3 ,
198176bf03bSSascha Wildner.Xr malloc 3 ,
199176bf03bSSascha Wildner.Xr opendir 3 ,
200176bf03bSSascha Wildner.Xr readdir 3
201176bf03bSSascha Wildner.Sh STANDARDS
202176bf03bSSascha WildnerThe
203176bf03bSSascha Wildner.Fn ftw
204176bf03bSSascha Wildnerand
205176bf03bSSascha Wildner.Fn nftw
206176bf03bSSascha Wildnerfunctions conform to
207176bf03bSSascha Wildner.St -p1003.1-2001 .
208176bf03bSSascha Wildner.Sh HISTORY
209176bf03bSSascha WildnerThese functions first appeared in
210176bf03bSSascha Wildner.At V.3 .
211176bf03bSSascha WildnerTheir first
212176bf03bSSascha Wildner.Fx
213176bf03bSSascha Wildnerappearance was in
214176bf03bSSascha Wildner.Fx 5.3 .
215176bf03bSSascha WildnerThey were imported into
216176bf03bSSascha Wildner.Dx 2.1 .
217176bf03bSSascha Wildner.Sh BUGS
218176bf03bSSascha WildnerThe
219176bf03bSSascha Wildner.Fa maxfds
220176bf03bSSascha Wildnerargument is currently ignored.
221