Mercurial > code
diff array.c @ 48:cdae3689f1b6
Update of array and cosmetic in ARRAY_ macros
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 07 Oct 2011 16:46:31 +0200 |
parents | f1e184940197 |
children | 8a8db17c02a4 |
line wrap: on
line diff
--- a/array.c Fri Oct 07 16:10:33 2011 +0200 +++ b/array.c Fri Oct 07 16:46:31 2011 +0200 @@ -27,7 +27,7 @@ static int array_grow(struct array *); struct array * -array_new(const void *data, size_t unit, int bsize, int type) +array_new(enum array_type type, size_t unit, int length) { struct array *arr; @@ -35,9 +35,8 @@ return NULL; memset(arr, 0, sizeof (struct array)); - arr->type = type; - arr->bsize = (bsize == 0) ? ARRAY_DEFAULT_BSIZE : bsize; + arr->bsize = (length == 0) ? ARRAY_DEFAULT_BSIZE : length; arr->unit = unit; arr->size = OFFSET(arr->bsize); @@ -46,9 +45,6 @@ return NULL; } - if (data) - memcpy(arr->data, data, arr->unit); - return arr; } @@ -171,6 +167,8 @@ int array_iswap(struct array *arr, int i1, int i2) { + void *tmp; + /* Out of bounds */ if (i1 >= arr->length || i1 < 0 || i2 >= arr->length || i2 < 0) return -1; @@ -180,19 +178,21 @@ * function. */ - if (arr->_tmp == NULL && (arr->_tmp = malloc(arr->unit)) == NULL) + if ((tmp = malloc(arr->unit)) == NULL) return -1; - memcpy((char *) arr->_tmp, (char *) arr->data + OFFSET(i1), arr->unit); + memcpy((char *) tmp, (char *) arr->data + OFFSET(i1), arr->unit); memcpy((char *) arr->data + OFFSET(i1), (char *) arr->data + OFFSET(i2), arr->unit); - memcpy((char *) arr->data + OFFSET(i2), (char *) arr->_tmp, arr->unit); + memcpy((char *) arr->data + OFFSET(i2), (char *) tmp, arr->unit); /* - * Clear bytes for safety. + * Clear bytes for safety you probably don't want a password or + * secure data to be left somewhere in the memory. */ - memset(arr->_tmp, 0, arr->unit); + memset(tmp, 0, arr->unit); + free(tmp); return 0; } @@ -285,8 +285,6 @@ if (arr->data) free(arr->data); - if (arr->_tmp) - free(arr->_tmp); free(arr); }