diff options
author | dmacesic <dejan@lofts.net> | 2016-03-02 06:38:38 +0300 |
---|---|---|
committer | dmacesic <dejan@lofts.net> | 2016-03-02 06:38:38 +0300 |
commit | a325a660dd2dd82f0ee7df6d39a1ac777afd5d7c (patch) | |
tree | 253ee1a8ceee0a580f426aa2dd869dddd3999c4e | |
parent | 74564450519c965f9395f132d1425e904be2b41a (diff) |
Changed readdir to readdir_r for thread-safety
-rwxr-xr-x[-rw-r--r--] | tinydir.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/tinydir.h b/tinydir.h index 01fdb39..03c0300 100644..100755 --- a/tinydir.h +++ b/tinydir.h @@ -131,6 +131,11 @@ int _tinydir_file_cmp(const void *a, const void *b); _TINYDIR_FUNC int tinydir_open(tinydir_dir *dir, const char *path) { +#ifndef _MSC_VER + int error; + struct dirent entry; +#endif + if (dir == NULL || path == NULL || strlen(path) == 0) { errno = EINVAL; @@ -169,7 +174,9 @@ int tinydir_open(tinydir_dir *dir, const char *path) /* read first file */ dir->has_next = 1; #ifndef _MSC_VER - dir->_e = readdir(dir->_d); + error = readdir_r(dir->_d, &entry, &dir->_e); + if (error != 0) return -1; + if (dir->_e == NULL) { dir->has_next = 0; @@ -282,6 +289,12 @@ void tinydir_close(tinydir_dir *dir) _TINYDIR_FUNC int tinydir_next(tinydir_dir *dir) { +#ifndef _MSC_VER + int error; + struct dirent entry; + /*struct dirent *result;*/ +#endif + if (dir == NULL) { errno = EINVAL; @@ -296,7 +309,9 @@ int tinydir_next(tinydir_dir *dir) #ifdef _MSC_VER if (FindNextFileA(dir->_h, &dir->_f) == 0) #else - dir->_e = readdir(dir->_d); + error = readdir_r(dir->_d, &entry, &dir->_e); + if (error != 0) return -1; + if (dir->_e == NULL) #endif { |