commit 1c2d4cc9a3b08873d8a8dd63731b68eab87b6b03 from: Neels Hofmeyr date: Sun Oct 11 05:25:04 2020 UTC fix ARRAYLIST_INSERT() commit - 5ff759965efbabc96fecd514e208a9a1b7be72df commit + 1c2d4cc9a3b08873d8a8dd63731b68eab87b6b03 blob - 7aaab19f0a58317289881be832a03ec59f67a0ff blob + 73fc7617ad6907c5ba7138f41853f8e9e447a48e --- include/arraylist.h +++ include/arraylist.h @@ -84,12 +84,17 @@ } while (0) #define ARRAYLIST_INSERT(NEW_ITEM_P, ARRAY_LIST, AT_IDX) do { \ + int _at_idx = (AT_IDX); \ ARRAYLIST_ADD(NEW_ITEM_P, ARRAY_LIST); \ - if ((NEW_ITEM_P) && (AT_IDX) < (ARRAY_LIST).len) \ - memmove(&(ARRAY_LIST).head[(AT_IDX) + 1], \ - &(ARRAY_LIST).head[AT_IDX], \ - ((ARRAY_LIST).len - (AT_IDX)) \ + if ((NEW_ITEM_P) \ + && _at_idx >= 0 \ + && _at_idx < (ARRAY_LIST).len) { \ + memmove(&(ARRAY_LIST).head[_at_idx + 1], \ + &(ARRAY_LIST).head[_at_idx], \ + ((ARRAY_LIST).len - 1 - _at_idx) \ * sizeof(*(ARRAY_LIST).head)); \ + (NEW_ITEM_P) = &(ARRAY_LIST).head[_at_idx]; \ + }; \ } while (0) #define ARRAYLIST_CLEAR(ARRAY_LIST) \