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