mirror of
https://github.com/vim/vim.git
synced 2025-10-13 06:54:15 -04:00
patch 8.1.2326: cannot parse a date/time string
Problem: Cannot parse a date/time string. Solution: Add strptime(). (Stephen Wall, closes #)
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
# include <float.h>
|
||||
#endif
|
||||
|
||||
#ifdef MACOS_X
|
||||
#if defined(MACOS_X)
|
||||
# include <time.h> // for time_t
|
||||
#endif
|
||||
|
||||
@@ -237,6 +237,9 @@ static void f_stridx(typval_T *argvars, typval_T *rettv);
|
||||
static void f_strlen(typval_T *argvars, typval_T *rettv);
|
||||
static void f_strcharpart(typval_T *argvars, typval_T *rettv);
|
||||
static void f_strpart(typval_T *argvars, typval_T *rettv);
|
||||
#ifdef HAVE_STRPTIME
|
||||
static void f_strptime(typval_T *argvars, typval_T *rettv);
|
||||
#endif
|
||||
static void f_strridx(typval_T *argvars, typval_T *rettv);
|
||||
static void f_strtrans(typval_T *argvars, typval_T *rettv);
|
||||
static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv);
|
||||
@@ -738,6 +741,9 @@ static funcentry_T global_functions[] =
|
||||
{"string", 1, 1, FEARG_1, f_string},
|
||||
{"strlen", 1, 1, FEARG_1, f_strlen},
|
||||
{"strpart", 2, 3, FEARG_1, f_strpart},
|
||||
#ifdef HAVE_STRPTIME
|
||||
{"strptime", 2, 2, FEARG_1, f_strptime},
|
||||
#endif
|
||||
{"strridx", 2, 3, FEARG_1, f_strridx},
|
||||
{"strtrans", 1, 1, FEARG_1, f_strtrans},
|
||||
{"strwidth", 1, 1, FEARG_1, f_strwidth},
|
||||
@@ -7412,6 +7418,40 @@ f_strpart(typval_T *argvars, typval_T *rettv)
|
||||
rettv->vval.v_string = vim_strnsave(p + n, len);
|
||||
}
|
||||
|
||||
#ifdef HAVE_STRPTIME
|
||||
/*
|
||||
* "strptime({format}, {timestring})" function
|
||||
*/
|
||||
static void
|
||||
f_strptime(typval_T *argvars, typval_T *rettv)
|
||||
{
|
||||
struct tm tmval;
|
||||
char_u *fmt;
|
||||
char_u *str;
|
||||
vimconv_T conv;
|
||||
char_u *enc;
|
||||
|
||||
vim_memset(&tmval, NUL, sizeof(tmval));
|
||||
fmt = tv_get_string(&argvars[0]);
|
||||
str = tv_get_string(&argvars[1]);
|
||||
|
||||
conv.vc_type = CONV_NONE;
|
||||
enc = enc_locale();
|
||||
convert_setup(&conv, p_enc, enc);
|
||||
if (conv.vc_type != CONV_NONE)
|
||||
fmt = string_convert(&conv, fmt, NULL);
|
||||
if (fmt == NULL
|
||||
|| strptime((char *)str, (char *)fmt, &tmval) == NULL
|
||||
|| (rettv->vval.v_number = mktime(&tmval)) == -1)
|
||||
rettv->vval.v_number = 0;
|
||||
|
||||
if (conv.vc_type != CONV_NONE)
|
||||
vim_free(fmt);
|
||||
convert_setup(&conv, NULL, NULL);
|
||||
vim_free(enc);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "strridx()" function
|
||||
*/
|
||||
|
Reference in New Issue
Block a user