Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/cxong/tinydir.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcxong <congusbongus@gmail.com>2016-04-02 07:47:55 +0300
committercxong <congusbongus@gmail.com>2016-04-02 07:47:55 +0300
commit65dc3812c25df15247224fdd4994f865caba6bb2 (patch)
tree40387ef52661dc57443c77d7dd55681b9c33deed
parentf804da51ee0f65204611e3f1cbd3e50fab83dea8 (diff)
Use feature test macros for _tinydir_dirent_buf_size (fixes #30)1.1.1
-rwxr-xr-xtinydir.h53
1 files changed, 32 insertions, 21 deletions
diff --git a/tinydir.h b/tinydir.h
index 9f50dfd..72bb4bc 100755
--- a/tinydir.h
+++ b/tinydir.h
@@ -68,8 +68,26 @@ extern "C" {
/* readdir_r is a POSIX-only function, and may not be available under various
* environments/settings, e.g. MinGW. Use readdir fallback */
-#if defined __MINGW32__ || !(_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || _POSIX_SOURCE)
-#define _TINYDIR_USE_READDIR
+#if _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE ||\
+ _POSIX_SOURCE
+# define _TINYDIR_HAS_READDIR_R
+#endif
+#if _POSIX_C_SOURCE >= 200112L
+# define _TINYDIR_HAS_FPATHCONF
+# include <unistd.h>
+#endif
+#if _BSD_SOURCE || _SVID_SOURCE || \
+ (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)
+# define _TINYDIR_HAS_DIRFD
+# include <sys/types.h>
+#endif
+#if defined _TINYDIR_HAS_FPATHCONF && defined _TINYDIR_HAS_DIRFD &&\
+ defined _PC_NAME_MAX
+# define _TINYDIR_USE_FPATHCONF
+#endif
+#if defined __MINGW32__ || !defined _TINYDIR_HAS_READDIR_R ||\
+ !(defined _TINYDIR_USE_FPATHCONF || defined NAME_MAX)
+# define _TINYDIR_USE_READDIR
#endif
/* Allow user to use a custom allocator by defining _TINYDIR_MALLOC and _TINYDIR_FREE. */
@@ -626,11 +644,7 @@ from https://womble.decadent.org.uk/readdir_r-advisory.html
* *
* This code does not trust values of NAME_MAX that are less than *
* 255, since some systems (including at least HP-UX) incorrectly *
-* define it to be a smaller value. *
-* *
-* If you use autoconf, include fpathconf and dirfd in your *
-* AC_CHECK_FUNCS list. Otherwise use some other method to detect *
-* and use them where available. */
+* define it to be a smaller value. */
_TINYDIR_FUNC
size_t _tinydir_dirent_buf_size(DIR *dirp)
{
@@ -639,25 +653,22 @@ size_t _tinydir_dirent_buf_size(DIR *dirp)
/* parameter may be unused */
(void)dirp;
-# if defined(HAVE_FPATHCONF) && defined(HAVE_DIRFD) \
- && defined(_PC_NAME_MAX)
+#if defined _TINYDIR_USE_FPATHCONF
name_max = fpathconf(dirfd(dirp), _PC_NAME_MAX);
if (name_max == -1)
-# if defined(NAME_MAX)
+#if defined(NAME_MAX)
name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
-# else
+#else
return (size_t)(-1);
-# endif
-# else
-# if defined(NAME_MAX)
- name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
-# else
-# error "buffer size for readdir_r cannot be determined"
-# endif
-# endif
+#endif
+#elif defined(NAME_MAX)
+ name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
+#else
+#error "buffer size for readdir_r cannot be determined"
+#endif
name_end = (size_t)offsetof(struct dirent, d_name) + name_max + 1;
- return (name_end > sizeof(struct dirent)
- ? name_end : sizeof(struct dirent));
+ return (name_end > sizeof(struct dirent) ?
+ name_end : sizeof(struct dirent));
}
#endif
#endif