From dd6f4cab47da3d35bc6d6c9a8eca8c77384f3bdc Mon Sep 17 00:00:00 2001 From: Riley Beckett Date: Sat, 25 Oct 2025 00:18:30 -0400 Subject: fix segfault --- array.c | 7 ++++++- array.h | 8 ++++---- input_field.c | 6 ++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/array.c b/array.c index bb8d522..33f1667 100644 --- a/array.c +++ b/array.c @@ -62,7 +62,12 @@ void* array_resize_(void* array, size_t item_size, size_t size) { info->capacity++; info = realloc(info, sizeof(array_info) + (info->capacity * item_size)); } - info->size = size; + if (size == -1) { + info->size++; + } + else { + info->size = size; + } return info->array; } diff --git a/array.h b/array.h index 5f2bff3..c035fa6 100644 --- a/array.h +++ b/array.h @@ -46,9 +46,9 @@ void* array_resize_(void* array, size_t item_size, size_t size); #define array_insert_many(array, index, values, len) do { \ void* __temp = array_resize_((array), sizeof(*(array)), array_size(array) + len); \ (array) = __temp; \ - for (int __i = array_size((array)) - 1; __i > (index) + len; __i--) \ + for (int __i = array_size((array)) - 1; __i > (index) + len - 1; __i--) \ (array)[__i] = (array)[__i - len]; \ - memcpy(&array[(index)], (values), len * sizeof(*(array))) \ + memcpy(&array[(index)], (values), len * sizeof(*(array))); \ } while (0) #define array_insert_str(array, index, values) array_insert_many((array), (index), (values), strlen(values)) @@ -56,7 +56,7 @@ void* array_resize_(void* array, size_t item_size, size_t size); #define array_add_many(array, index, values, len) do { \ void* __temp = array_resize_((array), sizeof(*(array)), array_size(array) + len); \ (array) = __temp; \ - memcpy(&array[array_size((array)) - 1], (values), len * sizeof(*(array))) \ + memcpy(&array[array_size((array)) - 1], (values), len * sizeof(*(array))); \ } while (0) #define array_add_str(array, index, values) array_add_many((array), (index), (values), strlen(values)) @@ -67,7 +67,7 @@ void* array_resize_(void* array, size_t item_size, size_t size); } while (0) #define array_add(array, value) do { \ - void* __temp = array_resize_((array), sizeof(*(array)), array_size(array) + 1); \ + void* __temp = array_resize_((array), sizeof(*(array)), -1); \ (array) = __temp; \ (array)[array_size((array)) - 1] = value; \ } while (0) diff --git a/input_field.c b/input_field.c index 7df1799..f6820d4 100644 --- a/input_field.c +++ b/input_field.c @@ -124,10 +124,8 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { // paste if (keysym == XKB_KEY_v && ctrl) { - for (size_t i = 0; i < state->clipboard_size; ++i) { - array_insert(state->input_buffer, state->cursor_index, state->clipboard[i]); - ++state->cursor_index; - } + array_insert_many(state->input_buffer, state->cursor_index, state->clipboard, state->clipboard_size); + state->cursor_index += state->clipboard_size; update_text_buffer(state); -- cgit v1.2.3