mirror of
https://github.com/cathugger/mkp224o.git
synced 2025-12-05 21:27:13 -06:00
proper intfilter expansion, vec improvements
This commit is contained in:
48
vec.c
Normal file
48
vec.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include "vec.h"
|
||||
|
||||
void vec_add1(struct vec_basestruct *ctl,size_t sz)
|
||||
{
|
||||
if (!ctl->alen) {
|
||||
ctl->alen = 8;
|
||||
if (SIZE_MAX / 8 < sz)
|
||||
ctl->alen = 1;
|
||||
ctl->buf = malloc(ctl->alen * sz);
|
||||
if (!ctl->buf)
|
||||
abort();
|
||||
} else if (ctl->len >= ctl->alen) {
|
||||
ctl->alen *= 2;
|
||||
if (SIZE_MAX / ctl->alen < sz)
|
||||
abort();
|
||||
ctl->buf = realloc(ctl->buf,ctl->alen * sz);
|
||||
if (!ctl->buf)
|
||||
abort();
|
||||
}
|
||||
++ctl->len;
|
||||
}
|
||||
|
||||
void vec_addn(struct vec_basestruct *ctl,size_t sz,size_t n)
|
||||
{
|
||||
if (!ctl->alen)
|
||||
ctl->alen = 8;
|
||||
size_t nlen = ctl->alen;
|
||||
ctl->len += n;
|
||||
while (ctl->len > nlen)
|
||||
nlen *= 2;
|
||||
if (nlen > ctl->alen) {
|
||||
ctl->alen = nlen;
|
||||
if (SIZE_MAX / nlen < sz)
|
||||
abort();
|
||||
ctl->buf = realloc(ctl->buf,nlen * sz);
|
||||
if (!ctl->buf)
|
||||
abort();
|
||||
} else if (!ctl->buf) {
|
||||
if (SIZE_MAX / ctl->alen < sz)
|
||||
abort();
|
||||
ctl->buf = malloc(ctl->alen * sz);
|
||||
if (!ctl->buf)
|
||||
abort();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user