diff --git a/core/src/list.c b/core/src/list.c index 3035375..1f92ba1 100644 --- a/core/src/list.c +++ b/core/src/list.c @@ -89,7 +89,7 @@ size_t list_add(List* self, void* item) { .as_void = self->data }; - uint8_t* into = data.as_byte + self->element_size * self->len; + uint8_t* into = data.as_byte + (self->element_size * self->len); memcpy(into, item, self->element_size); ++self->len; @@ -100,7 +100,7 @@ size_t list_add(List* self, void* item) { void list_insert(List* self, void* item, size_t at) { list_reserve(self, self->len + 1); - if(at == self->len - 1) { + if(at >= self->len) { list_add(self, item); return; } @@ -111,9 +111,9 @@ void list_insert(List* self, void* item, size_t at) { } data = { .as_void = self->data }; - uint8_t* from = data.as_byte + self->element_size * at; - uint8_t* into = data.as_byte + self->element_size * (at + 1); - uint8_t* end = data.as_byte + self->element_size * self->len; + uint8_t* from = data.as_byte + (self->element_size * at); + uint8_t* into = data.as_byte + (self->element_size * (at + 1)); + uint8_t* end = data.as_byte + (self->element_size * self->len); memmove(into, from, end - from); memcpy(from, item, self->element_size); ++self->len;