[BACK]Return to fts.3 CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

Annotation of src/lib/libc/gen/fts.3, Revision 1.10

1.9       cgd         1: .\" Copyright (c) 1989, 1991, 1993, 1994
1.5       cgd         2: .\"    The Regents of the University of California.  All rights reserved.
1.1       cgd         3: .\"
                      4: .\" Redistribution and use in source and binary forms, with or without
                      5: .\" modification, are permitted provided that the following conditions
                      6: .\" are met:
                      7: .\" 1. Redistributions of source code must retain the above copyright
                      8: .\"    notice, this list of conditions and the following disclaimer.
                      9: .\" 2. Redistributions in binary form must reproduce the above copyright
                     10: .\"    notice, this list of conditions and the following disclaimer in the
                     11: .\"    documentation and/or other materials provided with the distribution.
                     12: .\" 3. All advertising materials mentioning features or use of this software
                     13: .\"    must display the following acknowledgement:
                     14: .\"    This product includes software developed by the University of
                     15: .\"    California, Berkeley and its contributors.
                     16: .\" 4. Neither the name of the University nor the names of its contributors
                     17: .\"    may be used to endorse or promote products derived from this software
                     18: .\"    without specific prior written permission.
                     19: .\"
                     20: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     21: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     22: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     23: .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     24: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     25: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     26: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     27: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     28: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     29: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     30: .\" SUCH DAMAGE.
                     31: .\"
1.10    ! mycroft    32: .\"     from: @(#)fts.3        8.5 (Berkeley) 4/16/94
        !            33: .\"    $Id: fts.3,v 1.9 1994/04/12 03:21:35 cgd Exp $
1.1       cgd        34: .\"
1.10    ! mycroft    35: .Dd April 16, 1994
1.1       cgd        36: .Dt FTS 3
                     37: .Os
                     38: .Sh NAME
                     39: .Nm fts
                     40: .Nd traverse a file hierarchy
                     41: .Sh SYNOPSIS
                     42: .Fd #include <sys/types.h>
                     43: .Fd #include <sys/stat.h>
                     44: .Fd #include <fts.h>
                     45: .Ft FTS *
1.2       mycroft    46: .Fn fts_open "char * const *path_argv" "int options" "int *compar(const FTSENT **, const FTSENT **)"
1.1       cgd        47: .Ft FTSENT *
                     48: .Fn fts_read "FTS *ftsp"
                     49: .Ft FTSENT *
1.2       mycroft    50: .Fn fts_children "FTS *ftsp" "int options"
1.1       cgd        51: .Ft int
                     52: .Fn fts_set "FTS ftsp" "FTSENT *f" "int options"
                     53: .Ft int
                     54: .Fn fts_close "FTS *ftsp"
                     55: .Sh DESCRIPTION
                     56: The
                     57: .Nm fts
                     58: functions are provided for traversing
                     59: .Tn UNIX
                     60: file hierarchies.
1.2       mycroft    61: A simple overview is that the
1.1       cgd        62: .Fn fts_open
1.2       mycroft    63: function returns a ``handle'' on a file hierarchy, which is then supplied to
1.1       cgd        64: the other
                     65: .Nm fts
1.2       mycroft    66: functions.
1.1       cgd        67: The function
                     68: .Fn fts_read
                     69: returns a pointer to a structure describing one of the files in the file
                     70: hierarchy.
                     71: The function
                     72: .Fn fts_children
                     73: returns a pointer to a linked list of structures, each of which describes
                     74: one of the files contained in a directory in the hierarchy.
                     75: In general, directories are visited two distinguishable times; in pre-order
                     76: (before any of their descendants are visited) and in post-order (after all
                     77: of their descendants have been visited).
                     78: Files are visited once.
                     79: It is possible to walk the hierarchy ``logically'' (ignoring symbolic links)
                     80: or physically (visiting symbolic links), order the walk of the hierarchy or
                     81: prune and/or re-visit portions of the hierarchy.
                     82: .Pp
                     83: Two structures are defined (and typedef'd) in the include file
                     84: .Aq Pa fts.h .
                     85: The first is
                     86: .Fa FTS ,
1.2       mycroft    87: the structure that represents the file hierarchy itself.
1.1       cgd        88: The second is
                     89: .Fa FTSENT ,
                     90: the structure that represents a file in the file
                     91: hierarchy.
                     92: Normally, an
                     93: .Fa FTSENT
                     94: structure is returned for every file in the file
                     95: hierarchy.
                     96: In this manual page, ``file'' and
                     97: .Dq Fa FTSENT No structure
                     98: are generally
                     99: interchangeable.
                    100: The
                    101: .Fa FTSENT
                    102: structure contains at least the following fields, which are
                    103: described in greater detail below:
                    104: .Bd -literal
                    105: typedef struct _ftsent {
                    106:        u_short fts_info;               /* flags for FTSENT structure */
                    107:        char *fts_accpath;              /* access path */
                    108:        char *fts_path;                 /* root path */
                    109:        short fts_pathlen;              /* strlen(fts_path) */
                    110:        char *fts_name;                 /* file name */
                    111:        short fts_namelen;              /* strlen(fts_name) */
                    112:        short fts_level;                /* depth (\-1 to N) */
1.9       cgd       113:        int fts_errno;                  /* file errno */
1.1       cgd       114:        long fts_number;                /* local numeric value */
                    115:        void *fts_pointer;              /* local address value */
                    116:        struct ftsent *fts_parent;      /* parent directory */
1.2       mycroft   117:        struct ftsent *fts_link;        /* next file structure */
                    118:        struct ftsent *fts_cycle;       /* cycle structure */
                    119:        struct stat *fts_statp;         /* stat(2) information */
1.1       cgd       120: } FTSENT;
                    121: .Ed
                    122: .Pp
                    123: These fields are defined as follows:
                    124: .Bl -tag -width "fts_namelen"
                    125: .It Fa fts_info
                    126: One of the following flags describing the returned
                    127: .Fa FTSENT
                    128: structure and
                    129: the file it represents.
                    130: With the exception of directories without errors
                    131: .Pq Dv FTS_D ,
                    132: all of these
                    133: entries are terminal, that is, they will not be revisited, nor will any
                    134: of their descendants be visited.
                    135: .Bl  -tag -width FTS_DEFAULT
                    136: .It Dv FTS_D
                    137: A directory being visited in pre-order.
                    138: .It Dv FTS_DC
                    139: A directory that causes a cycle in the tree.
                    140: (The
1.2       mycroft   141: .Fa fts_cycle
1.1       cgd       142: field of the
                    143: .Fa FTSENT
                    144: structure will be filled in as well.)
                    145: .It Dv FTS_DEFAULT
                    146: Any
                    147: .Fa FTSENT
                    148: structure that represents a file type not explicitly described
                    149: by one of the other
                    150: .Fa fts_info
                    151: values.
                    152: .It Dv FTS_DNR
                    153: A directory which cannot be read.
1.2       mycroft   154: This is an error return, and the
                    155: .Fa fts_errno
                    156: field will be set to indicate what caused the error.
1.1       cgd       157: .It Dv FTS_DOT
                    158: A file named
                    159: .Ql \&.
                    160: or
                    161: .Ql ..
                    162: which was not specified as a file name to
                    163: .Fn fts_open
                    164: (see
                    165: .Dv FTS_SEEDOT ) .
                    166: .It Dv FTS_DP
                    167: A directory being visited in post-order.
                    168: The contents of the
                    169: .Fa FTSENT
                    170: structure will be unchanged from when
                    171: it was returned in pre-order, i.e. with the
                    172: .Fa fts_info
                    173: field set to
                    174: .Dv FTS_D .
                    175: .It Dv FTS_ERR
1.2       mycroft   176: This is an error return, and the
                    177: .Fa fts_errno
                    178: field will be set to indicate what caused the error.
1.1       cgd       179: .It Dv FTS_F
                    180: A regular file.
                    181: .It Dv FTS_NS
                    182: A file for which no
                    183: .Xr stat 2
                    184: information was available.
                    185: The contents of the
1.2       mycroft   186: .Fa fts_statp
1.1       cgd       187: field are undefined.
1.2       mycroft   188: This is an error return, and the
                    189: .Fa fts_errno
                    190: field will be set to indicate what caused the error.
1.1       cgd       191: .It Dv FTS_NSOK
                    192: A file for which no
                    193: .Xr stat 2
                    194: information was requested.
                    195: The contents of the
1.2       mycroft   196: .Fa fts_statp
1.1       cgd       197: field are undefined.
                    198: .It Dv FTS_SL
                    199: A symbolic link.
                    200: .It Dv FTS_SLNONE
                    201: A symbolic link with a non-existent target.
                    202: The contents of the
1.2       mycroft   203: .Fa fts_statp
                    204: field reference the file characteristic information for the symbolic link
1.1       cgd       205: itself.
                    206: .El
                    207: .It Fa fts_accpath
                    208: A path for accessing the file from the current directory.
                    209: .It Fa fts_path
                    210: The path for the file relative to the root of the traversal.
                    211: This path contains the path specified to
                    212: .Fn fts_open
                    213: as a prefix.
                    214: .It Fa fts_pathlen
                    215: The length of the string referenced by
                    216: .Fa fts_path .
                    217: .It Fa fts_name
                    218: The name of the file.
                    219: .It Fa fts_namelen
                    220: The length of the string referenced by
                    221: .Fa fts_name .
                    222: .It Fa fts_level
                    223: The depth of the traversal, numbered from \-1 to N, where this file
                    224: was found.
                    225: The
                    226: .Fa FTSENT
                    227: structure representing the parent of the starting point (or root)
                    228: of the traversal is numbered \-1, and the
                    229: .Fa FTSENT
                    230: structure for the root
                    231: itself is numbered 0.
1.2       mycroft   232: .It Fa fts_errno
                    233: Upon return of a
                    234: .Fa FTSENT
                    235: structure from the
                    236: .Fn fts_children
                    237: or
                    238: .Fn fts_read
                    239: functions, with its
                    240: .Fa fts_info
                    241: field set to
                    242: .Dv FTS_DNR ,
                    243: .Dv FTS_ERR
                    244: or
                    245: .Dv FTS_NS ,
                    246: the
                    247: .Fa fts_errno
                    248: field contains the value of the external variable
                    249: .Va errno
                    250: specifying the cause of the error.
                    251: Otherwise, the contents of the
                    252: .Fa fts_errno
                    253: field are undefined.
1.1       cgd       254: .It Fa fts_number
                    255: This field is provided for the use of the application program and is
                    256: not modified by the
                    257: .Nm fts
                    258: functions.
                    259: It is initialized to 0.
                    260: .It Fa fts_pointer
                    261: This field is provided for the use of the application program and is
                    262: not modified by the
                    263: .Nm fts
                    264: functions.
                    265: It is initialized to
                    266: .Dv NULL .
                    267: .It Fa fts_parent
                    268: A pointer to the
                    269: .Fa FTSENT
                    270: structure referencing the file in the hierarchy
                    271: immediately above the current file, i.e. the directory of which this
                    272: file is a member.
                    273: A parent structure for the initial entry point is provided as well,
                    274: however, only the
                    275: .Fa fts_level ,
                    276: .Fa fts_number
                    277: and
                    278: .Fa fts_pointer
                    279: fields are guaranteed to be initialized.
                    280: .It Fa fts_link
1.2       mycroft   281: Upon return from the
                    282: .Fn fts_children
                    283: function, the
                    284: .Fa fts_link
                    285: field points to the next structure in the NULL-terminated linked list of
                    286: directory members.
                    287: Otherwise, the contents of the
1.1       cgd       288: .Fa fts_link
1.2       mycroft   289: field are undefined.
                    290: .It Fa fts_cycle
1.1       cgd       291: If a directory causes a cycle in the hierarchy (see
                    292: .Dv FTS_DC ) ,
                    293: either because
                    294: of a hard link between two directories, or a symbolic link pointing to a
                    295: directory, the
1.2       mycroft   296: .Fa fts_cycle
1.1       cgd       297: field of the structure will point to the
                    298: .Fa FTSENT
1.2       mycroft   299: structure in the hierarchy that references the same file as the current
1.1       cgd       300: .Fa FTSENT
                    301: structure.
                    302: Otherwise, the contents of the
1.2       mycroft   303: .Fa fts_cycle
1.1       cgd       304: field are undefined.
1.2       mycroft   305: .It Fa fts_statp
                    306: A pointer to
                    307: .Xr stat 2
1.1       cgd       308: information for the file.
                    309: .El
1.2       mycroft   310: .Pp
                    311: A single buffer is used for all of the paths of all of the files in the
                    312: file hierarchy.
                    313: Therefore, the
                    314: .Fa fts_path
                    315: and
                    316: .Fa fts_accpath
                    317: fields are guaranteed to be
                    318: .Dv NULL Ns -terminated
                    319: .Em only
                    320: for the file most recently returned by
                    321: .Fn fts_read .
                    322: To use these fields to reference any files represented by other
                    323: .Fa FTSENT
                    324: structures will require that the path buffer be modified using the
                    325: information contained in that
                    326: .Fa FTSENT
                    327: structure's
                    328: .Fa fts_pathlen
                    329: field.
                    330: Any such modifications should be undone before further calls to
                    331: .Fn fts_read
                    332: are attempted.
                    333: The
                    334: .Fa fts_name
                    335: field is always
                    336: .Dv NULL Ns -terminated.
1.1       cgd       337: .Sh FTS_OPEN
                    338: The
                    339: .Fn fts_open
                    340: function takes a pointer to an array of character pointers naming one
                    341: or more paths which make up a logical file hierarchy to be traversed.
                    342: The array must be terminated by a
                    343: .Dv NULL
                    344: pointer.
                    345: .Pp
                    346: There are
                    347: a number of options, at least one of which (either
                    348: .Dv FTS_LOGICAL
                    349: or
                    350: .Dv FTS_PHYSICAL )
                    351: must be specified.
                    352: The options are selected by
                    353: .Em or Ns 'ing
                    354: the following values:
                    355: .Bl -tag -width "FTS_PHYSICAL"
1.2       mycroft   356: .It Dv FTS_COMFOLLOW
                    357: This option causes any symbolic link specified as a root path to be
                    358: followed immediately whether or not
                    359: .Dv FTS_LOGICAL
                    360: is also specified.
1.1       cgd       361: .It Dv FTS_LOGICAL
                    362: This option causes the
                    363: .Nm fts
                    364: routines to return
                    365: .Fa FTSENT
                    366: structures for the targets of symbolic links
                    367: instead of the symbolic links themselves.
                    368: If this option is set, the only symbolic links for which
                    369: .Fa FTSENT
                    370: structures
                    371: are returned to the application are those referencing non-existent files.
                    372: Either
                    373: .Dv FTS_LOGICAL
                    374: or
                    375: .Dv FTS_PHYSICAL
                    376: .Em must
                    377: be provided to the
                    378: .Fn fts_open
                    379: function.
                    380: .It Dv FTS_NOCHDIR
                    381: As a performance optimization, the
                    382: .Nm fts
                    383: functions change directories as they walk the file hierarchy.
                    384: This has the side-effect that an application cannot rely on being
                    385: in any particular directory during the traversal.
                    386: The
                    387: .Dv FTS_NOCHDIR
                    388: option turns off this optimization, and the
                    389: .Nm fts
                    390: functions will not change the current directory.
                    391: Note that applications should not themselves change their current directory
                    392: and try to access files unless
                    393: .Dv FTS_NOCHDIR
                    394: is specified and absolute
                    395: pathnames were provided as arguments to
                    396: .Fn fts_open .
                    397: .It Dv FTS_NOSTAT
                    398: By default, returned
                    399: .Fa FTSENT
1.2       mycroft   400: structures reference file characteristic information (the
                    401: .Fa statp
1.1       cgd       402: field) for each file visited.
                    403: This option relaxes that requirement as a performance optimization,
                    404: allowing the
                    405: .Nm fts
                    406: functions to set the
                    407: .Fa fts_info
                    408: field to
                    409: .Dv FTS_NSOK
                    410: and leave the contents of the
1.2       mycroft   411: .Fa statp
1.1       cgd       412: field undefined.
                    413: .It Dv FTS_PHYSICAL
                    414: This option causes the
                    415: .Nm fts
                    416: routines to return
                    417: .Fa FTSENT
                    418: structures for symbolic links themselves instead
                    419: of the target files they point to.
                    420: If this option is set,
                    421: .Fa FTSENT
                    422: structures for all symbolic links in the
                    423: hierarchy are returned to the application.
                    424: Either
                    425: .Dv FTS_LOGICAL
                    426: or
                    427: .Dv FTS_PHYSICAL
                    428: .Em must
                    429: be provided to the
                    430: .Fn fts_open
                    431: function.
                    432: .It Dv FTS_SEEDOT
                    433: By default, unless they are specified as path arguments to
                    434: .Fn fts_open ,
                    435: any files named
                    436: .Ql \&.
1.2       mycroft   437: or
1.1       cgd       438: .Ql ..
1.2       mycroft   439: encountered in the file hierarchy are ignored.
1.1       cgd       440: This option causes the
                    441: .Nm fts
                    442: routines to return
                    443: .Fa FTSENT
                    444: structures for them.
                    445: .It Dv FTS_XDEV
                    446: This option prevents
                    447: .Nm fts
                    448: from descending into directories that have a different device number
                    449: than the file from which the descent began.
                    450: .El
                    451: .Pp
                    452: The argument
                    453: .Fn compar
                    454: specifies a user-defined function which may be used to order the traversal
                    455: of the hierarchy.
                    456: It
                    457: takes two pointers to pointers to
                    458: .Fa FTSENT
                    459: structures as arguments and
                    460: should return a negative value, zero, or a positive value to indicate
                    461: if the file referenced by its first argument comes before, in any order
                    462: with respect to, or after, the file referenced by its second argument.
                    463: The
                    464: .Fa fts_accpath ,
                    465: .Fa fts_path
                    466: and
                    467: .Fa fts_pathlen
                    468: fields of the
                    469: .Fa FTSENT
                    470: structures may
                    471: .Em never
                    472: be used in this comparison.
                    473: If the
                    474: .Fa fts_info
                    475: field is set to
                    476: .Dv FTS_NS
                    477: or
1.2       mycroft   478: .Dv FTS_NSOK ,
1.1       cgd       479: the
1.2       mycroft   480: .Fa fts_statp
1.1       cgd       481: field may not either.
                    482: If the
                    483: .Fn compar
                    484: argument is
                    485: .Dv NULL ,
1.2       mycroft   486: the directory traversal order is in the order listed in
                    487: .Fa path_argv
                    488: for the root paths, and in the order listed in the directory for
                    489: everything else.
1.1       cgd       490: .Sh FTS_READ
                    491: The
                    492: .Fn fts_read
                    493: function returns a pointer to an
                    494: .Fa FTSENT
                    495: structure describing a file in
                    496: the hierarchy.
                    497: Directories (that are readable and do not cause cycles) are visited at
                    498: least twice, once in pre-order and once in post-order.
                    499: All other files are visited at least once.
                    500: (Hard links between directories that do not cause cycles or symbolic
                    501: links to symbolic links may cause files to be visited more than once,
                    502: or directories more than twice.)
                    503: .Pp
                    504: If all the members of the hierarchy have been returned,
                    505: .Fn fts_read
                    506: returns
                    507: .Dv NULL
                    508: and sets the external variable
                    509: .Va errno
                    510: to 0.
                    511: If an error unrelated to a file in the hierarchy occurs,
                    512: .Fn fts_read
                    513: returns
                    514: .Dv NULL
                    515: and sets
                    516: .Va errno
                    517: appropriately.
                    518: If an error related to a returned file occurs, a pointer to an
                    519: .Fa FTSENT
                    520: structure is returned, and
                    521: .Va errno
                    522: may or may not have been set (see
                    523: .Fa fts_info ) .
                    524: .Pp
                    525: The
                    526: .Fa FTSENT
                    527: structures returned by
                    528: .Fn fts_read
                    529: may be overwritten after a call to
                    530: .Fn fts_close
                    531: on the same file hierarchy stream, or, after a call to
                    532: .Fn fts_read
                    533: on the same file hierarchy stream unless they represent a file of type
                    534: directory, in which case they will not be overwritten until after a call to
                    535: .Fn fts_read
                    536: after the
                    537: .Fa FTSENT
                    538: structure has been returned by the function
                    539: .Fn fts_read
                    540: in post-order.
                    541: .Sh FTS_CHILDREN
                    542: The
                    543: .Fn fts_children
                    544: function returns a pointer to an
                    545: .Fa FTSENT
1.2       mycroft   546: structure describing the first entry in a NULL-terminated linked list of
                    547: the files in the directory represented by the
1.1       cgd       548: .Fa FTSENT
                    549: structure most recently returned by
                    550: .Fn fts_read .
                    551: The list is linked through the
                    552: .Fa fts_link
                    553: field of the
                    554: .Fa FTSENT
1.2       mycroft   555: structure, and is ordered by the user-specified comparison function, if any.
1.1       cgd       556: Repeated calls to
                    557: .Fn fts_children
                    558: will recreate this linked list.
                    559: .Pp
1.2       mycroft   560: As a special case, if
                    561: .Fn fts_read
                    562: has not yet been called for a hierarchy,
                    563: .Fn fts_children
                    564: will return a pointer to the files in the logical directory specified to
                    565: .Fn fts_open ,
                    566: i.e. the arguments specified to
                    567: .Fn fts_open .
                    568: Otherwise, if the
1.1       cgd       569: .Fa FTSENT
                    570: structure most recently returned by
                    571: .Fn fts_read
                    572: is not a directory being visited in pre-order,
                    573: or the directory does not contain any files,
                    574: .Fn fts_children
                    575: returns
                    576: .Dv NULL
                    577: and sets
                    578: .Va errno
                    579: to zero.
                    580: If an error occurs,
                    581: .Fn fts_children
                    582: returns
                    583: .Dv NULL
                    584: and sets
                    585: .Va errno
                    586: appropriately.
                    587: .Pp
                    588: The
                    589: .Fa FTSENT
                    590: structures returned by
                    591: .Fn fts_children
                    592: may be overwritten after a call to
1.2       mycroft   593: .Fn fts_children ,
1.1       cgd       594: .Fn fts_close
                    595: or
                    596: .Fn fts_read
                    597: on the same file hierarchy stream.
                    598: .Pp
1.2       mycroft   599: .Em Option
                    600: may be set to the following value:
                    601: .Bl -tag -width FTS_NAMEONLY
                    602: .It Dv FTS_NAMEONLY
                    603: Only the names of the files are needed.
                    604: The contents of all the fields in the returned linked list of structures
                    605: are undefined with the exception of the
                    606: .Fa fts_name
1.1       cgd       607: and
1.2       mycroft   608: .Fa fts_namelen
                    609: fields.
                    610: .El
1.1       cgd       611: .Sh FTS_SET
                    612: The function
                    613: .Fn fts_set
                    614: allows the user application to determine further processing for the
                    615: file
                    616: .Fa f
                    617: of the stream
                    618: .Fa ftsp .
                    619: The
                    620: .Fn fts_set
                    621: function
                    622: returns 0 on success, and \-1 if an error occurs.
                    623: .Em Option
                    624: must be set to one of the following values:
                    625: .Bl -tag -width FTS_PHYSICAL
                    626: .It Dv FTS_AGAIN
                    627: Re-visit the file; any file type may be re-visited.
                    628: The next call to
                    629: .Fn fts_read
                    630: will return the referenced file.
                    631: The
                    632: .Fa fts_stat
                    633: and
                    634: .Fa fts_info
                    635: fields of the structure will be reinitialized at that time,
                    636: but no other fields will have been changed.
                    637: This option is meaningful only for the most recently returned
                    638: file from
                    639: .Fn fts_read .
                    640: Normal use is for post-order directory visits, where it causes the
                    641: directory to be re-visited (in both pre and post-order) as well as all
                    642: of its descendants.
                    643: .It Dv FTS_FOLLOW
                    644: The referenced file must be a symbolic link.
                    645: If the referenced file is the one most recently returned by
                    646: .Fn fts_read ,
                    647: the next call to
                    648: .Fn fts_read
                    649: returns the file with the
                    650: .Fa fts_info
                    651: and
1.2       mycroft   652: .Fa fts_statp
1.1       cgd       653: fields reinitialized to reflect the target of the symbolic link instead
                    654: of the symbolic link itself.
                    655: If the file is one of those most recently returned by
                    656: .Fn fts_children ,
                    657: the
                    658: .Fa fts_info
                    659: and
1.2       mycroft   660: .Fa fts_statp
1.1       cgd       661: fields of the structure, when returned by
                    662: .Fn fts_read ,
                    663: will reflect the target of the symbolic link instead of the symbolic link
                    664: itself.
                    665: In either case, if the target of the symbolic link does not exist the
                    666: fields of the returned structure will be unchanged and the
                    667: .Fa fts_info
                    668: field will be set to
                    669: .Dv FTS_SLNONE .
                    670: .Pp
                    671: If the target of the link is a directory, the pre-order return, followed
                    672: by the return of all of its descendants, followed by a post-order return,
                    673: is done.
                    674: .It Dv FTS_SKIP
                    675: No descendants of this file are visited.
                    676: The file may be one of those most recently returned by either
                    677: .Fn fts_children
                    678: or
                    679: .Fn fts_read .
                    680: .El
                    681: .Sh FTS_CLOSE
                    682: The
                    683: .Fn fts_close
                    684: function closes a file hierarchy stream
                    685: .Fa ftsp
                    686: and restores the current directory to the directory from which
                    687: .Fn fts_open
                    688: was called to open
                    689: .Fa ftsp .
                    690: The
                    691: .Fn fts_close
                    692: function
                    693: returns 0 on success, and \-1 if an error occurs.
                    694: .Sh ERRORS
                    695: The function
                    696: .Fn fts_open
1.2       mycroft   697: may fail and set
                    698: .Va errno
                    699: for any of the errors specified for the library functions
1.1       cgd       700: .Xr open 2
                    701: and
                    702: .Xr malloc 3 .
                    703: .Pp
                    704: The function
                    705: .Fn fts_close
1.2       mycroft   706: may fail and set
                    707: .Va errno
                    708: for any of the errors specified for the library functions
1.1       cgd       709: .Xr chdir 2
                    710: and
                    711: .Xr close 2 .
                    712: .Pp
                    713: The functions
1.2       mycroft   714: .Fn fts_read
1.1       cgd       715: and
                    716: .Fn fts_children
1.2       mycroft   717: may fail and set
                    718: .Va errno
                    719: for any of the errors specified for the library functions
1.1       cgd       720: .Xr chdir 2 ,
                    721: .Xr malloc 3 ,
                    722: .Xr opendir 3 ,
                    723: .Xr readdir 3
                    724: and
                    725: .Xr stat 2 .
1.2       mycroft   726: .Pp
                    727: In addition,
                    728: .Fn fts_children ,
                    729: .Fn fts_open
                    730: and
                    731: .Fn fts_set
                    732: may fail and set
                    733: .Va errno
                    734: as follows:
                    735: .Bl -tag -width Er
                    736: .It Bq Er EINVAL
                    737: The options were invalid.
1.8       jtc       738: .El
1.1       cgd       739: .Sh SEE ALSO
                    740: .Xr find 1 ,
                    741: .Xr chdir 2 ,
                    742: .Xr stat 2 ,
                    743: .Xr qsort 3
1.7       jtc       744: .Sh STANDARDS
                    745: The
                    746: .Nm fts
1.9       cgd       747: utility is expected to be included in a future
                    748: .St -p1003.1-88
                    749: revision.

CVSweb <webmaster@jp.NetBSD.org>