hw8: Initial commit
This commit is contained in:
31
08_TestingCoverage/buf.c
Normal file
31
08_TestingCoverage/buf.c
Normal file
@@ -0,0 +1,31 @@
|
||||
#include "buf.h"
|
||||
|
||||
void *
|
||||
buf_grow1(void *v, size_t esize, ptrdiff_t n)
|
||||
{
|
||||
struct buf *p;
|
||||
size_t max = (size_t)-1 - sizeof(struct buf);
|
||||
if (v) {
|
||||
p = buf_ptr(v);
|
||||
if (n > 0 && p->capacity + n > max / esize)
|
||||
goto fail; /* overflow */
|
||||
p = realloc(p, sizeof(struct buf) + esize * (p->capacity + n));
|
||||
if (!p)
|
||||
goto fail;
|
||||
p->capacity += n;
|
||||
if (p->size > p->capacity)
|
||||
p->size = p->capacity;
|
||||
} else {
|
||||
if ((size_t)n > max / esize)
|
||||
goto fail; /* overflow */
|
||||
p = malloc(sizeof(struct buf) + esize * n);
|
||||
if (!p)
|
||||
goto fail;
|
||||
p->capacity = n;
|
||||
p->size = 0;
|
||||
}
|
||||
return p->buffer;
|
||||
fail:
|
||||
BUF_ABORT;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user