summaryrefslogtreecommitdiff
path: root/lib/util.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-04-12 23:21:43 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-04-12 23:21:43 +0300
commitd22612899a74005fd442d54710c86e677742c7f4 (patch)
tree71249835c9ec60cb793006b191256234c5c485c1 /lib/util.c
parentf722f247fcd2d53c346cc99bba15c0d20a16c652 (diff)
downloadbemenu-d22612899a74005fd442d54710c86e677742c7f4.tar.gz
bemenu-d22612899a74005fd442d54710c86e677742c7f4.tar.bz2
bemenu-d22612899a74005fd442d54710c86e677742c7f4.zip
Curses really does not like tabs.
Diffstat (limited to 'lib/util.c')
-rw-r--r--lib/util.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/util.c b/lib/util.c
index ca00514..fa85431 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -130,16 +130,26 @@ int _bmUtf8StringScreenWidth(const char *string)
{
assert(string);
- int num_char = mbstowcs(NULL, string, 0) + 1;
+ char *mstr = _bmStrdup(string);
+ if (!mstr)
+ return strlen(string);
+
+ char *s;
+ for (s = mstr; *s; ++s) if (*s == '\t') *s = ' ';
+
+ int num_char = mbstowcs(NULL, mstr, 0) + 1;
wchar_t *wstring = malloc((num_char + 1) * sizeof (wstring[0]));
- if (mbstowcs(wstring, string, num_char) == (size_t)(-1)) {
+ if (mbstowcs(wstring, mstr, num_char) == (size_t)(-1)) {
free(wstring);
- return strlen(string);
+ int len = strlen(mstr);
+ free(mstr);
+ return len;
}
int length = wcswidth(wstring, num_char);
free(wstring);
+ free(mstr);
return length;
}