From d96851f53456bb22809f7be93860ca39d4315c54 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Fri, 7 Jan 2005 22:39:43 +0000
Subject: [PATCH] miscellaneous cleanups for the multibyte parsing functions

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2242 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 src/nano.c  |  13 +++----
 src/proto.h |  10 ++---
 src/utils.c | 102 ++++++++++++++++++++++++-------------------------
 src/winio.c | 108 ++++++++++++++++++++++++++--------------------------
 4 files changed, 115 insertions(+), 118 deletions(-)

diff --git a/src/nano.c b/src/nano.c
index b9ba1cd9..5027dd38 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1178,12 +1178,11 @@ void do_delete(void)
     placewewant = xplustabs();
 
     if (current->data[current_x] != '\0') {
-	int char_len = parse_char(current->data + current_x, NULL,
-		NULL
+	int char_len = parse_char(current->data + current_x, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, NULL);
 	size_t line_len = strlen(current->data + current_x);
 
 	assert(current_x < strlen(current->data));
@@ -2501,11 +2500,11 @@ bool breakable(const char *line, ssize_t goal)
 	if (isblank(*line))
 	    return TRUE;
 
-	line += parse_char(line, NULL, &pos
+	line += parse_char(line, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, &pos);
 
 	goal -= pos;
     }
@@ -2539,11 +2538,11 @@ ssize_t break_line(const char *line, ssize_t goal, bool force)
 
 	assert(*line != '\t');
 
-	line_len = parse_char(line, NULL, &pos
+	line_len = parse_char(line, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, &pos);
 
 	goal -= pos;
 	line += line_len;
diff --git a/src/proto.h b/src/proto.h
index 6801d0a6..7bcb6732 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -478,13 +478,13 @@ bool is_byte_char(int c);
 int num_of_digits(int n);
 unsigned char control_rep(unsigned char c);
 bool parse_num(const char *str, ssize_t *val);
-int parse_char(const char *str, int *chr, size_t *col
+int parse_char(const char *buf, int *chr
 #ifdef NANO_WIDE
-	, bool *bad_char
+	, bool *bad_chr
 #endif
-	);
-size_t move_left(const char *str, size_t pos);
-size_t move_right(const char *str, size_t pos);
+	, size_t *col);
+size_t move_left(const char *buf, size_t pos);
+size_t move_right(const char *buf, size_t pos);
 void align(char **strp);
 void null_at(char **data, size_t index);
 void unsunder(char *str, size_t true_len);
diff --git a/src/utils.c b/src/utils.c
index 4b3c918b..dc95b95f 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -128,66 +128,66 @@ bool parse_num(const char *str, ssize_t *val)
     return TRUE;
 }
 
-/* Parse a multi-byte character from str.  Return the number of bytes
- * used.  If chr isn't NULL, store the wide character in it.  If col
- * isn't NULL, store the new display width in it.  If *str is '\t', we
- * expect col to have the current display width.  If bad_char isn't
- * NULL, set it to TRUE if we have a null byte or a bad multibyte
- * character. */
-int parse_char(const char *str, int *chr, size_t *col
+/* Parse a multibyte character from buf.  Return the number of bytes
+ * used.  If chr isn't NULL, store the wide character in it.  If
+ * bad_chr isn't NULL, set it to TRUE if we have a null byte or a bad
+ * multibyte character.  If col isn't NULL, store the new display width
+ * in it.  If *str is '\t', we expect col to have the current display
+ * width. */
+int parse_char(const char *buf, int *chr
 #ifdef NANO_WIDE
-	, bool *bad_char
+	, bool *bad_chr
 #endif
-	)
+	, size_t *col)
 {
-    int wide_str, wide_str_len;
+    int wide_buf, mb_buf_len;
 
-    assert(str != NULL);
+    assert(buf != NULL);
 
 #ifdef NANO_WIDE
-    if (bad_char != NULL)
-	*bad_char = FALSE;
+    if (bad_chr != NULL)
+	*bad_chr = FALSE;
 
     if (!ISSET(NO_UTF8)) {
 	wchar_t tmp;
 
 	/* Get the wide character equivalent of the multibyte
 	 * character. */
-	wide_str_len = mbtowc(&tmp, str, MB_CUR_MAX);
-	wide_str = (int)tmp;
-
-	/* If str contains a null byte or an invalid multibyte
-	 * character, interpret str's first byte as a single-byte
-	 * sequence and set bad_char to TRUE. */
-	if (wide_str_len <= 0) {
-	    wide_str_len = 1;
-	    wide_str = (unsigned char)*str;
-	    if (bad_char != NULL)
-		*bad_char = TRUE;
+	mb_buf_len = mbtowc(&tmp, buf, MB_CUR_MAX);
+	wide_buf = (int)tmp;
+
+	/* If buf contains a null byte or an invalid multibyte
+	 * character, interpret buf's first byte as a single-byte
+	 * sequence and set bad_chr to TRUE. */
+	if (mb_buf_len <= 0) {
+	    mb_buf_len = 1;
+	    wide_buf = (unsigned char)*buf;
+	    if (bad_chr != NULL)
+		*bad_chr = TRUE;
 	}
 
 	/* Save the wide character in chr. */
 	if (chr != NULL)
-	    *chr = wide_str;
+	    *chr = wide_buf;
 
 	/* Save the column width of the wide character in col. */
 	if (col != NULL) {
 	    /* If we have a tab, get its width in columns using the
 	     * current value of col. */
-	    if (wide_str == '\t')
+	    if (wide_buf == '\t')
 		*col += tabsize - *col % tabsize;
 	    /* If we have a control character, get its width using one
 	     * column for the "^" that will be displayed in front of it,
 	     * and the width in columns of its visible equivalent as
 	     * returned by control_rep(). */
-	    else if (is_cntrl_char(wide_str)) {
-		char *ctrl_wide_str = charalloc(MB_CUR_MAX);
+	    else if (is_cntrl_char(wide_buf)) {
+		char *ctrl_mb_buf = charalloc(MB_CUR_MAX);
 
 		(*col)++;
-		wide_str = control_rep((unsigned char)wide_str);
+		wide_buf = control_rep((unsigned char)wide_buf);
 
-		if (wctomb(ctrl_wide_str, (wchar_t)wide_str) != -1) {
-		    int width = wcwidth(wide_str);
+		if (wctomb(ctrl_mb_buf, (wchar_t)wide_buf) != -1) {
+		    int width = wcwidth((wchar_t)wide_buf);
 
 		    if (width != -1)
 			*col += width;
@@ -195,11 +195,11 @@ int parse_char(const char *str, int *chr, size_t *col
 		else
 		    (*col)++;
 
-		free(ctrl_wide_str);
+		free(ctrl_mb_buf);
 	    /* If we have a normal character, get its width in columns
 	     * normally. */
 	    } else {
-		int width = wcwidth(wide_str);
+		int width = wcwidth((wchar_t)wide_buf);
 
 		if (width != -1)
 		    *col += width;
@@ -207,25 +207,25 @@ int parse_char(const char *str, int *chr, size_t *col
 	}
     } else {
 #endif
-	/* Interpret str's first character as a single-byte sequence. */
-	wide_str_len = 1;
-	wide_str = (unsigned char)*str;
+	/* Interpret buf's first character as a single-byte sequence. */
+	mb_buf_len = 1;
+	wide_buf = (unsigned char)*buf;
 
 	/* Save the single-byte sequence in chr as though it's a wide
 	 * character. */
 	if (chr != NULL)
-	    *chr = wide_str;
+	    *chr = wide_buf;
 
 	if (col != NULL) {
 	    /* If we have a tab, get its width in columns using the
 	     * current value of col. */
-	    if (wide_str == '\t')
+	    if (wide_buf == '\t')
 		*col += tabsize - *col % tabsize;
 	    /* If we have a control character, it's two columns wide:
 	     * one column for the "^" that will be displayed in front of
 	     * it, and one column for its visible equivalent as returned
 	     * by control_rep(). */
-	    else if (is_cntrl_char(wide_str))
+	    else if (is_cntrl_char(wide_buf))
 		*col += 2;
 	    /* If we have a normal character, it's one column wide. */
 	    else
@@ -235,44 +235,44 @@ int parse_char(const char *str, int *chr, size_t *col
     }
 #endif
 
-    return wide_str_len;
+    return mb_buf_len;
 }
 
-/* Return the index in str of the beginning of the character before the
+/* Return the index in buf of the beginning of the character before the
  * one at pos. */
-size_t move_left(const char *str, size_t pos)
+size_t move_left(const char *buf, size_t pos)
 {
     size_t pos_prev = pos;
 
-    assert(str != NULL && pos <= strlen(str));
+    assert(str != NULL && pos <= strlen(buf));
 
     /* There is no library function to move backward one multibyte
      * character.  Here is the naive, O(pos) way to do it. */
     while (TRUE) {
-	int str_len = parse_char(str + pos - pos_prev, NULL, NULL
+	int mb_buf_len = parse_char(buf + pos - pos_prev, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, NULL);
 
-	if (pos_prev <= str_len)
+	if (pos_prev <= mb_buf_len)
 	    break;
 
-	pos_prev -= str_len;
+	pos_prev -= mb_buf_len;
     }
 
     return pos - pos_prev;
 }
 
-/* Return the index in str of the beginning of the character after the
+/* Return the index in buf of the beginning of the character after the
  * one at pos. */
-size_t move_right(const char *str, size_t pos)
+size_t move_right(const char *buf, size_t pos)
 {
-    return pos + parse_char(str + pos, NULL, NULL
+    return pos + parse_char(buf + pos, NULL
 #ifdef NANO_WIDE
 	, NULL
 #endif
-	);
+	, NULL);
 }
 
 /* Fix the memory allocation for a string. */
diff --git a/src/winio.c b/src/winio.c
index 36868c98..f4e55dbd 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -1936,11 +1936,11 @@ void do_statusbar_backspace(void)
 void do_statusbar_delete(void)
 {
     if (statusbar_x < statusbar_xend) {
-	int char_len = parse_char(answer + statusbar_x, NULL, NULL
+	int char_len = parse_char(answer + statusbar_x, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, NULL);
 
 	charmove(answer + statusbar_x, answer + statusbar_x + char_len,
 		statusbar_xend - statusbar_x - char_len + 1);
@@ -2056,11 +2056,11 @@ size_t actual_x(const char *str, size_t xplus)
     assert(str != NULL);
 
     while (*str != '\0') {
-	int str_len = parse_char(str, NULL, &length
+	int str_len = parse_char(str, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, &length);
 
 	if (length > xplus)
 	    break;
@@ -2085,11 +2085,11 @@ size_t strnlenpt(const char *str, size_t size)
     assert(str != NULL);
 
     while (*str != '\0') {
-	int str_len = parse_char(str, NULL, &length
+	int str_len = parse_char(str, NULL
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, &length);
 
 	str += str_len;
 
@@ -2160,25 +2160,25 @@ size_t display_string_len(const char *buf, size_t start_col, size_t
     /* Throughout the loop, we maintain the fact that *buf displays at
      * column start_col. */
     while (start_col <= end_col && *buf != '\0') {
-	int wide_buf, wide_buf_len;
-	size_t old_col = start_col;
+	int wide_buf, mb_buf_len;
 #ifdef NANO_WIDE
 	bool bad_char;
 #endif
+	size_t old_col = start_col;
 
-	wide_buf_len = parse_char(buf, &wide_buf, &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_wide_buf = charalloc(MB_CUR_MAX);
-	    int bad_wide_buf_len;
+	    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
@@ -2191,12 +2191,12 @@ size_t display_string_len(const char *buf, size_t start_col, size_t
 
 	    /* Translate the wide character to its multibyte
 	     * equivalent. */
-	    bad_wide_buf_len = wctomb(bad_wide_buf, (wchar_t)wide_buf);
+	    bad_mb_buf_len = wctomb(bad_mb_buf, (wchar_t)wide_buf);
 
-	    if (bad_wide_buf_len != -1)
-		retval += bad_wide_buf_len;
+	    if (bad_mb_buf_len != -1)
+		retval += bad_mb_buf_len;
 
-	    free(bad_wide_buf);
+	    free(bad_mb_buf);
 	} else {
 #endif
 	    /* If we have a tab, get its width in bytes using the
@@ -2208,23 +2208,22 @@ size_t display_string_len(const char *buf, size_t start_col, size_t
 	     * then add the number of bytes for its visible equivalent
 	     * as returned by control_rep(). */
 	    else if (is_cntrl_char(wide_buf)) {
-		char ctrl_wide_buf =
-			control_rep((unsigned char)wide_buf);
+		char ctrl_mb_buf = control_rep((unsigned char)wide_buf);
 
 		retval++;
-		retval += parse_char(&ctrl_wide_buf, NULL, NULL
+		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 += wide_buf_len;
+		retval += mb_buf_len;
 #ifdef NANO_WIDE
 	}
 
-	buf += wide_buf_len;
+	buf += mb_buf_len;
 #endif
     }
 
@@ -2279,43 +2278,43 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 
     if (column < start_col || (dollars && column > 0 &&
 	buf[start_index] != '\t')) {
-	int wide_buf, wide_buf_len;
+	int wide_buf, mb_buf_len;
 
 	/* We don't display all of buf[start_index] since it starts to
 	 * the left of the screen. */
-	wide_buf_len = parse_char(buf + start_index, &wide_buf, NULL
+	mb_buf_len = parse_char(buf + start_index, &wide_buf
 #ifdef NANO_WIDE
 		, NULL
 #endif
-		);
+		, NULL);
 
 	if (is_cntrl_char(wide_buf)) {
 	    if (column < start_col) {
-		char *ctrl_wide_buf =
+		char *ctrl_mb_buf =
 #ifdef NANO_WIDE
 			!ISSET(NO_UTF8) ? charalloc(MB_CUR_MAX) :
 #endif
 			charalloc(1);
-		int ctrl_wide_buf_len, i;
+		int ctrl_mb_buf_len, i;
 
 		wide_buf = control_rep((unsigned char)wide_buf);
 
 #ifdef NANO_WIDE
 		if (!ISSET(NO_UTF8))
-		    ctrl_wide_buf_len = wctomb(ctrl_wide_buf,
+		    ctrl_mb_buf_len = wctomb(ctrl_mb_buf,
 			(wchar_t)wide_buf);
 		else {
 #endif
-		    ctrl_wide_buf_len = 1;
-		    ctrl_wide_buf[0] = (unsigned char)wide_buf;
+		    ctrl_mb_buf_len = 1;
+		    ctrl_mb_buf[0] = (unsigned char)wide_buf;
 #ifdef NANO_WIDE
 		}
 #endif
 
-		for (i = 0; i < ctrl_wide_buf_len; i++)
-		    converted[index++] = ctrl_wide_buf[i];
+		for (i = 0; i < ctrl_mb_buf_len; i++)
+		    converted[index++] = ctrl_mb_buf[i];
 
-		free(ctrl_wide_buf);
+		free(ctrl_mb_buf);
 
 #ifdef NANO_WIDE
 		if (!ISSET(NO_UTF8)) {
@@ -2327,7 +2326,7 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 #endif
 		    start_col++;
 
-		start_index += wide_buf_len;
+		start_index += mb_buf_len;
 	    }
 	}
 #ifdef NANO_WIDE
@@ -2335,22 +2334,22 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 	    converted[index++] = ' ';
 
 	    start_col++;
-	    start_index += wide_buf_len;
+	    start_index += mb_buf_len;
 	}
 #endif
     }
 
     while (index < alloc_len - 1 && buf[start_index] != '\0') {
-	int wide_buf, wide_buf_len;
+	int wide_buf, mb_buf_len;
 #ifdef NANO_WIDE
 	bool bad_char;
 #endif
 
-	wide_buf_len = parse_char(buf + start_index, &wide_buf, NULL
+	mb_buf_len = parse_char(buf + start_index, &wide_buf
 #ifdef NANO_WIDE
 		, &bad_char
 #endif
-		);
+		, NULL);
 
 	if (wide_buf == '\t') {
 	    converted[index++] =
@@ -2367,12 +2366,12 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 	 * contains an invalid multibyte control character, interpret
 	 * that character as though it's a normal control character. */
 	} else if (is_cntrl_char(wide_buf)) {
-	    char *ctrl_wide_buf =
+	    char *ctrl_mb_buf =
 #ifdef NANO_WIDE
 		!ISSET(NO_UTF8) ? charalloc(MB_CUR_MAX) :
 #endif
 		charalloc(1);
-	    int ctrl_wide_buf_len, i;
+	    int ctrl_mb_buf_len, i;
 
 	    converted[index++] = '^';
 	    start_col++;
@@ -2380,20 +2379,20 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 
 #ifdef NANO_WIDE
 	    if (!ISSET(NO_UTF8))
-		ctrl_wide_buf_len = wctomb(ctrl_wide_buf,
+		ctrl_mb_buf_len = wctomb(ctrl_mb_buf,
 			(wchar_t)wide_buf);
 	    else {
 #endif
-		ctrl_wide_buf_len = 1;
-		ctrl_wide_buf[0] = (unsigned char)wide_buf;
+		ctrl_mb_buf_len = 1;
+		ctrl_mb_buf[0] = (unsigned char)wide_buf;
 #ifdef NANO_WIDE
 	    }
 #endif
 
-	    for (i = 0; i < ctrl_wide_buf_len; i++)
-		converted[index++] = ctrl_wide_buf[i];
+	    for (i = 0; i < ctrl_mb_buf_len; i++)
+		converted[index++] = ctrl_mb_buf[i];
 
-	    free(ctrl_wide_buf);
+	    free(ctrl_mb_buf);
 
 #ifdef NANO_WIDE
 	    if (!ISSET(NO_UTF8)) {
@@ -2419,19 +2418,18 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 	     * character, interpret that character as though it's a
 	     * normal non-control character. */
 	    if (!ISSET(NO_UTF8) && bad_char) {
-		char *bad_wide_buf = charalloc(MB_CUR_MAX);
-		int bad_wide_buf_len;
+		char *bad_mb_buf = charalloc(MB_CUR_MAX);
+		int bad_mb_buf_len;
 
-		bad_wide_buf_len = wctomb(bad_wide_buf,
-			(wchar_t)wide_buf);
+		bad_mb_buf_len = wctomb(bad_mb_buf, (wchar_t)wide_buf);
 
-		for (i = 0; i < bad_wide_buf_len; i++)
-		    converted[index++] = bad_wide_buf[i];
+		for (i = 0; i < bad_mb_buf_len; i++)
+		    converted[index++] = bad_mb_buf[i];
 
-		free(bad_wide_buf);
+		free(bad_mb_buf);
 	    } else {
 #endif
-		for (i = 0; i < wide_buf_len; i++)
+		for (i = 0; i < mb_buf_len; i++)
 		    converted[index++] = buf[start_index + i];
 #ifdef NANO_WIDE
 	    }
@@ -2446,7 +2444,7 @@ char *display_string(const char *buf, size_t start_col, size_t len, bool
 		start_col++;
 	}
 
-	start_index += wide_buf_len;
+	start_index += mb_buf_len;
     }
 
     if (index < alloc_len - 1)
-- 
GitLab