diff options
author | nia <29542929+alarixnia@users.noreply.github.com> | 2021-09-19 18:23:52 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-19 20:23:52 +0200 |
commit | 2628316842e9c3fc1c54c6d57505c7851fa83490 (patch) | |
tree | be919d8084f1fbf472c1bc52cf29f74698558d06 /src/util/string.cpp | |
parent | e79d6154fc26b2a9bac242f0ac01ec785b5c53b1 (diff) | |
download | minetest-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.cpp | 19 |
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 |