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 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 /* Copyright (c) 1988 AT&T */
27 /* All Rights Reserved */
33 #pragma ident "%Z%%M% %I% %E% SMI"
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 #if defined(__STDC__)
127 extern int ftw(const char *,
128 int (*)(const char *, const struct stat
*, int), int);
129 extern int _xftw(int, const char *,
130 int (*)(const char *, const struct stat
*, int), int);
131 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || defined(_XPG4_2)
132 extern int nftw(const char *,
133 int (*)(const char *, const struct stat
*, int, struct FTW
*),
135 #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) ... */
138 * transitional large file interface versions
140 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
141 !defined(__PRAGMA_REDEFINE_EXTNAME))
142 extern int ftw64(const char *,
143 int (*)(const char *, const struct stat64
*, int), int);
144 extern int _xftw64(int, const char *,
145 int (*)(const char *, const struct stat64
*, int), int);
146 #if !defined(_XOPEN_SOURCE)
147 extern int nftw64(const char *,
148 int (*)(const char *, const struct stat64
*, int, struct FTW
*),
150 #endif /* !defined(_XOPEN_SOURCE) */
151 #endif /* _LARGEFILE64_SOURCE .. */
155 extern int ftw(), _xftw();
157 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || defined(_XPG4_2)
159 #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) ... */
161 /* transitional large file interface versions */
162 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
163 !defined(__PRAGMA_REDEFINE_EXTNAME))
165 extern int _xftw64();
166 #if !defined(_XOPEN_SOURCE)
168 #endif /* !defined(_XOPEN_SOURCE) */
169 #endif /* _LARGEFILE64_SOURCE .. */
171 #endif /* __STDC__ */
173 #define _XFTWVER 2 /* version of file tree walk */
175 #define ftw(path, fn, depth) _xftw(_XFTWVER, (path), (fn), (depth))
177 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
178 !defined(__PRAGMA_REDEFINE_EXTNAME))
179 #define ftw64(path, fn, depth) _xftw64(_XFTWVER, (path), (fn), (depth))