36#if ((defined _UNICODE) && !(defined UNICODE))
40#if ((defined UNICODE) && !(defined _UNICODE))
48# ifndef WIN32_LEAN_AND_MEAN
49# define WIN32_LEAN_AND_MEAN
54# pragma warning (disable : 4996)
69#if defined _MSC_VER || defined __MINGW32__
70# define _tinydir_char_t TCHAR
71# define TINYDIR_STRING(s) _TEXT(s)
72# define _tinydir_strlen _tcslen
73# define _tinydir_strcpy _tcscpy
74# define _tinydir_strcat _tcscat
75# define _tinydir_strcmp _tcscmp
76# define _tinydir_strrchr _tcsrchr
77# define _tinydir_strncmp _tcsncmp
79# define _tinydir_char_t char
80# define TINYDIR_STRING(s) s
81# define _tinydir_strlen strlen
82# define _tinydir_strcpy strcpy
83# define _tinydir_strcat strcat
84# define _tinydir_strcmp strcmp
85# define _tinydir_strrchr strrchr
86# define _tinydir_strncmp strncmp
89#if (defined _MSC_VER || defined __MINGW32__)
91# define _TINYDIR_PATH_MAX MAX_PATH
92#elif defined __linux__
95# define _TINYDIR_PATH_MAX PATH_MAX
97#elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
102# define _TINYDIR_PATH_MAX PATH_MAX
107#ifndef _TINYDIR_PATH_MAX
108#define _TINYDIR_PATH_MAX 4096
113# define _TINYDIR_PATH_EXTRA 2
115# define _TINYDIR_PATH_EXTRA 0
118#define _TINYDIR_FILENAME_MAX 256
120#if (defined _MSC_VER || defined __MINGW32__)
121#define _TINYDIR_DRIVE_MAX 3
125# define _TINYDIR_FUNC static __inline
126#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
127# define _TINYDIR_FUNC static __inline__
129# define _TINYDIR_FUNC static inline
133#ifdef TINYDIR_USE_READDIR_R
137#if _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE ||\
139# define _TINYDIR_HAS_READDIR_R
141#if _POSIX_C_SOURCE >= 200112L
142# define _TINYDIR_HAS_FPATHCONF
145#if _BSD_SOURCE || _SVID_SOURCE || \
146 (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)
147# define _TINYDIR_HAS_DIRFD
150#if defined _TINYDIR_HAS_FPATHCONF && defined _TINYDIR_HAS_DIRFD &&\
152# define _TINYDIR_USE_FPATHCONF
154#if defined __MINGW32__ || !defined _TINYDIR_HAS_READDIR_R ||\
155 !(defined _TINYDIR_USE_FPATHCONF || defined NAME_MAX)
156# define _TINYDIR_USE_READDIR
161# define _TINYDIR_USE_READDIR
166#if (defined __MINGW32__) && (defined _UNICODE)
167#define _TINYDIR_DIR _WDIR
168#define _tinydir_dirent _wdirent
169#define _tinydir_opendir _wopendir
170#define _tinydir_readdir _wreaddir
171#define _tinydir_closedir _wclosedir
173#define _TINYDIR_DIR DIR
174#define _tinydir_dirent dirent
175#define _tinydir_opendir opendir
176#define _tinydir_readdir readdir
177#define _tinydir_closedir closedir
182#if defined(_TINYDIR_MALLOC) && defined(_TINYDIR_FREE)
183#elif !defined(_TINYDIR_MALLOC) && !defined(_TINYDIR_FREE)
185#error "Either define both alloc and free or none of them!"
188#if !defined(_TINYDIR_MALLOC)
189 #define _TINYDIR_MALLOC(_size) malloc(_size)
190 #define _TINYDIR_FREE(_ptr) free(_ptr)
223#ifndef _TINYDIR_USE_READDIR
255#ifndef _TINYDIR_USE_READDIR
268#ifndef _TINYDIR_USE_READDIR
294#ifndef _TINYDIR_USE_READDIR
311#if (defined WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
330#ifdef _TINYDIR_USE_READDIR
334 size = _tinydir_dirent_buf_size(
dir->_d);
335 if (
size == -1)
return -1;
337 if (
dir->_ep ==
NULL)
return -1;
340 if (
error != 0)
return -1;
364 while (
dir->has_next)
385 while (
dir->has_next)
390 p_file = &
dir->_files[
dir->n_files - 1];
444#ifndef _TINYDIR_USE_READDIR
468#ifdef _TINYDIR_USE_READDIR
475 if (readdir_r(
dir->_d,
dir->_ep, &
dir->_e) != 0)
544#elif (defined _BSD_SOURCE) || (defined _DEFAULT_SOURCE) \
571#ifdef FILE_ATTRIBUTE_INTEGRITY_STREAM
574#ifdef FILE_ATTRIBUTE_NO_SCRUB_DATA
575 !(
dir->_f.dwFileAttributes & FILE_ATTRIBUTE_NO_SCRUB_DATA) &&
594 if (
i >=
dir->n_files)
615 if (
i >=
dir->n_files || !
dir->_files[
i].is_dir)
642#if (defined _MSC_VER || defined __MINGW32__)
659#if (defined _MSC_VER || defined __MINGW32__)
660#if ((defined _MSC_VER) && (_MSC_VER >= 1400))
663 drive_buf, _TINYDIR_DRIVE_MAX,
683 if (drive_buf[0] ==
L'\xFEFE')
685 if (dir_name_buf[0] ==
L'\xFEFE')
686 dir_name_buf[0] =
'\0';
691 if (drive_buf[0] ==
'\0' && dir_name_buf[0] ==
'\0')
697 dir_name = drive_buf;
700 base_name = file_name_buf;
703 dir_name =
dirname(dir_name_buf);
705 base_name =
basename(file_name_buf);
709#if (defined _MSC_VER || defined __MINGW32__)
766 file->extension = period + 1;
783#ifndef _TINYDIR_USE_READDIR
803#if defined _TINYDIR_USE_FPATHCONF
804 name_max = fpathconf(dirfd(dirp), _PC_NAME_MAX);
811#elif defined(NAME_MAX)
814#error "buffer size for readdir_r cannot be determined"
827# if defined (_MSC_VER)
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
BOOL WINAPI FindClose(HANDLE hFindFile)
static void basename(LPCWSTR path, LPWSTR name)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
__cdecl __MINGW_NOTHROW char * dirname(char *)
#define memcpy(s1, s2, n)
#define FILE_ATTRIBUTE_DEVICE
#define FILE_ATTRIBUTE_OFFLINE
#define FILE_ATTRIBUTE_DIRECTORY
#define FILE_ATTRIBUTE_TEMPORARY
#define FILE_ATTRIBUTE_ENCRYPTED
#define offsetof(TYPE, MEMBER)
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
struct _tinydir_dirent * _e
_tinydir_char_t * extension
_tinydir_char_t name[_TINYDIR_FILENAME_MAX]
_TINYDIR_FUNC int _tinydir_file_cmp(const void *a, const void *b)
_TINYDIR_FUNC void tinydir_close(tinydir_dir *dir)
#define _TINYDIR_PATH_MAX
#define _TINYDIR_PATH_EXTRA
_TINYDIR_FUNC int tinydir_file_open(tinydir_file *file, const _tinydir_char_t *path)
#define _tinydir_closedir
_TINYDIR_FUNC int tinydir_readfile_n(const tinydir_dir *dir, tinydir_file *file, size_t i)
_TINYDIR_FUNC int tinydir_readfile(const tinydir_dir *dir, tinydir_file *file)
_TINYDIR_FUNC int tinydir_next(tinydir_dir *dir)
_TINYDIR_FUNC int tinydir_open_sorted(tinydir_dir *dir, const _tinydir_char_t *path)
#define _TINYDIR_MALLOC(_size)
#define _TINYDIR_FREE(_ptr)
#define _TINYDIR_FILENAME_MAX
#define TINYDIR_STRING(s)
_TINYDIR_FUNC int tinydir_open(tinydir_dir *dir, const _tinydir_char_t *path)
_TINYDIR_FUNC int tinydir_open_subdir_n(tinydir_dir *dir, size_t i)
_TINYDIR_FUNC void _tinydir_get_ext(tinydir_file *file)
DWORD WINAPI GetLastError(void)
#define ERROR_NO_MORE_FILES
#define FILE_ATTRIBUTE_INTEGRITY_STREAM