diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2017-04-09 09:29:00 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2017-04-10 12:02:26 +0200 |
commit | 4c857dae1169f3b8c7b6a9740f50acfd3c16858d (patch) | |
tree | 2368cea5211cd31269b2cc3c5b7e31147e9f268e /src/nvim/eval.c | |
parent | a3a06d02489a7a43cdd7909c92c79ef7971c8663 (diff) | |
download | rneovim-4c857dae1169f3b8c7b6a9740f50acfd3c16858d.tar.gz rneovim-4c857dae1169f3b8c7b6a9740f50acfd3c16858d.tar.bz2 rneovim-4c857dae1169f3b8c7b6a9740f50acfd3c16858d.zip |
vim-patch:8.0.0243
Problem: When making a character lower case with tolower() changes the byte
cound, it is not made lower case.
Solution: Add strlow_save(). (Dominique Pelle, closes vim/vim#1406)
https://github.com/vim/vim/commit/cc5b22b3bfdc0e9e835cf7871166badda31447bd
Join almost identical strup_save and strlow_save functions to one
Function.
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 26 |
1 files changed, 2 insertions, 24 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index c1ee33b06a..ed07de51c8 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -16791,30 +16791,8 @@ void timer_teardown(void) */ static void f_tolower(typval_T *argvars, typval_T *rettv, FunPtr fptr) { - char_u *p = (char_u *)xstrdup(tv_get_string(&argvars[0])); rettv->v_type = VAR_STRING; - rettv->vval.v_string = p; - - while (*p != NUL) { - int l; - - if (enc_utf8) { - int c, lc; - - c = utf_ptr2char(p); - lc = mb_tolower(c); - l = utf_ptr2len(p); - /* TODO: reallocate string when byte count changes. */ - if (utf_char2len(lc) == l) - utf_char2bytes(lc, p); - p += l; - } else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1) - p += l; /* skip multi-byte character */ - else { - *p = TOLOWER_LOC(*p); /* note that tolower() can be a macro */ - ++p; - } - } + rettv->vval.v_string = (char_u *)strcase_save(tv_get_string(&argvars[0]), false); } /* @@ -16823,7 +16801,7 @@ static void f_tolower(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_toupper(typval_T *argvars, typval_T *rettv, FunPtr fptr) { rettv->v_type = VAR_STRING; - rettv->vval.v_string = (char_u *)strup_save(tv_get_string(&argvars[0])); + rettv->vval.v_string = (char_u *)strcase_save(tv_get_string(&argvars[0]), true); } /* |