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