32#define WIN32_LEAN_AND_MEAN
34#pragma warning (disable : 4996)
44#define _TINYDIR_PATH_MAX 4096
47#define _TINYDIR_PATH_EXTRA 2
49#define _TINYDIR_PATH_EXTRA 0
51#define _TINYDIR_FILENAME_MAX 256
54#define _TINYDIR_FUNC static __inline
56#define _TINYDIR_FUNC static __inline__
119if (dir == NULL || path == NULL || strlen(path) == 0)
133dir->_h = INVALID_HANDLE_VALUE;
139strcpy(dir->
path, path);
141strcat(dir->
path,
"\\*");
142dir->_h = FindFirstFile(dir->
path, &dir->_f);
143dir->
path[strlen(dir->
path) - 2] =
'\0';
144if (dir->_h == INVALID_HANDLE_VALUE)
146dir->
_d = opendir(path);
157dir->
_e = readdir(dir->
_d);
243memset(dir->
path, 0,
sizeof(dir->
path));
252if (dir->_h != INVALID_HANDLE_VALUE)
256dir->_h = INVALID_HANDLE_VALUE;
282if (FindNextFile(dir->_h, &dir->_f) == 0)
284dir->
_e = readdir(dir->
_d);
290if (GetLastError() != ERROR_SUCCESS &&
291GetLastError() != ERROR_NO_MORE_FILES)
306if (dir == NULL || file == NULL)
312if (dir->_h == INVALID_HANDLE_VALUE)
320if (strlen(dir->
path) +
347strcat(file->
path,
"/");
357if (stat(file->
path, &file->
_s) == -1)
366!!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
368S_ISDIR(file->
_s.st_mode);
372!!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_NORMAL) ||
374!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_DEVICE) &&
375!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
376!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED) &&
377#ifdef FILE_ATTRIBUTE_INTEGRITY_STREAM
378!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_INTEGRITY_STREAM) &&
380#ifdef FILE_ATTRIBUTE_NO_SCRUB_DATA
381!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_NO_SCRUB_DATA) &&
383!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE) &&
384!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY));
386S_ISREG(file->
_s.st_mode);
395if (dir == NULL || file == NULL)
453if (file == NULL || path == NULL || strlen(path) == 0)
468drive_buf,
sizeof drive_buf,
469dir_name_buf,
sizeof dir_name_buf,
470file_name_buf,
sizeof file_name_buf,
471ext_buf,
sizeof ext_buf))
477strcat(drive_buf, dir_name_buf);
480strcat(file_name_buf, ext_buf);
481base_name = file_name_buf;
483strcpy(dir_name_buf, path);
484dir_name = dirname(dir_name_buf);
485strcpy(file_name_buf, path);
486base_name = basename(file_name_buf);
503if (strcmp(file->
name, base_name) == 0)
525char *period = strrchr(file->
name,
'.');
int has_next
Definition tinydir.h:76
char path[_TINYDIR_PATH_MAX]
Definition tinydir.h:75
tinydir_file * _files
Definition tinydir.h:79
DIR * _d
Definition tinydir.h:84
struct dirent * _e
Definition tinydir.h:85
size_t n_files
Definition tinydir.h:77
char * extension
Definition tinydir.h:63
int is_reg
Definition tinydir.h:65
int is_dir
Definition tinydir.h:64
struct stat _s
Definition tinydir.h:69
char path[_TINYDIR_PATH_MAX]
Definition tinydir.h:61
char name[_TINYDIR_FILENAME_MAX]
Definition tinydir.h:62
_TINYDIR_FUNC int _tinydir_file_cmp(const void *a, const void *b)
Definition tinydir.h:537
_TINYDIR_FUNC void tinydir_close(tinydir_dir *dir)
Definition tinydir.h:236
#define _TINYDIR_PATH_MAX
Definition tinydir.h:44
#define _TINYDIR_PATH_EXTRA
Definition tinydir.h:49
_TINYDIR_FUNC int tinydir_open(tinydir_dir *dir, const char *path)
Definition tinydir.h:117
_TINYDIR_FUNC int tinydir_open_sorted(tinydir_dir *dir, const char *path)
Definition tinydir.h:172
_TINYDIR_FUNC int tinydir_readfile_n(const tinydir_dir *dir, tinydir_file *file, size_t i)
Definition tinydir.h:393
_TINYDIR_FUNC int tinydir_readfile(const tinydir_dir *dir, tinydir_file *file)
Definition tinydir.h:304
_TINYDIR_FUNC int tinydir_next(tinydir_dir *dir)
Definition tinydir.h:268
_TINYDIR_FUNC int tinydir_file_open(tinydir_file *file, const char *path)
Definition tinydir.h:439
#define _TINYDIR_FILENAME_MAX
Definition tinydir.h:51
#define _TINYDIR_FUNC
Definition tinydir.h:56
_TINYDIR_FUNC int tinydir_open_subdir_n(tinydir_dir *dir, size_t i)
Definition tinydir.h:413
_TINYDIR_FUNC void _tinydir_get_ext(tinydir_file *file)
Definition tinydir.h:523