X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Farray.c;h=d26d5e39b15874e1eb147da24fd01954e5cdd1c4;hb=f74781647a842bb801278d54cf82cd1104563d18;hp=041cc8271880c13d8387427bd21f08c48a4eefd8;hpb=9dfd42a7e6c4d0cbc9ce2189e143c791f868de85;p=ngircd-alex.git diff --git a/src/ngircd/array.c b/src/ngircd/array.c index 041cc827..d26d5e39 100644 --- a/src/ngircd/array.c +++ b/src/ngircd/array.c @@ -12,7 +12,7 @@ #include "array.h" -static char UNUSED id[] = "$Id: array.c,v 1.10 2006/05/09 17:02:40 fw Exp $"; +static char UNUSED id[] = "$Id: array.c,v 1.14 2006/12/28 12:53:41 alex Exp $"; #include @@ -28,17 +28,15 @@ static char UNUSED id[] = "$Id: array.c,v 1.10 2006/05/09 17:02:40 fw Exp $"; #define array_UNUSABLE(x) ( !(x)->mem || (0 == (x)->allocated) ) -#define ALIGN_32U(x) (((x) | 0x1fU) +1) -#define ALIGN_1024U(x) (((x) | 0x3ffU) +1) -#define ALIGN_4096U(x) (((x) | 0xfffU) +1) +#define ALIGN_32U(x) (((x)+31U ) & ~(31U)) +#define ALIGN_1024U(x) (((x)+1023U) & ~(1023U)) +#define ALIGN_4096U(x) (((x)+4095U) & ~(4095U)) static bool safemult_sizet(size_t a, size_t b, size_t *res) { - size_t tmp; - - tmp = a * b; + size_t tmp = a * b; if (b && (tmp / b != a)) return false; @@ -56,7 +54,7 @@ array_init(array *a) a->allocated = 0; a->used = 0; } - + /* if realloc() fails, array_alloc return NULL. otherwise return pointer to elem pos in array */ void * @@ -68,10 +66,7 @@ array_alloc(array * a, size_t size, size_t pos) assert(size > 0); - if (pos_plus1 < pos) - return NULL; - - if (!safemult_sizet(size, pos_plus1, &alloc)) + if (pos_plus1 == 0 || !safemult_sizet(size, pos_plus1, &alloc)) return NULL; if (a->allocated < alloc) { @@ -252,20 +247,22 @@ void * array_get(array * a, size_t membersize, size_t pos) { size_t totalsize; + size_t posplus1 = pos + 1; assert(membersize > 0); assert(a != NULL); - if (array_UNUSABLE(a)) + if (!posplus1 || array_UNUSABLE(a)) return NULL; - if (!safemult_sizet(pos, membersize, &totalsize)) + if (!safemult_sizet(posplus1, membersize, &totalsize)) return NULL; if (a->allocated < totalsize) return NULL; - return a->mem + pos * membersize; + totalsize = pos * membersize; + return a->mem + totalsize; } @@ -273,7 +270,7 @@ void array_free(array * a) { assert(a != NULL); -#ifdef DEBUG +#ifdef DEBUG_ARRAY Log(LOG_DEBUG, "array_free(): %u bytes free'd (%u bytes still used at time of free()).", a->allocated, a->used); @@ -285,16 +282,6 @@ array_free(array * a) } -void -array_free_wipe(array * a) -{ - if (!array_UNUSABLE(a)) - memset(a->mem, 0, a->allocated); - - array_free(a); -} - - void * array_start(const array * const a) { @@ -333,9 +320,6 @@ array_moveleft(array * a, size_t membersize, size_t pos) assert(a != NULL); assert(membersize > 0); - if (!pos) - return; - if (!safemult_sizet(membersize, pos, &bytepos)) { a->used = 0; return;