4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 *************************************************************************
12 ** This file contains declarations for most of the opendir() family of
13 ** POSIX functions on Win32 using the MSVCRT.
16 #if defined(_WIN32) && defined(_MSC_VER) && !defined(SQLITE_WINDIRENT_H)
17 #define SQLITE_WINDIRENT_H
20 ** We need several data types from the Windows SDK header.
23 #ifndef WIN32_LEAN_AND_MEAN
24 #define WIN32_LEAN_AND_MEAN
30 ** We need several support functions from the SQLite core.
36 ** We need several things from the ANSI and MSVCRT headers.
44 #include <sys/types.h>
48 ** We may need several defines that should have been in "sys/stat.h".
52 #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
56 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
60 #define S_ISLNK(mode) (0)
64 ** We may need to provide the "mode_t" type.
67 #ifndef MODE_T_DEFINED
68 #define MODE_T_DEFINED
69 typedef unsigned short mode_t
;
73 ** We may need to provide the "ino_t" type.
78 typedef unsigned short ino_t
;
82 ** We need to define "NAME_MAX" if it was not present in "limits.h".
87 # define NAME_MAX (FILENAME_MAX)
89 # define NAME_MAX (260)
94 ** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T".
98 # define NULL_INTPTR_T ((intptr_t)(0))
102 # define BAD_INTPTR_T ((intptr_t)(-1))
106 ** We need to provide the necessary structures and related types.
109 #ifndef DIRENT_DEFINED
110 #define DIRENT_DEFINED
111 typedef struct DIRENT DIRENT
;
112 typedef DIRENT
*LPDIRENT
;
114 ino_t d_ino
; /* Sequence number, do not use. */
115 unsigned d_attributes
; /* Win32 file attributes. */
116 char d_name
[NAME_MAX
+ 1]; /* Name within the directory. */
122 typedef struct DIR DIR;
125 intptr_t d_handle
; /* Value returned by "_findfirst". */
126 DIRENT d_first
; /* DIRENT constructed based on "_findfirst". */
127 DIRENT d_next
; /* DIRENT constructed based on "_findnext". */
132 ** Provide a macro, for use by the implementation, to determine if a
133 ** particular directory entry should be skipped over when searching for
134 ** the next directory entry that should be returned by the readdir() or
135 ** readdir_r() functions.
139 # define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM))
143 ** Provide the function prototype for the POSIX compatible getenv()
144 ** function. This function is not thread-safe.
147 extern const char *windirent_getenv(const char *name
);
150 ** Finally, we can provide the function prototypes for the opendir(),
151 ** readdir(), readdir_r(), and closedir() POSIX functions.
154 extern LPDIR
opendir(const char *dirname
);
155 extern LPDIRENT
readdir(LPDIR dirp
);
156 extern INT
readdir_r(LPDIR dirp
, LPDIRENT entry
, LPDIRENT
*result
);
157 extern INT
closedir(LPDIR dirp
);
159 #endif /* defined(WIN32) && defined(_MSC_VER) */