]> granicus.if.org Git - vim/commitdiff
patch 7.4.1742 v7.4.1742
authorBram Moolenaar <Bram@vim.org>
Thu, 14 Apr 2016 20:54:24 +0000 (22:54 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 14 Apr 2016 20:54:24 +0000 (22:54 +0200)
Problem:    strgetchar() does not work correctly.
Solution:   use mb_cptr2len().  Add a test. (Naruhiko Nishino)

src/eval.c
src/testdir/test_expr_utf8.vim
src/version.c

index 5ced88ef06fc6e45f63e3a0c1968024c60e96982..bd4a11a8af0f808d2f00dac10b7f22990196c8c2 100644 (file)
@@ -13048,26 +13048,6 @@ f_getpid(typval_T *argvars UNUSED, typval_T *rettv)
     rettv->vval.v_number = mch_get_pid();
 }
 
-static void getpos_both(typval_T *argvars, typval_T *rettv, int getcurpos);
-
-/*
- * "getcurpos()" function
- */
-    static void
-f_getcurpos(typval_T *argvars, typval_T *rettv)
-{
-    getpos_both(argvars, rettv, TRUE);
-}
-
-/*
- * "getpos(string)" function
- */
-    static void
-f_getpos(typval_T *argvars, typval_T *rettv)
-{
-    getpos_both(argvars, rettv, FALSE);
-}
-
     static void
 getpos_both(
     typval_T   *argvars,
@@ -13110,6 +13090,25 @@ getpos_both(
        rettv->vval.v_number = FALSE;
 }
 
+
+/*
+ * "getcurpos()" function
+ */
+    static void
+f_getcurpos(typval_T *argvars, typval_T *rettv)
+{
+    getpos_both(argvars, rettv, TRUE);
+}
+
+/*
+ * "getpos(string)" function
+ */
+    static void
+f_getpos(typval_T *argvars, typval_T *rettv)
+{
+    getpos_both(argvars, rettv, FALSE);
+}
+
 /*
  * "getqflist()" and "getloclist()" functions
  */
@@ -19574,7 +19573,7 @@ f_strgetchar(typval_T *argvars, typval_T *rettv)
        return;
 #ifdef FEAT_MBYTE
     {
-       int             byteidx = 0;
+       int     byteidx = 0;
 
        while (charidx >= 0 && byteidx < len)
        {
@@ -19584,7 +19583,7 @@ f_strgetchar(typval_T *argvars, typval_T *rettv)
                break;
            }
            --charidx;
-           byteidx += mb_char2len(str[byteidx]);
+           byteidx += mb_cptr2len(str + byteidx);
        }
     }
 #else
index ec36deca914a2db8d1fc03d6f0f1d12cb4e37c47..c512ddf430e184dd3e715181be21426c7f5d7bb0 100644 (file)
@@ -12,6 +12,10 @@ func Test_strgetchar()
   call assert_equal(char2nr('a'), strgetchar('àxb', 0))
   call assert_equal(char2nr('̀'), strgetchar('àxb', 1))
   call assert_equal(char2nr('x'), strgetchar('àxb', 2))
+
+  call assert_equal(char2nr('あ'), strgetchar('あaい', 0))
+  call assert_equal(char2nr('a'), strgetchar('あaい', 1))
+  call assert_equal(char2nr('い'), strgetchar('あaい', 2))
 endfunc
 
 func Test_strcharpart()
index 07f1a0d63b855ac28ccead8efdff468869537794..4c00d316973a0c8be9b86616170737261f01e63b 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1742,
 /**/
     1741,
 /**/