xref: /sqlite-3.40.0/src/test_windirent.h (revision 176b3a09)
192af1ebcSmistachkin /*
292af1ebcSmistachkin ** 2015 November 30
392af1ebcSmistachkin **
492af1ebcSmistachkin ** The author disclaims copyright to this source code.  In place of
592af1ebcSmistachkin ** a legal notice, here is a blessing:
692af1ebcSmistachkin **
792af1ebcSmistachkin **    May you do good and not evil.
892af1ebcSmistachkin **    May you find forgiveness for yourself and forgive others.
992af1ebcSmistachkin **    May you share freely, never taking more than you give.
1092af1ebcSmistachkin **
1192af1ebcSmistachkin *************************************************************************
1292af1ebcSmistachkin ** This file contains declarations for most of the opendir() family of
1392af1ebcSmistachkin ** POSIX functions on Win32 using the MSVCRT.
1492af1ebcSmistachkin */
1592af1ebcSmistachkin 
1603491a1aSdrh #if defined(_WIN32) && defined(_MSC_VER) && !defined(SQLITE_WINDIRENT_H)
1703491a1aSdrh #define SQLITE_WINDIRENT_H
1892af1ebcSmistachkin 
1992af1ebcSmistachkin /*
2092af1ebcSmistachkin ** We need several data types from the Windows SDK header.
2192af1ebcSmistachkin */
2292af1ebcSmistachkin 
23*176b3a09Smistachkin #ifndef WIN32_LEAN_AND_MEAN
2492af1ebcSmistachkin #define WIN32_LEAN_AND_MEAN
25*176b3a09Smistachkin #endif
26*176b3a09Smistachkin 
2792af1ebcSmistachkin #include "windows.h"
2892af1ebcSmistachkin 
2992af1ebcSmistachkin /*
3092af1ebcSmistachkin ** We need several support functions from the SQLite core.
3192af1ebcSmistachkin */
3292af1ebcSmistachkin 
3392af1ebcSmistachkin #include "sqlite3.h"
3492af1ebcSmistachkin 
3592af1ebcSmistachkin /*
3692af1ebcSmistachkin ** We need several things from the ANSI and MSVCRT headers.
3792af1ebcSmistachkin */
3892af1ebcSmistachkin 
3992af1ebcSmistachkin #include <stdio.h>
4092af1ebcSmistachkin #include <stdlib.h>
4192af1ebcSmistachkin #include <errno.h>
4292af1ebcSmistachkin #include <io.h>
4392af1ebcSmistachkin #include <limits.h>
44dfdfd8c7Smistachkin #include <sys/types.h>
45dfdfd8c7Smistachkin #include <sys/stat.h>
46dfdfd8c7Smistachkin 
47dfdfd8c7Smistachkin /*
48dfdfd8c7Smistachkin ** We may need several defines that should have been in "sys/stat.h".
49dfdfd8c7Smistachkin */
50dfdfd8c7Smistachkin 
51dfdfd8c7Smistachkin #ifndef S_ISREG
52dfdfd8c7Smistachkin #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
53dfdfd8c7Smistachkin #endif
54dfdfd8c7Smistachkin 
55dfdfd8c7Smistachkin #ifndef S_ISDIR
56dfdfd8c7Smistachkin #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
57dfdfd8c7Smistachkin #endif
58dfdfd8c7Smistachkin 
59dfdfd8c7Smistachkin #ifndef S_ISLNK
60dfdfd8c7Smistachkin #define S_ISLNK(mode) (0)
61dfdfd8c7Smistachkin #endif
62dfdfd8c7Smistachkin 
63dfdfd8c7Smistachkin /*
64dfdfd8c7Smistachkin ** We may need to provide the "mode_t" type.
65dfdfd8c7Smistachkin */
66dfdfd8c7Smistachkin 
67dfdfd8c7Smistachkin #ifndef MODE_T_DEFINED
68dfdfd8c7Smistachkin   #define MODE_T_DEFINED
69dfdfd8c7Smistachkin   typedef unsigned short mode_t;
70dfdfd8c7Smistachkin #endif
7192af1ebcSmistachkin 
7292af1ebcSmistachkin /*
7392af1ebcSmistachkin ** We may need to provide the "ino_t" type.
7492af1ebcSmistachkin */
7592af1ebcSmistachkin 
7692af1ebcSmistachkin #ifndef INO_T_DEFINED
7792af1ebcSmistachkin   #define INO_T_DEFINED
7892af1ebcSmistachkin   typedef unsigned short ino_t;
7992af1ebcSmistachkin #endif
8092af1ebcSmistachkin 
8192af1ebcSmistachkin /*
8292af1ebcSmistachkin ** We need to define "NAME_MAX" if it was not present in "limits.h".
8392af1ebcSmistachkin */
8492af1ebcSmistachkin 
8592af1ebcSmistachkin #ifndef NAME_MAX
8692af1ebcSmistachkin #  ifdef FILENAME_MAX
8792af1ebcSmistachkin #    define NAME_MAX (FILENAME_MAX)
8892af1ebcSmistachkin #  else
8992af1ebcSmistachkin #    define NAME_MAX (260)
9092af1ebcSmistachkin #  endif
9192af1ebcSmistachkin #endif
9292af1ebcSmistachkin 
9392af1ebcSmistachkin /*
9492af1ebcSmistachkin ** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T".
9592af1ebcSmistachkin */
9692af1ebcSmistachkin 
9792af1ebcSmistachkin #ifndef NULL_INTPTR_T
9892af1ebcSmistachkin #  define NULL_INTPTR_T ((intptr_t)(0))
9992af1ebcSmistachkin #endif
10092af1ebcSmistachkin 
10192af1ebcSmistachkin #ifndef BAD_INTPTR_T
10292af1ebcSmistachkin #  define BAD_INTPTR_T ((intptr_t)(-1))
10392af1ebcSmistachkin #endif
10492af1ebcSmistachkin 
10592af1ebcSmistachkin /*
10692af1ebcSmistachkin ** We need to provide the necessary structures and related types.
10792af1ebcSmistachkin */
10892af1ebcSmistachkin 
109dfdfd8c7Smistachkin #ifndef DIRENT_DEFINED
110dfdfd8c7Smistachkin #define DIRENT_DEFINED
11192af1ebcSmistachkin typedef struct DIRENT DIRENT;
11292af1ebcSmistachkin typedef DIRENT *LPDIRENT;
11392af1ebcSmistachkin struct DIRENT {
11492af1ebcSmistachkin   ino_t d_ino;               /* Sequence number, do not use. */
11592af1ebcSmistachkin   unsigned d_attributes;     /* Win32 file attributes. */
11692af1ebcSmistachkin   char d_name[NAME_MAX + 1]; /* Name within the directory. */
11792af1ebcSmistachkin };
118dfdfd8c7Smistachkin #endif
11992af1ebcSmistachkin 
120dfdfd8c7Smistachkin #ifndef DIR_DEFINED
121dfdfd8c7Smistachkin #define DIR_DEFINED
122dfdfd8c7Smistachkin typedef struct DIR DIR;
123dfdfd8c7Smistachkin typedef DIR *LPDIR;
12492af1ebcSmistachkin struct DIR {
12592af1ebcSmistachkin   intptr_t d_handle; /* Value returned by "_findfirst". */
12692af1ebcSmistachkin   DIRENT d_first;    /* DIRENT constructed based on "_findfirst". */
12792af1ebcSmistachkin   DIRENT d_next;     /* DIRENT constructed based on "_findnext". */
12892af1ebcSmistachkin };
129dfdfd8c7Smistachkin #endif
130dfdfd8c7Smistachkin 
13192af1ebcSmistachkin /*
132aac853baSmistachkin ** Provide a macro, for use by the implementation, to determine if a
133aac853baSmistachkin ** particular directory entry should be skipped over when searching for
134aac853baSmistachkin ** the next directory entry that should be returned by the readdir() or
135aac853baSmistachkin ** readdir_r() functions.
136aac853baSmistachkin */
137aac853baSmistachkin 
138aac853baSmistachkin #ifndef is_filtered
139aac853baSmistachkin #  define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM))
140aac853baSmistachkin #endif
141aac853baSmistachkin 
142aac853baSmistachkin /*
1437dd7d98bSmistachkin ** Provide the function prototype for the POSIX compatiable getenv()
1447dd7d98bSmistachkin ** function.  This function is not thread-safe.
1457dd7d98bSmistachkin */
1467dd7d98bSmistachkin 
1477dd7d98bSmistachkin extern const char *windirent_getenv(const char *name);
1487dd7d98bSmistachkin 
1497dd7d98bSmistachkin /*
15092af1ebcSmistachkin ** Finally, we can provide the function prototypes for the opendir(),
15192af1ebcSmistachkin ** readdir(), readdir_r(), and closedir() POSIX functions.
15292af1ebcSmistachkin */
15392af1ebcSmistachkin 
15492af1ebcSmistachkin extern LPDIR opendir(const char *dirname);
15592af1ebcSmistachkin extern LPDIRENT readdir(LPDIR dirp);
15692af1ebcSmistachkin extern INT readdir_r(LPDIR dirp, LPDIRENT entry, LPDIRENT *result);
15792af1ebcSmistachkin extern INT closedir(LPDIR dirp);
15892af1ebcSmistachkin 
15992af1ebcSmistachkin #endif /* defined(WIN32) && defined(_MSC_VER) */
160