5egcpool_alloc_justified(const
egcpool* pool,
int len){
6 const int poolfree = pool->poolsize - pool->poolused;
11 if(poolfree >=
len && poolfree * 10 > pool->poolsize){
19 memcpy(pool->pool + curpos,
egc,
len - 1);
20 pool->pool[curpos +
len - 1] =
'\0';
21 pool->poolwrite = curpos +
len;
22 pool->poolused +=
len;
36 bool searched =
false;
40 char* duplicated =
NULL;
42 if(egcpool_alloc_justified(pool,
len) || searched){
45 if((duplicated = (
char *)malloc(
ulen + 1)) ==
NULL){
49 duplicated[
ulen] =
'\0';
51 if(egcpool_grow(pool,
len) && searched){
61 int curpos = pool->poolwrite;
64 if(curpos == pool->poolsize){
67 if(pool->pool[curpos]){
69 }
else if(curpos && pool->pool[curpos - 1]){
71 }
else if(pool->poolsize - curpos <
len){
72 if(pool->poolwrite > curpos){
78 size_t trial = curpos;
80 if(pool->pool[++trial]){
85 stash(pool,
egc, curpos,
len);
89 if(pool->poolwrite > curpos && pool->poolwrite - (
len - need) < curpos){
94 }
while(curpos != pool->poolwrite);
95 }
while( (searched = !searched) );
__attribute__((nonnull(1)))
#define logerror(fmt,...)
API int API int const nccell unsigned len