diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-03-27 11:29:32 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-27 11:29:32 -0400 |
commit | acd643bd496a3c76ff99a9952d493a16cd2861d6 (patch) | |
tree | defcac55febffa177c437886bd861f2fa68d9748 /src/nvim/eval/funcs.c | |
parent | 75a9db5b7d60c016a950dac7f0a0932e7d7c6df8 (diff) | |
parent | 423f3bc3e2d6aa8245a2cda1c4e7663387383ab7 (diff) | |
download | rneovim-acd643bd496a3c76ff99a9952d493a16cd2861d6.tar.gz rneovim-acd643bd496a3c76ff99a9952d493a16cd2861d6.tar.bz2 rneovim-acd643bd496a3c76ff99a9952d493a16cd2861d6.zip |
Merge pull request #13621 from janlazo/vim-8.1.2326
vim-patch:8.1.{2326,2344,2398},8.2.0949
Diffstat (limited to 'src/nvim/eval/funcs.c')
-rw-r--r-- | src/nvim/eval/funcs.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 01d23654de..650b4e3882 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -10189,6 +10189,38 @@ static void f_strpart(typval_T *argvars, typval_T *rettv, FunPtr fptr) rettv->vval.v_string = (char_u *)xmemdupz(p + n, (size_t)len); } +// "strptime({format}, {timestring})" function +static void f_strptime(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + char fmt_buf[NUMBUFLEN]; + char str_buf[NUMBUFLEN]; + + struct tm tmval = { + .tm_isdst = -1, + }; + char *fmt = (char *)tv_get_string_buf(&argvars[0], fmt_buf); + char *str = (char *)tv_get_string_buf(&argvars[1], str_buf); + + vimconv_T conv = { + .vc_type = CONV_NONE, + }; + char_u *enc = enc_locale(); + convert_setup(&conv, p_enc, enc); + if (conv.vc_type != CONV_NONE) { + fmt = (char *)string_convert(&conv, (char_u *)fmt, NULL); + } + if (fmt == NULL + || os_strptime(str, fmt, &tmval) == NULL + || (rettv->vval.v_number = mktime(&tmval)) == -1) { + rettv->vval.v_number = 0; + } + if (conv.vc_type != CONV_NONE) { + xfree(fmt); + } + convert_setup(&conv, NULL, NULL); + xfree(enc); +} + /* * "strridx()" function */ |