]> granicus.if.org Git - vim/commitdiff
patch 8.2.2894: MS-Windows: using enc_locale() for strftime() might not work v8.2.2894
authorK.Takata <kentkt@csc.jp>
Fri, 28 May 2021 13:49:34 +0000 (15:49 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 28 May 2021 13:49:34 +0000 (15:49 +0200)
Problem:    MS-Windows: using enc_locale() for strftime() might not work.
Solution:   Use wcsftime(). (Ken Takata, closes #8271)

src/time.c
src/version.c

index c5ab69305061baeb352e8ac42b344e7e1e6c1ce4..a28708f9f8116d810b0c92312ac5763f255f21e7 100644 (file)
@@ -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
index 2dedcbfa5feecc5c86397fbe86ff39e63b8d6aca..4cf2c3e303815081ea003fcdc6657295653fdee4 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2894,
 /**/
     2893,
 /**/