4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
24 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
28 /* Copyright (c) 1988 AT&T */
29 /* All Rights Reserved */
35 #include <sys/feature_tests.h>
37 #include <sys/types.h>
45 * Codes for the third argument to the user-supplied function.
48 #define FTW_F 0 /* file */
49 #define FTW_D 1 /* directory */
50 #define FTW_DNR 2 /* directory without read permission */
51 #define FTW_NS 3 /* unknown type, stat failed */
52 #define FTW_SL 4 /* symbolic link */
53 #define FTW_DP 6 /* directory */
54 #define FTW_SLN 7 /* symbolic link that points to nonexistent file */
55 #define FTW_DL 8 /* private interface for find utility */
58 * Codes for the fourth argument to nftw. You can specify the
59 * union of these flags.
62 #define FTW_PHYS 01 /* use lstat instead of stat */
63 #define FTW_MOUNT 02 /* do not cross a mount point */
64 #define FTW_CHDIR 04 /* chdir to each directory before reading */
65 #define FTW_DEPTH 010 /* call descendents before calling the parent */
66 #define FTW_ANYERR 020 /* return FTW_NS on any stat failure */
67 #define FTW_HOPTION 040 /* private interface for find utility */
68 #define FTW_NOLOOP 0100 /* private interface for find utility */
70 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || defined(_XPG4_2)
81 #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) ... */
84 * legal values for quit
91 /* large file compilation environment setup */
92 #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
93 #ifdef __PRAGMA_REDEFINE_EXTNAME
94 #pragma redefine_extname _xftw _xftw64
95 #pragma redefine_extname _ftw _ftw64
96 #if !defined(_XOPEN_SOURCE) || defined(_XPG5)
97 #pragma redefine_extname nftw nftw64
99 #else /* __PRAGMA_REDEFINE_EXTNAME */
100 #define _xftw _xftw64
102 #if !defined(_XOPEN_SOURCE) || defined(_XPG5)
105 #endif /* __PRAGMA_REDEFINE_EXTNAME */
106 #endif /* !_LP64 && _FILE_OFFSET_BITS == 64 */
108 /* In the LP64 compilation environment, all APIs are already large file */
109 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
110 #ifdef __PRAGMA_REDEFINE_EXTNAME
111 #pragma redefine_extname _xftw64 _xftw
112 #pragma redefine_extname _ftw64 _ftw
113 #if !defined(_XOPEN_SOURCE) || defined(_XPG5)
114 #pragma redefine_extname nftw64 nftw
116 #else /* __PRAGMA_REDEFINE_EXTNAME */
117 #define _xftw64 _xftw
119 #if !defined(_XOPEN_SOURCE) || defined(_XPG5)
122 #endif /* __PRAGMA_REDEFINE_EXTNAME */
123 #endif /* _LP64 && _LARGEFILE64_SOURCE */
125 extern int ftw(const char *,
126 int (*)(const char *, const struct stat
*, int), int);
127 extern int _xftw(int, const char *,
128 int (*)(const char *, const struct stat
*, int), int);
129 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || defined(_XPG4_2)
130 extern int nftw(const char *,
131 int (*)(const char *, const struct stat
*, int, struct FTW
*),
133 #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) ... */
136 * transitional large file interface versions
138 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
139 !defined(__PRAGMA_REDEFINE_EXTNAME))
140 extern int ftw64(const char *,
141 int (*)(const char *, const struct stat64
*, int), int);
142 extern int _xftw64(int, const char *,
143 int (*)(const char *, const struct stat64
*, int), int);
144 #if !defined(_XOPEN_SOURCE)
145 extern int nftw64(const char *,
146 int (*)(const char *, const struct stat64
*, int, struct FTW
*),
148 #endif /* !defined(_XOPEN_SOURCE) */
149 #endif /* _LARGEFILE64_SOURCE .. */
151 #define _XFTWVER 2 /* version of file tree walk */
153 #define ftw(path, fn, depth) _xftw(_XFTWVER, (path), (fn), (depth))
155 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
156 !defined(__PRAGMA_REDEFINE_EXTNAME))
157 #define ftw64(path, fn, depth) _xftw64(_XFTWVER, (path), (fn), (depth))