summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/apk_defines.h1
-rw-r--r--src/common.c6
2 files changed, 5 insertions, 2 deletions
diff --git a/src/apk_defines.h b/src/apk_defines.h
index bfba275..3c72c73 100644
--- a/src/apk_defines.h
+++ b/src/apk_defines.h
@@ -108,6 +108,7 @@ void *apk_array_resize(void *array, size_t new_size, size_t elem_size);
static inline void \
array_type_name##_copy(struct array_type_name **a, struct array_type_name *b)\
{ \
+ if (*a == b) return; \
*a = apk_array_resize(*a, b->num, sizeof(elem_type_name));\
memcpy((*a)->item, b->item, b->num * sizeof(elem_type_name));\
} \
diff --git a/src/common.c b/src/common.c
index 5e6e793..36c4d07 100644
--- a/src/common.c
+++ b/src/common.c
@@ -10,13 +10,15 @@
#include <malloc.h>
#include <string.h>
+#include <unistd.h>
#include "apk_defines.h"
static int *dummy_array = 0;
void *apk_array_resize(void *array, size_t new_size, size_t elem_size)
{
- int old_size, diff;
+ size_t old_size;
+ ssize_t diff;
void *tmp;
if (new_size == 0) {
@@ -25,7 +27,7 @@ void *apk_array_resize(void *array, size_t new_size, size_t elem_size)
return &dummy_array;
}
- old_size = array ? *((int*) array) : 0;
+ old_size = array ? *((size_t *) array) : 0;
diff = new_size - old_size;
if (array == &dummy_array)