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.cute-signatures
parent
51999c97da
commit
78a372464b
|
@ -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 \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue