diff options
| -rw-r--r-- | array.c | 17 | ||||
| -rw-r--r-- | array.h | 1 | ||||
| -rw-r--r-- | input_field.c | 2 | ||||
| -rw-r--r-- | main.c | 10 |
4 files changed, 29 insertions, 1 deletions
@@ -43,6 +43,23 @@ void* array_add_(void* array, size_t item_size) { return &(info[1]); } +void array_resize(void* array, size_t size) { + array_info* info = &((array_info*)array)[-1]; + info->size = size; + if (size > info->capacity) { + info->capacity = size; + + // round up to next power of 2 + info->capacity--; + info->capacity |= info->capacity >> 1; + info->capacity |= info->capacity >> 2; + info->capacity |= info->capacity >> 4; + info->capacity |= info->capacity >> 8; + info->capacity |= info->capacity >> 16; + info->capacity++; + } +} + void array_print(void* array) { array_info* info = &((array_info*)array)[-1]; printf( "size: %lu\n" @@ -10,6 +10,7 @@ typedef struct { } array_info; array_info* array_new_(size_t item_size, size_t size); +void array_resize(void* array, size_t size); void array_print(void* array); void array_pop(void* array); void* array_add_(void* array, size_t item_size); diff --git a/input_field.c b/input_field.c index aa522dc..6ca9a1b 100644 --- a/input_field.c +++ b/input_field.c @@ -112,7 +112,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { update_text_buffer(state); free(buffer); - return false; + return true; } // submit line @@ -1,3 +1,5 @@ +#include <locale.h> +#include <langinfo.h> #include <stdio.h> #include <poll.h> #include <unistd.h> @@ -37,6 +39,14 @@ int main(int argc, char* argv[]) { state.input_buffer = array_new(char, 0); state.filtered_items = array_new(item_display_t, 0); + // check locale + setlocale(LC_ALL, ""); + const char *encoding = nl_langinfo(CODESET); + if (strcmp(encoding, "UTF-8") != 0) { + fprintf(stderr, "Cannot continue because encoding (%s), is not UTF-8.", encoding); + return EXIT_FAILURE; + } + // read input parse_args(&state, argc, argv); read_stdin(&state); |
