summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/string.cpp4
-rw-r--r--src/string_func.h7
2 files changed, 7 insertions, 4 deletions
diff --git a/src/string.cpp b/src/string.cpp
index 58ac00a6c..4ed2da129 100644
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -398,7 +398,7 @@ size_t Utf8TrimString(char *s, size_t maxlen)
return length;
}
-#ifndef _GNU_SOURCE
+#ifdef DEFINE_STRNDUP
#include "core/math_func.hpp"
char *strndup(const char *s, size_t len)
{
@@ -407,7 +407,7 @@ char *strndup(const char *s, size_t len)
memcpy(tmp, s, len);
return tmp;
}
-#endif /* !_GNU_SOURCE */
+#endif /* DEFINE_STRNDUP */
#ifdef DEFINE_STRCASESTR
char *strcasestr(const char *haystack, const char *needle)
diff --git a/src/string_func.h b/src/string_func.h
index 7787ee57c..f921397a0 100644
--- a/src/string_func.h
+++ b/src/string_func.h
@@ -251,10 +251,13 @@ static inline bool IsWhitespace(WChar c)
#include <sys/param.h>
#endif
-#if !defined(_GNU_SOURCE) && !(defined(__NetBSD_Version__) && 400000000 < __NetBSD_Version__ )
/* strndup is a GNU extension */
+#if defined(_GNU_SOURCE) || (defined(__NetBSD_Version__) && 400000000 <= __NetBSD_Version__)
+# undef DEFINE_STRNDUP
+#else
+# define DEFINE_STRNDUP
char *strndup(const char *s, size_t len);
-#endif /* !_GNU_SOURCE */
+#endif /* strndup is available */
/* strcasestr is available for _GNU_SOURCE, BSD and some Apple */
#if defined(_GNU_SOURCE) || (defined(__BSD_VISIBLE) && __BSD_VISIBLE) || (defined(__APPLE__) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))) || defined(_NETBSD_SOURCE)