aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/funcs.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2021-03-27 11:29:32 -0400
committerGitHub <noreply@github.com>2021-03-27 11:29:32 -0400
commitacd643bd496a3c76ff99a9952d493a16cd2861d6 (patch)
treedefcac55febffa177c437886bd861f2fa68d9748 /src/nvim/eval/funcs.c
parent75a9db5b7d60c016a950dac7f0a0932e7d7c6df8 (diff)
parent423f3bc3e2d6aa8245a2cda1c4e7663387383ab7 (diff)
downloadrneovim-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.c32
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
*/