summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2015-06-29 02:39:22 -0400
committerest31 <MTest31@outlook.com>2015-06-29 12:32:01 +0200
commit4e28c8d3c8af51b728a049c28806e0f740ac0106 (patch)
tree88233da83cc61cda1aadbcf29cc513a0b58f47b4 /src/util
parent0d65ee878c5301afdbd163aa2274e73588f88ed3 (diff)
downloadminetest-4e28c8d3c8af51b728a049c28806e0f740ac0106.tar.gz
minetest-4e28c8d3c8af51b728a049c28806e0f740ac0106.tar.bz2
minetest-4e28c8d3c8af51b728a049c28806e0f740ac0106.zip
Fix *BSD build with GNU iconv
Diffstat (limited to 'src/util')
-rw-r--r--src/util/string.cpp41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/util/string.cpp b/src/util/string.cpp
index 36a9481c5..187d2a078 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -30,22 +30,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <map>
#ifndef _WIN32
-#include <iconv.h>
+ #include <iconv.h>
#else
-#define _WIN32_WINNT 0x0501
-#include <windows.h>
+ #define _WIN32_WINNT 0x0501
+ #include <windows.h>
+#endif
+
+#if defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__NetBSD__) || \
+ defined(__OpenBSD__) || defined(__DragonFly__))
+ #define BSD_ICONV_USED
#endif
static bool parseHexColorString(const std::string &value, video::SColor &color);
static bool parseNamedColorString(const std::string &value, video::SColor &color);
#ifndef _WIN32
+
bool convert(const char *to, const char *from, char *outbuf,
size_t outbuf_size, char *inbuf, size_t inbuf_size)
{
iconv_t cd = iconv_open(to, from);
-#if defined(__FreeBSD__) || defined(__FreeBSD)
+#ifdef BSD_ICONV_USED
const char *inbuf_ptr = inbuf;
#else
char *inbuf_ptr = inbuf;
@@ -88,7 +94,7 @@ std::wstring utf8_to_wide(const std::string &input)
delete[] outbuf;
return L"<invalid UTF-8 string>";
}
- std::wstring out((wchar_t*)outbuf);
+ std::wstring out((wchar_t *)outbuf);
delete[] inbuf;
delete[] outbuf;
@@ -97,12 +103,15 @@ std::wstring utf8_to_wide(const std::string &input)
}
#ifdef __ANDROID__
+
// TODO: this is an ugly fix for wide_to_utf8 somehow not working on android
std::string wide_to_utf8(const std::wstring &input)
{
return wide_to_narrow(input);
}
-#else
+
+#else // __ANDROID__
+
std::string wide_to_utf8(const std::wstring &input)
{
size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t);
@@ -128,14 +137,18 @@ std::string wide_to_utf8(const std::wstring &input)
return out;
}
-#endif
-#else
+
+#endif // __ANDROID__
+
+#else // _WIN32
+
std::wstring utf8_to_wide(const std::string &input)
{
size_t outbuf_size = input.size() + 1;
wchar_t *outbuf = new wchar_t[outbuf_size];
memset(outbuf, 0, outbuf_size * sizeof(wchar_t));
- MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(), outbuf, outbuf_size);
+ MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(),
+ outbuf, outbuf_size);
std::wstring out(outbuf);
delete[] outbuf;
return out;
@@ -146,18 +159,20 @@ std::string wide_to_utf8(const std::wstring &input)
size_t outbuf_size = (input.size() + 1) * 6;
char *outbuf = new char[outbuf_size];
memset(outbuf, 0, outbuf_size);
- WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(), outbuf, outbuf_size, NULL, NULL);
+ WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(),
+ outbuf, outbuf_size, NULL, NULL);
std::string out(outbuf);
delete[] outbuf;
return out;
}
-#endif
+
+#endif // _WIN32
// You must free the returned string!
// The returned string is allocated using new
wchar_t *narrow_to_wide_c(const char *str)
{
- wchar_t* nstr = 0;
+ wchar_t *nstr = NULL;
#if defined(_WIN32)
int nResult = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR) str, -1, 0, 0);
if (nResult == 0) {
@@ -168,7 +183,7 @@ wchar_t *narrow_to_wide_c(const char *str)
}
#else
size_t len = strlen(str);
- nstr = new wchar_t[len+1];
+ nstr = new wchar_t[len + 1];
std::wstring intermediate = narrow_to_wide(str);
memset(nstr, 0, (len + 1) * sizeof(wchar_t));