Skip to content

Commit 665057a

Browse files
committed
fix(scanner): adjust container allocations
1 parent b9b32fa commit 665057a

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/scanner.c

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,25 @@
66
#define MAX(a, b) ((a) > (b) ? (a) : (b))
77

88
#define VEC_RESIZE(vec, _cap) \
9-
void *tmp = realloc((vec).data, (_cap) * sizeof((vec).data[0])); \
10-
assert(tmp != NULL); \
11-
(vec).data = tmp; \
12-
(vec).cap = (_cap);
9+
do { \
10+
void *tmp = realloc((vec).data, (_cap) * sizeof((vec).data[0])); \
11+
assert(tmp != NULL); \
12+
(vec).data = tmp; \
13+
(vec).cap = (_cap); \
14+
} while (0)
1315

1416
#define VEC_GROW(vec, _cap) \
1517
if ((vec).cap < (_cap)) { \
1618
VEC_RESIZE((vec), (_cap)); \
1719
}
1820

1921
#define VEC_PUSH(vec, el) \
20-
if ((vec).cap == (vec).len) { \
21-
VEC_RESIZE((vec), MAX(16, (vec).len * 2)); \
22-
} \
23-
(vec).data[(vec).len++] = (el);
22+
do { \
23+
if ((vec).cap == (vec).len) { \
24+
VEC_RESIZE((vec), MAX(16, (vec).len * 2)); \
25+
} \
26+
(vec).data[(vec).len++] = (el); \
27+
} while (0)
2428

2529
#define VEC_POP(vec) (vec).len--;
2630

@@ -39,9 +43,17 @@
3943

4044
#define QUEUE_RESIZE(queue, _cap) \
4145
do { \
42-
void *tmp = realloc((queue).data, (_cap) * sizeof((queue).data[0])); \
46+
void *tmp = calloc((_cap), sizeof((queue).data[0])); \
4347
assert(tmp != NULL); \
48+
uint32_t count = (queue).tail - (queue).head; \
49+
for (uint32_t i = 0; i < count; i++) { \
50+
((uint16_t *)tmp)[i] = (queue).data[((queue).head + i) % (queue).cap]; \
51+
} \
52+
if ((queue).data != NULL) \
53+
free((queue).data); \
4454
(queue).data = tmp; \
55+
(queue).head = 0; \
56+
(queue).tail = count; \
4557
(queue).cap = (_cap); \
4658
} while (0)
4759

0 commit comments

Comments
 (0)