X-Git-Url: https://rtime.felk.cvut.cz/gitweb/ulut.git/blobdiff_plain/180128ff12ff9ba268457cbe74f968fc81ae5a4e..04baa663ae8c86650ff62cebbb8ab644c79a3a7b:/ulut/ul_gsacust.c diff --git a/ulut/ul_gsacust.c b/ulut/ul_gsacust.c index 3136808..c16cadd 100644 --- a/ulut/ul_gsacust.c +++ b/ulut/ul_gsacust.c @@ -46,11 +46,18 @@ gsa_cust_insert_at(gsa_array_field_t *array, void *item, unsigned where) if(where>cnt) where=cnt; if((cnt+1>=acnt)||!array->items) { - acnt+=GSA_ALLOC_STEP; - if(!array->items) + if(!array->items || !acnt){ + acnt=cnt+GSA_ALLOC_STEP; items=malloc(acnt*sizeof(void*)); - else + if(array->items && items) + memcpy(items,array->items,cnt*sizeof(void*)); + }else{ + if(acnt/4>GSA_ALLOC_STEP) + acnt+=acnt/4; + else + acnt+=GSA_ALLOC_STEP; items=realloc(array->items,acnt*sizeof(void*)); + } if(!items) return -1; array->alloc_count=acnt; array->items=items; @@ -71,6 +78,14 @@ gsa_cust_delete_at(gsa_array_field_t *array, unsigned indx) void **items=array->items; void **p; if(indx>=cnt) return -1; + if(cnt && !acnt){ + p=malloc(cnt*sizeof(void*)); + if(p){ + memcpy(p,items,cnt*sizeof(void*)); + array->alloc_count=acnt=cnt; + array->items=items=p; + } + } p=items+indx; array->count=--cnt; memmove(p,p+1,(items+cnt-p)*sizeof(void *));