commit e9d2d14
default
·
2023-10-09 19:15:41 +0000 UTC
parent 986b87c
Backport from xs.
1 files changed,
+7,
-5
M
xs.h
M
xs.h
+7,
-5
1@@ -365,19 +365,21 @@ xs_val *xs_expand(xs_val *data, int offset, int size)
2 /* opens a hole in data */
3 {
4 int sz = xs_size(data);
5+ int n;
6+
7+ sz += size;
8
9 /* open room */
10- if (sz == 0 || _xs_blk_size(sz) != _xs_blk_size(sz + size))
11- data = xs_realloc(data, _xs_blk_size(sz + size));
12+ data = xs_realloc(data, _xs_blk_size(sz));
13
14 /* move up the rest of the data */
15- if (data != NULL)
16- memmove(data + offset + size, data + offset, sz - offset);
17+ for (n = sz - 1; n >= offset + size; n--)
18+ data[n] = data[n - size];
19
20 if (xs_type(data) == XSTYPE_LIST ||
21 xs_type(data) == XSTYPE_DICT ||
22 xs_type(data) == XSTYPE_DATA)
23- _xs_put_24b(data + 1, sz + size);
24+ _xs_put_24b(data + 1, sz);
25
26 return data;
27 }