diff options
Diffstat (limited to 'data/vim/patches/8.1.0802')
-rw-r--r-- | data/vim/patches/8.1.0802 | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0802 b/data/vim/patches/8.1.0802 new file mode 100644 index 000000000..ae0cb0980 --- /dev/null +++ b/data/vim/patches/8.1.0802 @@ -0,0 +1,135 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0802 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0802 +Problem: Negative index doesn't work for Blob. +Solution: Make it work, add a test. (closes #3856) +Files: src/blob.c, src/proto/blob.pro, src/eval.c, + src/testdir/test_blob.vim + + +*** ../vim-8.1.0801/src/blob.c 2019-01-23 21:56:17.623300022 +0100 +--- src/blob.c 2019-01-24 12:29:14.225795888 +0100 +*************** +*** 72,79 **** +--- 72,83 ---- + int len = from->vval.v_blob->bv_ga.ga_len; + + if (len > 0) ++ { + to->vval.v_blob->bv_ga.ga_data = + vim_memsave(from->vval.v_blob->bv_ga.ga_data, len); ++ if (to->vval.v_blob->bv_ga.ga_data == NULL) ++ len = 0; ++ } + to->vval.v_blob->bv_ga.ga_len = len; + } + return ret; +*************** +*** 112,118 **** + * Get byte "idx" in blob "b". + * Caller must check that "idx" is valid. + */ +! char_u + blob_get(blob_T *b, int idx) + { + return ((char_u*)b->bv_ga.ga_data)[idx]; +--- 116,122 ---- + * Get byte "idx" in blob "b". + * Caller must check that "idx" is valid. + */ +! int + blob_get(blob_T *b, int idx) + { + return ((char_u*)b->bv_ga.ga_data)[idx]; +*** ../vim-8.1.0801/src/proto/blob.pro 2019-01-23 21:56:17.623300022 +0100 +--- src/proto/blob.pro 2019-01-24 12:29:39.945646015 +0100 +*************** +*** 6,12 **** + void blob_free(blob_T *b); + void blob_unref(blob_T *b); + long blob_len(blob_T *b); +! char_u blob_get(blob_T *b, int idx); + void blob_set(blob_T *b, int idx, char_u c); + int blob_equal(blob_T *b1, blob_T *b2); + int read_blob(FILE *fd, blob_T *blob); +--- 6,12 ---- + void blob_free(blob_T *b); + void blob_unref(blob_T *b); + long blob_len(blob_T *b); +! int blob_get(blob_T *b, int idx); + void blob_set(blob_T *b, int idx, char_u c); + int blob_equal(blob_T *b1, blob_T *b2); + int read_blob(FILE *fd, blob_T *blob); +*** ../vim-8.1.0801/src/eval.c 2019-01-23 21:56:17.627299992 +0100 +--- src/eval.c 2019-01-24 12:30:23.197391236 +0100 +*************** +*** 4723,4734 **** + } + else + { +! // The resulting variable is a string of a single +! // character. If the index is too big or negative the +! // result is empty. + if (n1 < len && n1 >= 0) + { +! int v = (int)blob_get(rettv->vval.v_blob, n1); + + clear_tv(rettv); + rettv->v_type = VAR_NUMBER; +--- 4723,4735 ---- + } + else + { +! // The resulting variable is a byte value. +! // If the index is too big or negative that is an error. +! if (n1 < 0) +! n1 = len + n1; + if (n1 < len && n1 >= 0) + { +! int v = blob_get(rettv->vval.v_blob, n1); + + clear_tv(rettv); + rettv->v_type = VAR_NUMBER; +*** ../vim-8.1.0801/src/testdir/test_blob.vim 2019-01-23 21:56:17.627299992 +0100 +--- src/testdir/test_blob.vim 2019-01-24 12:24:45.847268594 +0100 +*************** +*** 95,100 **** +--- 95,107 ---- + call assert_equal(999, get(b, 5, 999)) + call assert_equal(-1, get(b, -8)) + call assert_equal(999, get(b, -8, 999)) ++ ++ call assert_equal(0x00, b[0]) ++ call assert_equal(0x22, b[2]) ++ call assert_equal(0x44, b[4]) ++ call assert_equal(0x44, b[-1]) ++ call assert_fails('echo b[5]', 'E979:') ++ call assert_fails('echo b[-8]', 'E979:') + endfunc + + func Test_blob_to_string() +*** ../vim-8.1.0801/src/version.c 2019-01-24 12:18:43.448842486 +0100 +--- src/version.c 2019-01-24 12:25:38.178996684 +0100 +*************** +*** 793,794 **** +--- 793,796 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 802, + /**/ + +-- +"Intelligence has much less practical application than you'd think." + -- Scott Adams, Dilbert. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |