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);
 }