diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-20 16:07:47 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-20 16:13:20 +0200 |
commit | 78a372464b3dabb1a84279fe5fde9542bd2431f3 (patch) | |
tree | 7b80a70a9c59a94de04838e57d717941078cd58f /src | |
parent | 51999c97dabf9fbbe352ca3ead02851a982fcade (diff) | |
download | apk-tools-78a372464b3dabb1a84279fe5fde9542bd2431f3.tar.gz apk-tools-78a372464b3dabb1a84279fe5fde9542bd2431f3.tar.bz2 apk-tools-78a372464b3dabb1a84279fe5fde9542bd2431f3.tar.xz apk-tools-78a372464b3dabb1a84279fe5fde9542bd2431f3.zip |
all: fix array size data type on 64 bit
The array struct aligned size to 64 bit on x86_64 which caused bad things
to happen.
We use size_t to make sure the size element is correct regardless arch.
Solution found by Timo.
Diffstat (limited to 'src')
-rw-r--r-- | src/apk_defines.h | 2 | ||||
-rw-r--r-- | src/common.c | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/apk_defines.h b/src/apk_defines.h index 90ad3a0..bfba275 100644 --- a/src/apk_defines.h +++ b/src/apk_defines.h @@ -87,7 +87,7 @@ void *apk_array_resize(void *array, size_t new_size, size_t elem_size); #define APK_ARRAY(array_type_name, elem_type_name) \ struct array_type_name { \ - int num; \ + size_t num; \ elem_type_name item[]; \ }; \ static inline void \ diff --git a/src/common.c b/src/common.c index 725f1c4..5e6e793 100644 --- a/src/common.c +++ b/src/common.c @@ -31,11 +31,11 @@ void *apk_array_resize(void *array, size_t new_size, size_t elem_size) if (array == &dummy_array) array = NULL; - tmp = realloc(array, sizeof(int) + new_size * elem_size); + tmp = realloc(array, sizeof(size_t) + new_size * elem_size); if (diff > 0) - memset(tmp + sizeof(int) + old_size * elem_size, 0, + memset(tmp + sizeof(size_t) + old_size * elem_size, 0, diff * elem_size); - *((int*) tmp) = new_size; + *((size_t*) tmp) = new_size; return tmp; } |