]> git.wh0rd.org Git - nano.git/commitdiff
handle wctomb() failures properly in display_stirng_len() and
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 29 Dec 2004 21:32:22 +0000 (21:32 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 29 Dec 2004 21:32:22 +0000 (21:32 +0000)
display_string()

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

src/winio.c

index dabf213dc0f8344f9342bf5315642c7c6aaf8445..d116b89960a6727a93a9487cdcb046c8bd3c3077 100644 (file)
@@ -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];