diff options
Diffstat (limited to 'src/nvim/strings.c')
-rw-r--r-- | src/nvim/strings.c | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/src/nvim/strings.c b/src/nvim/strings.c index 3f31914c03..3b0a950ff2 100644 --- a/src/nvim/strings.c +++ b/src/nvim/strings.c @@ -344,14 +344,17 @@ char *strcase_save(const char *const orig, bool upper) char *p = res; while (*p != NUL) { - int l; - int c = utf_ptr2char((const char_u *)p); + int l = utf_ptr2len((const char_u *)p); + if (c == 0) { + // overlong sequence, use only the first byte + c = *p; + l = 1; + } int uc = upper ? mb_toupper(c) : mb_tolower(c); // Reallocate string when byte count changes. This is rare, // thus it's OK to do another malloc()/free(). - l = utf_ptr2len((const char_u *)p); int newl = utf_char2len(uc); if (newl != l) { // TODO(philix): use xrealloc() in strup_save() @@ -456,25 +459,6 @@ char_u *vim_strchr(const char_u *const string, const int c) } /* - * Search for last occurrence of "c" in "string". - * Return NULL if not found. - * Does not handle multi-byte char for "c"! - */ -char_u *vim_strrchr(const char_u *string, int c) - FUNC_ATTR_NONNULL_ALL FUNC_ATTR_PURE -{ - const char_u *retval = NULL; - const char_u *p = string; - - while (*p) { - if (*p == c) - retval = p; - MB_PTR_ADV(p); - } - return (char_u *) retval; -} - -/* * Sort an array of strings. */ @@ -709,6 +693,7 @@ static float_T tv_float(typval_T *const tvs, int *const idxp) /// /// @see vim_vsnprintf(). int vim_snprintf_add(char *str, size_t str_m, char *fmt, ...) + FUNC_ATTR_PRINTF(3, 4) { const size_t len = strlen(str); size_t space; @@ -734,6 +719,7 @@ int vim_snprintf_add(char *str, size_t str_m, char *fmt, ...) /// @return Number of bytes excluding NUL byte that would be written to the /// string if str_m was greater or equal to the return value. int vim_snprintf(char *str, size_t str_m, const char *fmt, ...) + FUNC_ATTR_PRINTF(3, 4) { va_list ap; va_start(ap, fmt); @@ -1233,6 +1219,7 @@ int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap, str_arg_l = 3; zero_padding = 0; } else { + // Regular float number format[0] = '%'; size_t l = 1; if (force_sign) { @@ -1257,7 +1244,6 @@ int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap, format[l] = (char)(fmt_spec == 'F' ? 'f' : fmt_spec); format[l + 1] = NUL; - // Regular float number str_arg_l = (size_t)snprintf(tmp, sizeof(tmp), format, f); assert(str_arg_l < sizeof(tmp)); |