aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiley Beckett <rbeckettvt@gmail.com>2025-10-25 00:18:30 -0400
committerRiley Beckett <rbeckettvt@gmail.com>2025-10-25 00:18:30 -0400
commitdd6f4cab47da3d35bc6d6c9a8eca8c77384f3bdc (patch)
treeb5f413632a2bc205cae8425e89864a4df5a9d093
parentecf6d868aa0fbf1f30c2a286a526018d412e7e28 (diff)
fix segfault
-rw-r--r--array.c7
-rw-r--r--array.h8
-rw-r--r--input_field.c6
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);