From 84b8a86c3e15401ab3620c010037983bb4ef4713 Mon Sep 17 00:00:00 2001 From: kelson42 Date: Mon, 6 Jan 2014 03:27:03 +0100 Subject: [PATCH] Try to fix some problem with unicode path loading on windows --- src/common/componentTools.cpp | 32 ++++++++++++++++++++++++++++++++ src/common/componentTools.h | 8 ++++++++ 2 files changed, 40 insertions(+) diff --git a/src/common/componentTools.cpp b/src/common/componentTools.cpp index 9c73e3aee..6086b7bcf 100644 --- a/src/common/componentTools.cpp +++ b/src/common/componentTools.cpp @@ -33,6 +33,38 @@ const char *nsStringToCString(const nsAString &str) { return strdup(cStr); } +std::string nsStringToString(const nsEmbedString &str) { +#ifdef _WIN32 + PRUnichar *start = (PRUnichar *)str.get(); + PRUnichar *end = start + str.Length(); + wchar_t wca[4096]; + wchar_t *wstart = wca; + wchar_t *wpr = wstart; + + for(; start < end; ++start) + { + *wstart = (wchar_t) *start; + ++wstart; + } + *wstart = 0; + + std::string ptr; + ptr.resize(4096); + size_t size = wcstombs((char*)ptr.data(), wpr, 4096); + ptr.resize(size); + + return ptr; +#else + const char *cStr; + nsCString tmpStr; + + CopyUTF16toUTF8(str, tmpStr); + NS_CStringGetData(tmpStr, &cStr); + return std::string(cStr); +#endif + +} + const char *nsStringToUTF8(const nsAString &str) { const char *cStr; nsCString tmpStr; diff --git a/src/common/componentTools.h b/src/common/componentTools.h index f1c79250d..a7b5c1e1a 100644 --- a/src/common/componentTools.h +++ b/src/common/componentTools.h @@ -20,14 +20,22 @@ #ifndef KIWIX_COMPONENTTOOLS_H #define KIWIX_COMPONENTTOOLS_H +#include + #ifdef __APPLE__ #include typedef uint16_t char16_t; #endif +#ifdef _WIN32 + #include +#endif + #include "nsStringAPI.h" +#include "nsEmbedString.h" const char *nsStringToCString(const nsAString &str); +std::string nsStringToString(const nsEmbedString &str); const char *nsStringToUTF8(const nsAString &str); #endif