aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/funcs.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-08-24 20:59:40 -0400
committerGitHub <noreply@github.com>2020-08-24 20:59:40 -0400
commit8a333afec53a48c90de7b0bde30f9db2d02d1898 (patch)
tree223e53de750fc3f2330a83d96367f3ecbe7c590d /src/nvim/eval/funcs.c
parent8c49e3d50959e24dadd688f56a18f104bd5fd934 (diff)
parentb46b37306552911552e348a4ed44c1c6cf2f3eef (diff)
downloadrneovim-8a333afec53a48c90de7b0bde30f9db2d02d1898.tar.gz
rneovim-8a333afec53a48c90de7b0bde30f9db2d02d1898.tar.bz2
rneovim-8a333afec53a48c90de7b0bde30f9db2d02d1898.zip
Merge pull request #12786 from janlazo/vim-8.1.1516
vim-patch:8.1.{1516,1677,2051,2089,2275,2364},8.2.{423,1517}
Diffstat (limited to 'src/nvim/eval/funcs.c')
-rw-r--r--src/nvim/eval/funcs.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 18e514b9a0..8e0e420eb0 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -9946,6 +9946,16 @@ static void f_strpart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
len = slen - n;
}
+ if (argvars[2].v_type != VAR_UNKNOWN && argvars[3].v_type != VAR_UNKNOWN) {
+ int off;
+
+ // length in characters
+ for (off = n; off < (int)slen && len > 0; len--) {
+ off += utfc_ptr2len((char_u *)p + off);
+ }
+ len = off - n;
+ }
+
rettv->v_type = VAR_STRING;
rettv->vval.v_string = (char_u *)xmemdupz(p + n, (size_t)len);
}