nano

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

commit 035b91cb15a2adc1606d9a3f573fe6175e0161f1
parent f456794045ef35efb44aca80819bacd413aab7b6
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Sun,  8 Jul 2018 20:11:32 +0200

chars: make the UTF-8 case ever so slightly faster by eliding an 'if'

And in the bargain get rid of some duplicate code.

This makes a binary without UTF-8 support slightly slower, but that's
not important -- it is more than fast enough anyway.  Important is that
the most used and longest code path, the UTF-8 case, becomes faster.

Note that 'is_cntrl_mbchar()' will fall back to 'is_cntrl_char()' for
a non-UTF-8 build, so the deleted piece of code really was equivalent
with the remaining piece for that case.

Diffstat:
Msrc/chars.c | 30++++--------------------------
1 file changed, 4 insertions(+), 26 deletions(-)

diff --git a/src/chars.c b/src/chars.c @@ -292,10 +292,9 @@ char *make_mbchar(long chr, int *chr_mb_len) * col isn't NULL, add the character's width (in columns) to it. */ int parse_mbchar(const char *buf, char *chr, size_t *col) { -#ifdef ENABLE_UTF8 - if (use_utf8) { int length; +#ifdef ENABLE_UTF8 /* If this is a UTF-8 starter byte, get the number of bytes of the character. */ if ((signed char)*buf < 0) { length = mblen(buf, MAXCHARLEN); @@ -304,6 +303,7 @@ int parse_mbchar(const char *buf, char *chr, size_t *col) if (length <= 0) length = 1; } else +#endif length = 1; /* When requested, store the multibyte character in chr. */ @@ -327,35 +327,13 @@ int parse_mbchar(const char *buf, char *chr, size_t *col) /* If we have a normal character, get its width normally. */ } else if (length == 1) *col += 1; +#ifdef ENABLE_UTF8 else *col += mbwidth(buf); - } - - return length; - } else #endif - { - /* When requested, store the byte character in chr. */ - if (chr != NULL) - *chr = *buf; - - /* When requested, add the width of the character to col. */ - if (col != NULL) { - /* If we have a tab, compute its width in columns using the - * current value of col. */ - if (*buf == '\t') - *col += tabsize - *col % tabsize; - /* If we have a control character, it's two columns wide: one - * column for the "^", and one for the visible character. */ - else if (is_cntrl_char((unsigned char)*buf)) - *col += 2; - /* If we have a normal character, it's one column wide. */ - else - (*col)++; } - return 1; - } + return length; } /* Return the index in buf of the beginning of the multibyte character