17#ifndef WIN32_LEAN_AND_MEAN
18#define WIN32_LEAN_AND_MEAN
33#define _DIRENT_HAVE_D_TYPE
36#define _DIRENT_HAVE_D_NAMLEN
39#if !defined(FILE_ATTRIBUTE_DEVICE)
40#define FILE_ATTRIBUTE_DEVICE 0x40
50#define S_IFDIR _S_IFDIR
55#define S_IFCHR _S_IFCHR
60#define S_IFFIFO _S_IFFIFO
65#define S_IFREG _S_IFREG
70#define S_IREAD _S_IREAD
75#define S_IWRITE _S_IWRITE
80#define S_IEXEC _S_IEXEC
85#define S_IFIFO _S_IFIFO
105#define S_IRUSR S_IREAD
110#define S_IWUSR S_IWRITE
149#if !defined(PATH_MAX)
150#define PATH_MAX MAX_PATH
152#if !defined(FILENAME_MAX)
153#define FILENAME_MAX MAX_PATH
155#if !defined(NAME_MAX)
156#define NAME_MAX FILENAME_MAX
161#define DT_REG S_IFREG
162#define DT_DIR S_IFDIR
163#define DT_FIFO S_IFIFO
164#define DT_SOCK S_IFSOCK
165#define DT_CHR S_IFCHR
166#define DT_BLK S_IFBLK
167#define DT_LNK S_IFLNK
170#define IFTODT(mode) ((mode) &S_IFMT)
171#define DTTOIF(type) (type)
179#if !defined(S_ISFIFO)
180#define S_ISFIFO(mode) (((mode) &S_IFMT) == S_IFIFO)
183#define S_ISDIR(mode) (((mode) &S_IFMT) == S_IFDIR)
186#define S_ISREG(mode) (((mode) &S_IFMT) == S_IFREG)
189#define S_ISLNK(mode) (((mode) &S_IFMT) == S_IFLNK)
191#if !defined(S_ISSOCK)
192#define S_ISSOCK(mode) (((mode) &S_IFMT) == S_IFSOCK)
195#define S_ISCHR(mode) (((mode) &S_IFMT) == S_IFCHR)
198#define S_ISBLK(mode) (((mode) &S_IFMT) == S_IFBLK)
202#define _D_EXACT_NAMLEN(p) ((p)->d_namlen)
205#define _D_ALLOC_NAMLEN(p) (PATH_MAX)
256#define wdirent _wdirent
258#define wopendir _wopendir
259#define wreaddir _wreaddir
260#define wclosedir _wclosedir
261#define wrewinddir _wrewinddir
300 size_t* pReturnValue,
wchar_t* wcstr,
size_t sizeInWords,
const char* mbstr,
size_t count);
303 size_t* pReturnValue,
char* mbstr,
size_t sizeInBytes,
const wchar_t* wcstr,
size_t count);
319 if (dirname == NULL || dirname[0] ==
'\0') {
330 dirp->
handle = INVALID_HANDLE_VALUE;
339#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
342 n = GetFullPathNameW(dirname, 0, NULL, NULL);
346 dirp->
patt = (
wchar_t*) malloc(
sizeof(
wchar_t) * n + 16);
356#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
357 wcsncpy_s(dirp->
patt, n + 1, dirname, n);
359 n = GetFullPathNameW(dirname, n, dirp->
patt, NULL);
366 if (dirp->
patt < p) {
427 WIN32_FIND_DATAW* datap;
445 while (n + 1 <
PATH_MAX && datap->cFileName[n] != 0) {
446 entp->
d_name[n] = datap->cFileName[n];
455 attr = datap->dwFileAttributes;
458 }
else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
487 if (dirp->
handle != INVALID_HANDLE_VALUE) {
489 dirp->
handle = INVALID_HANDLE_VALUE;
519 if (dirp->
handle != INVALID_HANDLE_VALUE) {
529static WIN32_FIND_DATAW*
532 WIN32_FIND_DATAW* datap;
538 FindExSearchNameMatch,
541 if (dirp->
handle != INVALID_HANDLE_VALUE) {
555static WIN32_FIND_DATAW*
566 }
else if (dirp->
handle != INVALID_HANDLE_VALUE) {
568 if (FindNextFileW(dirp->
handle, &dirp->
data) != FALSE) {
574 dirp->
handle = INVALID_HANDLE_VALUE;
596 if (dirname == NULL || dirname[0] ==
'\0') {
602 dirp = (
DIR*) malloc(
sizeof(
struct DIR));
660 WIN32_FIND_DATAW* datap;
682 if (error && datap->cAlternateFileName[0] !=
'\0') {
686 datap->cAlternateFileName,
700 attr = datap->dwFileAttributes;
703 }
else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
773 size_t* pReturnValue,
wchar_t* wcstr,
size_t sizeInWords,
const char* mbstr,
size_t count)
777#if defined(_MSC_VER) && _MSC_VER >= 1400
780 error = mbstowcs_s(pReturnValue, wcstr, sizeInWords, mbstr, count);
788 n = mbstowcs(wcstr, mbstr, sizeInWords);
789 if (!wcstr || n < count) {
791 if (wcstr && sizeInWords) {
792 if (n >= sizeInWords) {
800 *pReturnValue = n + 1;
821 const wchar_t* wcstr,
826#if defined(_MSC_VER) && _MSC_VER >= 1400
829 error = wcstombs_s(pReturnValue, mbstr, sizeInBytes, wcstr, count);
837 n = wcstombs(mbstr, wcstr, sizeInBytes);
838 if (!mbstr || n < count) {
840 if (mbstr && sizeInBytes) {
841 if (n >= sizeInBytes) {
849 *pReturnValue = n + 1;
869#if defined(_MSC_VER) && _MSC_VER >= 1400
static WIN32_FIND_DATAW * dirent_first(_WDIR *dirp)
static void dirent_set_errno(int error)
static DIR * opendir(const char *dirname)
static int closedir(DIR *dirp)
static void rewinddir(DIR *dirp)
static WIN32_FIND_DATAW * dirent_next(_WDIR *dirp)
static _WDIR * _wopendir(const wchar_t *dirname)
#define FILE_ATTRIBUTE_DEVICE
static void _wrewinddir(_WDIR *dirp)
static int _wclosedir(_WDIR *dirp)
static struct _wdirent * _wreaddir(_WDIR *dirp)
static int dirent_mbstowcs_s(size_t *pReturnValue, wchar_t *wcstr, size_t sizeInWords, const char *mbstr, size_t count)
static int dirent_wcstombs_s(size_t *pReturnValue, char *mbstr, size_t sizeInBytes, const wchar_t *wcstr, size_t count)
static struct dirent * readdir(DIR *dirp)