From 51e933261b984db014e858d79387a826d2626fb6 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 17 Apr 2021 20:44:56 +0200 Subject: patch 8.2.2777: Vim9: blob operations not tested in all ways Problem: Vim9: blob operations not tested in all ways. Solution: Run tests with CheckLegacyAndVim9Success(). Make blob assign with index work. --- src/blob.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src/blob.c') diff --git a/src/blob.c b/src/blob.c index 114dacdec..9f5977707 100644 --- a/src/blob.c +++ b/src/blob.c @@ -125,13 +125,33 @@ blob_get(blob_T *b, int idx) } /* - * Store one byte "c" in blob "b" at "idx". + * Store one byte "byte" in blob "blob" at "idx". * Caller must make sure that "idx" is valid. */ void -blob_set(blob_T *b, int idx, char_u c) +blob_set(blob_T *blob, int idx, int byte) { - ((char_u*)b->bv_ga.ga_data)[idx] = c; + ((char_u*)blob->bv_ga.ga_data)[idx] = byte; +} + +/* + * Store one byte "byte" in blob "blob" at "idx". + * Append one byte if needed. + */ + void +blob_set_append(blob_T *blob, int idx, int byte) +{ + garray_T *gap = &blob->bv_ga; + + // Allow for appending a byte. Setting a byte beyond + // the end is an error otherwise. + if (idx < gap->ga_len + || (idx == gap->ga_len && ga_grow(gap, 1) == OK)) + { + blob_set(blob, idx, byte); + if (idx == gap->ga_len) + ++gap->ga_len; + } } /* -- cgit v1.2.1