From 68fa910c789e54bfaa98e8013c149c9cf251884f Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Wed, 17 Feb 2010 12:38:53 +0100 Subject: [PATCH] handle invalid characters properly --- src/window.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 13fe5a3b..9d073c84 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -535,7 +535,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid if (x < maxx) { real_x++; - x += wcwidth((*tmp)[beginning+real_x-minx-1]); + x += std::max(wcwidth((*tmp)[beginning+real_x-minx-1]), 1); } else if (beginning < maxbeginning) beginning++; @@ -551,7 +551,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid if (x > minx) { real_x--; - x -= wcwidth((*tmp)[beginning+real_x-minx]); + x -= std::max(wcwidth((*tmp)[beginning+real_x-minx]), 1); } else if (beginning > 0) beginning--; @@ -940,9 +940,7 @@ std::wstring ToWString(const std::string &s) size_t Window::Length(const std::wstring &ws) { - size_t length = 0; - for (std::wstring::const_iterator it = ws.begin(); it != ws.end(); ++it) - length += wcwidth(*it); - return length; + int len = wcswidth(ws.c_str(), -1); + return len < 0 ? ws.length() : len; }