diff options
author | K.Takata <kentkt@csc.jp> | 2021-05-28 15:49:34 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-05-28 15:49:34 +0200 |
commit | 2c4a1d0a619b0f1e0f7dac98681da6fee58c6a44 (patch) | |
tree | a5bc4d74999cd3193364bca6b9ed6e0401f1d516 | |
parent | bc869874fedf094129831836f131c64f10d98854 (diff) | |
download | vim-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.c | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |