diff options
Diffstat (limited to 'cmd-parse.y')
-rw-r--r-- | cmd-parse.y | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/cmd-parse.y b/cmd-parse.y index 891f2289..9f36af7e 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -26,6 +26,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <wchar.h> #include "tmux.h" @@ -1251,10 +1252,9 @@ error: static int yylex_token_escape(char **buf, size_t *len) { - int ch, type, o2, o3; - u_int size, i, tmp; - char s[9]; - struct utf8_data ud; + int ch, type, o2, o3, mlen; + u_int size, i, tmp; + char s[9], m[MB_LEN_MAX]; ch = yylex_getc(); @@ -1339,11 +1339,12 @@ unicode: yyerror("invalid \\%c argument", type); return (0); } - if (utf8_split(tmp, &ud) != UTF8_DONE) { + mlen = wctomb(m, tmp); + if (mlen <= 0 || mlen > (int)sizeof m) { yyerror("invalid \\%c argument", type); return (0); } - yylex_append(buf, len, ud.data, ud.size); + yylex_append(buf, len, m, mlen); return (1); } |