1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <errno.h>
#include <stdbit.h>
#include <stdint.h>
#include <string.h>
#include "dynarr.h"
void *
(daextend)(void *da, void *xs, size_t n, size_t sz, size_t align)
{
dynarr(uint8_t) cpy;
memcpy(&cpy, da, sizeof(cpy));
if ((cpy.len += n) > cpy.cap) {
size_t ncap = stdc_bit_ceil(cpy.len);
cpy.buf = cpy.alloc(cpy.ctx, cpy.buf, cpy.cap, ncap, sz, align);
cpy.cap = ncap;
}
memcpy(cpy.buf + cpy.len * sz - n * sz, xs, n * sz);
return memcpy(da, &cpy, sizeof(cpy));
}
|