]> git.wh0rd.org Git - nano.git/commitdiff
remove display_string_len() again for the time being, since it's still
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 8 Jan 2005 07:21:41 +0000 (07:21 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 8 Jan 2005 07:21:41 +0000 (07:21 +0000)
prone to off-by-one errors that lead to memory corruption and I can't
find anything obviously wrong with it; always allocate enough space for
len columns of text now; any extra space that isn't used will be removed
by the null_at() call at the end of display_string() anyway

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

ChangeLog
src/proto.h
src/winio.c

index 5e7b63c853113c0149b8d9a799250518d8e77dd9..48a1626142229076bd788808965568653475e020 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -53,13 +53,12 @@ CVS code -
          (mostly) work properly with files containing multibyte
          characters, and text display of such files should now (mostly)
          work properly as well.  New functions control_rep(),
-         parse_char(), move_left(), move_right(), and
-         display_string_len(); changes to do_left(), do_right(),
-         do_delete(), breakable(), break_line(), do_output(),
-         get_buffer(), unget_input(), actual_x(), strnlenpt(),
-         display_string(), titlebar(), statusbar(), onekey(),
-         edit_add(), do_replace_highlight(), and do_credits(). (David
-         Benbennick and DLR)
+         parse_char(), move_left(), and move_right(); changes to
+         do_left(), do_right(), do_delete(), breakable(), break_line(),
+         do_output(), get_buffer(), unget_input(), actual_x(),
+         strnlenpt(), display_string(), titlebar(), statusbar(),
+         onekey(), edit_add(), do_replace_highlight(), and
+         do_credits(). (David Benbennick and DLR)
        - Overhaul the high-level input routines for the statusbar to
          make them read the shortcut lists for functions instead of
          manually running them, to make nanogetstr() less complex, and
index 2f06b7910002c3c8d42169167f6125218f26176b..5c8e560a13649a229debf8124ecbef7a1f5fd89d 100644 (file)
@@ -601,8 +601,6 @@ void blank_edit(void);
 void blank_statusbar(void);
 void check_statusblank(void);
 void blank_bottombars(void);
-size_t display_string_len(const char *buf, size_t start_col, size_t
-       end_col);
 char *display_string(const char *buf, size_t start_col, size_t len, bool
        dollars);
 void nanoget_repaint(const char *buf, const char *inputbuf, size_t x);
index fa424ee72dcd0076555858606c0ed6344a4ffa08..0ac50dee0634907f703522a9f516d540ed6de575 100644 (file)
@@ -2148,90 +2148,6 @@ void blank_bottombars(void)
     }
 }
 
-/* buf is a multibyte string to be displayed.  We need to expand tabs
- * and control characters.  How many bytes do we need to display?
- * start_col is the column of *buf (usually 0).  We display to
- * (end_col - 1). */
-size_t display_string_len(const char *buf, size_t start_col, size_t
-       end_col)
-{
-    size_t retval = 0;
-
-    assert(buf != NULL);
-
-    /* Throughout the loop, we maintain the fact that *buf displays at
-     * column start_col. */
-    while (start_col <= end_col && *buf != '\0') {
-       int wide_buf, mb_buf_len;
-#ifdef NANO_WIDE
-       bool bad_char;
-#endif
-       size_t old_col = start_col;
-
-       mb_buf_len = parse_char(buf, &wide_buf
-#ifdef NANO_WIDE
-               , &bad_char
-#endif
-               , &start_col);
-
-#ifdef NANO_WIDE
-       /* If buf contains a null byte or an invalid multibyte
-        * character, interpret that character as though it's a wide
-        * character. */
-       if (!ISSET(NO_UTF8) && bad_char) {
-           char *bad_mb_buf = charalloc(MB_CUR_MAX);
-           int bad_mb_buf_len;
-
-           /* If we have a control character, add one byte to account
-            * for the "^" that will be displayed in front of it, and
-            * translate the character to its visible equivalent as
-            * returned by control_rep(). */
-           if (is_cntrl_char(wide_buf)) {
-               retval++;
-               wide_buf = control_rep((unsigned char)wide_buf);
-           }
-
-           /* Translate the wide character to its multibyte
-            * equivalent. */
-           bad_mb_buf_len = wctomb(bad_mb_buf, (wchar_t)wide_buf);
-
-           if (bad_mb_buf_len != -1)
-               retval += bad_mb_buf_len;
-
-           free(bad_mb_buf);
-       } else {
-#endif
-           /* If we have a tab, get its width in bytes using the
-            * current value of col. */
-           if (wide_buf == '\t')
-               retval += start_col - old_col;
-           /* If we have a control character, add one byte to account
-            * for the "^" that will be displayed in front of it, and
-            * then add the number of bytes for its visible equivalent
-            * as returned by control_rep(). */
-           else if (is_cntrl_char(wide_buf)) {
-               char ctrl_mb_buf = control_rep((unsigned char)wide_buf);
-
-               retval++;
-               retval += parse_char(&ctrl_mb_buf, NULL
-#ifdef NANO_WIDE
-                       , NULL
-#endif
-                       , NULL);
-           /* If we have a normal character, add its width in bytes
-            * normally. */
-           } else
-               retval += mb_buf_len;
-#ifdef NANO_WIDE
-       }
-
-       buf += mb_buf_len;
-#endif
-    }
-
-    return retval;
-}
-
 /* Convert buf into a string that can be displayed on screen.  The
  * caller wants to display buf starting with column start_col, and
  * extending for at most len columns.  start_col is zero-based.  len is
@@ -2266,14 +2182,12 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 
     assert(column <= start_col);
 
-    alloc_len = display_string_len(buf + start_index, start_col,
-       start_col + len);
 #ifdef NANO_WIDE
     if (!ISSET(NO_UTF8))
-       alloc_len += MB_CUR_MAX * 2;
+       alloc_len = MB_CUR_MAX * (len + 2);
     else
 #endif
-       alloc_len += 2;
+       alloc_len = len + 2;
 
     converted = charalloc(alloc_len + 1);
     index = 0;