improve array clone

This commit is contained in:
vemax78 2013-05-04 09:31:25 +02:00
parent 9082a7855c
commit b69929938d
1 changed files with 10 additions and 12 deletions

View File

@ -11,13 +11,13 @@ struct capwap_array* capwap_array_create(unsigned short itemsize, unsigned long
if (!array) { if (!array) {
capwap_outofmemory(); capwap_outofmemory();
} }
memset(array, 0, sizeof(struct capwap_array)); memset(array, 0, sizeof(struct capwap_array));
array->itemsize = itemsize; array->itemsize = itemsize;
if (initcount > 0) { if (initcount > 0) {
capwap_array_resize(array, initcount); capwap_array_resize(array, initcount);
} }
return array; return array;
} }
@ -25,26 +25,25 @@ struct capwap_array* capwap_array_create(unsigned short itemsize, unsigned long
struct capwap_array* capwap_array_clone(struct capwap_array* array) { struct capwap_array* capwap_array_clone(struct capwap_array* array) {
unsigned long i; unsigned long i;
struct capwap_array* clone; struct capwap_array* clone;
ASSERT (array != NULL); ASSERT (array != NULL);
/* Clone array e items */ /* Clone array e items */
clone = capwap_array_create(array->itemsize, array->count); clone = capwap_array_create(array->itemsize, array->count);
for (i = 0; i < array->count; i++) { memcpy(clone->buffer, array->buffer, array->itemsize * array->count);
memcpy(capwap_array_get_item_pointer(clone, i), capwap_array_get_item_pointer(array, i), array->itemsize); clone->zeroed = array->zeroed;
}
return clone; return clone;
} }
/* */ /* */
void capwap_array_free(struct capwap_array* array) { void capwap_array_free(struct capwap_array* array) {
ASSERT(array != NULL); ASSERT(array != NULL);
if (array->buffer) { if (array->buffer) {
capwap_free(array->buffer); capwap_free(array->buffer);
} }
capwap_free(array); capwap_free(array);
} }
@ -56,7 +55,7 @@ void* capwap_array_get_item_pointer(struct capwap_array* array, unsigned long po
if (pos >= array->count) { if (pos >= array->count) {
capwap_array_resize(array, pos + 1); capwap_array_resize(array, pos + 1);
} }
return (void*)(((char*)array->buffer) + array->itemsize * pos); return (void*)(((char*)array->buffer) + array->itemsize * pos);
} }
@ -95,4 +94,3 @@ void capwap_array_resize(struct capwap_array* array, unsigned long count) {
array->buffer = newbuffer; array->buffer = newbuffer;
array->count = count; array->count = count;
} }