Eradicate remaining uses of std::wstring on non-Windows.
authorAdam Borowski <kilobyte@angband.pl>
Sun, 12 Aug 2012 19:21:00 +0000 (21:21 +0200)
committerAdam Borowski <kilobyte@angband.pl>
Sun, 12 Aug 2012 19:42:33 +0000 (21:42 +0200)
They cause problems on Android, and were slightly wrong anyway (if a
single line of an included config file is encoded in UTF-16 and has a
monstrous length, we'd waste twice as much memory as needed to hold it.
A world-shattering bug.).

crawl-ref/source/unicode.cc
crawl-ref/source/unicode.h

index 461c41e..30c27f3 100644 (file)
@@ -136,7 +136,7 @@ std::wstring utf8_to_16(const char *s)
 }
 #endif
 
-std::string utf16_to_8(const wchar_t *s)
+std::string utf16_to_8(const utf16_t *s)
 {
     std::string d;
     ucs_t c;
@@ -295,7 +295,7 @@ FileLineInput::~FileLineInput()
 std::string FileLineInput::get_line()
 {
     ASSERT(f);
-    std::wstring win; // actually, these are more of a lose
+    std::vector<utf16_t> win;
     std::string out;
     char buf[512];
     ucs_t c;
@@ -352,7 +352,8 @@ std::string FileLineInput::get_line()
             win.push_back(c);
         }
         while (!seen_eof);
-        return utf16_to_8(win.c_str());
+        win.push_back(0);
+        return utf16_to_8(&win[0]);
 
     case BOM_UTF16BE:
         do
@@ -369,7 +370,8 @@ std::string FileLineInput::get_line()
             win.push_back(c);
         }
         while (!seen_eof);
-        return utf16_to_8(win.c_str());
+        win.push_back(0);
+        return utf16_to_8(&win[0]);
 
     case BOM_UTF32LE:
         do
index f0d8c93..9cddcd1 100644 (file)
@@ -6,9 +6,11 @@
 #ifndef UNICODE_H
 #define UNICODE_H
 
+
 int wctoutf8(char *d, ucs_t s);
 int utf8towc(ucs_t *d, const char *s);
 #ifdef TARGET_OS_WINDOWS
+typedef wchar_t utf16_t;
 std::wstring utf8_to_16(const char *s);
 std::string utf16_to_8(const wchar_t *s);
 
@@ -20,6 +22,8 @@ static inline std::string utf16_to_8(const std::wstring &s)
 {
     return utf16_to_8(s.c_str());
 }
+#else
+typedef uint16_t utf16_t;
 #endif
 std::string utf8_to_mb(const char *s);
 std::string mb_to_utf8(const char *s);