1/**
 2 * This file is part of the mingw-w64 runtime package.
 3 * No warranty is given; refer to the file DISCLAIMER within this package.
 4 */
 5
 6#ifndef _FTW_HXX
 7#define	_FTW_HXX
 8
 9#include <sys/types.h>
10#include <sys/stat.h>
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16  struct FTW {
17    int base;
18    int level;
19  };
20
21  /* A regular file.  */
22#define FTW_F 0
23  /* A directory.  */
24#define FTW_D 1
25  /* An unreadable directory.  */
26#define FTW_DNR	2
27  /* An unstatable file.  */
28#define FTW_NS 3
29  /* A symbolic link (not supported).  */
30#define FTW_SL 4
31  /* A directory (all subdirs are visited). */
32#define FTW_DP 5
33  /* A symbolic link naming non-existing file (not supported).  */
34#define FTW_SLN 6
35
36  /* Do a physical walk (ignore symlinks).  */
37#define FTW_PHYS 1
38  /* Do report only files on same device as the argument (partial supported).  */
39#define FTW_MOUNT 2
40  /* Change to current directory while processing (unsupported).  */
41#define FTW_CHDIR 4
42  /* Do report files in directory before the directory itself.*/
43#define FTW_DEPTH 8
44  /* Tell callback to return FTW_* values instead of zero to continue and non-zero to terminate.  */
45#define FTW_ACTIONRETVAL 16
46
47  /* Continue with next sibling or with the first child-directory.  */
48#define FTW_CONTINUE 0
49  /* Return from ftw or nftw with FTW_STOP as return value.  */
50#define FTW_STOP 1
51  /* Valid only for FTW_D: Don't walk through the subtree. */
52#define FTW_SKIP_SUBTREE 2
53  /* Continue with FTW_DP callback for current directory (if FTW_DEPTH) and then its siblings.  */
54#define FTW_SKIP_SIBLINGS 3
55
56/*
57 * When building mingw-w64 CRT files it is required that the ftw and
58 * nftw functions are not declared with __MINGW_ASM_CALL redirection.
59 * Otherwise the mingw-w64 would provide broken ftw and nftw symbols.
60 * To prevent ABI issues, the mingw-w64 runtime should not call the ftw,
61 * and nftw functions, instead it should call the fixed-size variants.
62 */
63#ifndef _CRTBLD
64#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
65#ifdef _USE_32BIT_TIME_T
66  int ftw (const char *, int (*) (const char *, const struct stat *, int), int) __MINGW_ASM_CALL(ftw32i64);
67  int nftw (const char *, int (*) (const char *, const struct stat *, int , struct FTW *), int, int) __MINGW_ASM_CALL(nftw32i64);
68#else
69  int ftw (const char *, int (*) (const char *, const struct stat *, int), int) __MINGW_ASM_CALL(ftw64);
70  int nftw (const char *, int (*) (const char *, const struct stat *, int , struct FTW *), int, int) __MINGW_ASM_CALL(nftw64);
71#endif
72#else
73#ifdef _USE_32BIT_TIME_T
74  int ftw (const char *, int (*) (const char *, const struct stat *, int), int) __MINGW_ASM_CALL(ftw32);
75  int nftw (const char *, int (*) (const char *, const struct stat *, int , struct FTW *), int, int) __MINGW_ASM_CALL(nftw32);
76#else
77  int ftw (const char *, int (*) (const char *, const struct stat *, int), int) __MINGW_ASM_CALL(ftw64i32);
78  int nftw (const char *, int (*) (const char *, const struct stat *, int , struct FTW *), int, int) __MINGW_ASM_CALL(nftw64i32);
79#endif
80#endif
81#endif
82
83  int ftw64 (const char *, int (*) (const char *, const struct stat64 *, int), int);
84  int nftw64 (const char *, int (*) (const char *, const struct stat64 *, int , struct FTW *), int, int);
85
86#ifdef __cplusplus
87}
88#endif
89
90#endif