nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit f282428a4291eedc5c9428b60d05bfa83d0d9e4e
parent 4d97a588e6c50391e5da25f599ceb84d7cd6d694
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date:   Wed, 29 Dec 2004 21:32:22 +0000

handle wctomb() failures properly in display_stirng_len() and
display_string()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2207 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

Diffstat:
Msrc/winio.c | 30+++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/winio.c b/src/winio.c @@ -1769,6 +1769,8 @@ size_t display_string_len(const char *buf, size_t start_col, size_t if (bad_wide_buf_len != -1) retval += bad_wide_buf_len; + else + retval++; free(bad_wide_buf); } else { @@ -1809,7 +1811,10 @@ size_t display_string_len(const char *buf, size_t start_col, size_t free(bad_wide_buf); - retval += bad_wide_buf_len; + if (bad_wide_buf_len != -1) + retval += bad_wide_buf_len; + else + retval++; } else #endif retval += wide_buf_len; @@ -1887,10 +1892,15 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool wide_buf = control_rep((unsigned char)wide_buf); #ifdef NANO_WIDE - if (!ISSET(NO_UTF8)) + if (!ISSET(NO_UTF8)) { ctrl_wide_buf_len = wctomb(ctrl_wide_buf, (wchar_t)wide_buf); - else { + + if (ctrl_wide_buf_len == -1) { + ctrl_wide_buf_len = 1; + ctrl_wide_buf[0] = ' '; + } + } else { #endif ctrl_wide_buf_len = 1; ctrl_wide_buf[0] = (unsigned char)wide_buf; @@ -1961,10 +1971,15 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool wide_buf = control_rep((unsigned char)wide_buf); #ifdef NANO_WIDE - if (!ISSET(NO_UTF8)) + if (!ISSET(NO_UTF8)) { ctrl_wide_buf_len = wctomb(ctrl_wide_buf, (wchar_t)wide_buf); - else { + + if (ctrl_wide_buf_len == -1) { + ctrl_wide_buf_len = 1; + ctrl_wide_buf[0] = ' '; + } + } else { #endif ctrl_wide_buf_len = 1; ctrl_wide_buf[0] = (unsigned char)wide_buf; @@ -2003,6 +2018,11 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool bad_wide_buf_len = wctomb(bad_wide_buf, (wchar_t)wide_buf); + if (bad_wide_buf_len == -1) { + bad_wide_buf_len = 1; + bad_wide_buf[0] = ' '; + } + for (i = 0; i < bad_wide_buf_len; i++) converted[index++] = bad_wide_buf[i];