summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorK.Takata <kentkt@csc.jp>2021-05-28 15:49:34 +0200
committerBram Moolenaar <Bram@vim.org>2021-05-28 15:49:34 +0200
commit2c4a1d0a619b0f1e0f7dac98681da6fee58c6a44 (patch)
treea5bc4d74999cd3193364bca6b9ed6e0401f1d516
parentbc869874fedf094129831836f131c64f10d98854 (diff)
downloadvim-git-2c4a1d0a619b0f1e0f7dac98681da6fee58c6a44.tar.gz
patch 8.2.2894: MS-Windows: using enc_locale() for strftime() might not workv8.2.2894
Problem: MS-Windows: using enc_locale() for strftime() might not work. Solution: Use wcsftime(). (Ken Takata, closes #8271)
-rw-r--r--src/time.c16
-rw-r--r--src/version.c2
2 files changed, 17 insertions, 1 deletions
diff --git a/src/time.c b/src/time.c
index c5ab69305..a28708f9f 100644
--- a/src/time.c
+++ b/src/time.c
@@ -252,7 +252,6 @@ f_reltimestr(typval_T *argvars UNUSED, typval_T *rettv)
void
f_strftime(typval_T *argvars, typval_T *rettv)
{
- char_u result_buf[256];
struct tm tmval;
struct tm *curtime;
time_t seconds;
@@ -271,6 +270,20 @@ f_strftime(typval_T *argvars, typval_T *rettv)
rettv->vval.v_string = vim_strsave((char_u *)_("(Invalid)"));
else
{
+# ifdef MSWIN
+ WCHAR result_buf[256];
+ WCHAR *wp;
+
+ wp = enc_to_utf16(p, NULL);
+ if (wp != NULL)
+ (void)wcsftime(result_buf, sizeof(result_buf) / sizeof(WCHAR),
+ wp, curtime);
+ else
+ result_buf[0] = NUL;
+ rettv->vval.v_string = utf16_to_enc(result_buf, NULL);
+ vim_free(wp);
+# else
+ char_u result_buf[256];
vimconv_T conv;
char_u *enc;
@@ -296,6 +309,7 @@ f_strftime(typval_T *argvars, typval_T *rettv)
// Release conversion descriptors
convert_setup(&conv, NULL, NULL);
vim_free(enc);
+# endif
}
}
# endif
diff --git a/src/version.c b/src/version.c
index 2dedcbfa5..4cf2c3e30 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2894,
+/**/
2893,
/**/
2892,