aboutsummaryrefslogtreecommitdiff
path: root/src/util/string.cpp
diff options
context:
space:
mode:
authornia <29542929+alarixnia@users.noreply.github.com>2021-09-19 18:23:52 +0000
committerGitHub <noreply@github.com>2021-09-19 20:23:52 +0200
commit2628316842e9c3fc1c54c6d57505c7851fa83490 (patch)
treebe919d8084f1fbf472c1bc52cf29f74698558d06 /src/util/string.cpp
parente79d6154fc26b2a9bac242f0ac01ec785b5c53b1 (diff)
downloadminetest-2628316842e9c3fc1c54c6d57505c7851fa83490.tar.gz
minetest-2628316842e9c3fc1c54c6d57505c7851fa83490.tar.bz2
minetest-2628316842e9c3fc1c54c6d57505c7851fa83490.zip
Fix src/util/string.cpp on NetBSD
- iconv() prototype changed from traditional Unix defintion to POSIX definition in 9.99.x. - wchar_t is not a valid character set for iconv. Share code with Android for using UTF-32.
Diffstat (limited to 'src/util/string.cpp')
-rw-r--r--src/util/string.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/util/string.cpp b/src/util/string.cpp
index eec5ab4cd..8be5e320a 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -39,8 +39,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <windows.h>
#endif
-#if defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__NetBSD__) || \
- defined(__OpenBSD__) || defined(__DragonFly__))
+#ifdef __NetBSD__
+ #include <sys/param.h>
+ #if __NetBSD_Version__ <= 999001500
+ #define BSD_ICONV_USED
+ #endif
+#elif defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__OpenBSD__) || \
+ defined(__DragonFly__))
#define BSD_ICONV_USED
#endif
@@ -79,6 +84,14 @@ static bool convert(const char *to, const char *from, char *outbuf,
#ifdef __ANDROID__
// On Android iconv disagrees how big a wchar_t is for whatever reason
const char *DEFAULT_ENCODING = "UTF-32LE";
+#elif defined(__NetBSD__)
+ // NetBSD does not allow "WCHAR_T" as a charset input to iconv.
+ #include <sys/endian.h>
+ #if BYTE_ORDER == BIG_ENDIAN
+ const char *DEFAULT_ENCODING = "UTF-32BE";
+ #else
+ const char *DEFAULT_ENCODING = "UTF-32LE";
+ #endif
#else
const char *DEFAULT_ENCODING = "WCHAR_T";
#endif
@@ -94,7 +107,7 @@ std::wstring utf8_to_wide(const std::string &input)
std::wstring out;
out.resize(outbuf_size / sizeof(wchar_t));
-#ifdef __ANDROID__
+#if defined(__ANDROID__) || defined(__NetBSD__)
SANITY_CHECK(sizeof(wchar_t) == 4);
#endif