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 }