mirror of
https://github.com/neovim/neovim.git
synced 2025-09-11 13:58:18 +00:00
vim-patch:8.1.2326: cannot parse a date/time string
Problem: Cannot parse a date/time string. Solution: Add strptime(). (Stephen Wall, closes #)10455d43fe
N/A patches for version.c: vim-patch:8.1.2344: Cygwin: warning for using strptime() Problem: Cygwin: warning for using strptime(). Solution: Move defining _XOPEN_SOURCE and __USE_XOPEN to vim.h. (Ken Takata, closes vim/vim#5265) Use 700 for _XOPEN_SOURCE for mkdtemp().6a228c6463
This commit is contained in:
@@ -10189,6 +10189,36 @@ 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 = { 0 };
|
||||
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
|
||||
*/
|
||||
|
Reference in New Issue
Block a user