Backport from xs.

This commit is contained in:
default 2023-10-09 21:15:41 +02:00
parent 986b87cdfc
commit e9d2d14873

12
xs.h
View file

@ -365,19 +365,21 @@ xs_val *xs_expand(xs_val *data, int offset, int size)
/* opens a hole in data */ /* opens a hole in data */
{ {
int sz = xs_size(data); int sz = xs_size(data);
int n;
sz += size;
/* open room */ /* open room */
if (sz == 0 || _xs_blk_size(sz) != _xs_blk_size(sz + size)) data = xs_realloc(data, _xs_blk_size(sz));
data = xs_realloc(data, _xs_blk_size(sz + size));
/* move up the rest of the data */ /* move up the rest of the data */
if (data != NULL) for (n = sz - 1; n >= offset + size; n--)
memmove(data + offset + size, data + offset, sz - offset); data[n] = data[n - size];
if (xs_type(data) == XSTYPE_LIST || if (xs_type(data) == XSTYPE_LIST ||
xs_type(data) == XSTYPE_DICT || xs_type(data) == XSTYPE_DICT ||
xs_type(data) == XSTYPE_DATA) xs_type(data) == XSTYPE_DATA)
_xs_put_24b(data + 1, sz + size); _xs_put_24b(data + 1, sz);
return data; return data;
} }