diff options
-rw-r--r-- | common.c | 11 | ||||
-rw-r--r-- | degesch.c | 4 |
2 files changed, 13 insertions, 2 deletions
@@ -70,6 +70,17 @@ str_vector_find (const struct str_vector *v, const char *s) return -1; } +static int +strncasecmp_ascii (const char *a, const char *b, size_t n) +{ + int x; + while (n-- && (*a || *b)) + if ((x = tolower_ascii (*(const unsigned char *) a++) + - tolower_ascii (*(const unsigned char *) b++))) + return x; + return 0; +} + // --- Logging ----------------------------------------------------------------- static void @@ -6388,11 +6388,11 @@ complete_command (struct app_context *ctx, struct completion *data, prefix = "/"; } + size_t word_len = strlen (word); for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++) { struct command_handler *handler = &g_command_handlers[i]; - // FIXME: we want an ASCII version - if (!strncasecmp (word, handler->name, strlen (word))) + if (!strncasecmp_ascii (word, handler->name, word_len)) str_vector_add_owned (output, xstrdup_printf ("%s%s", prefix, handler->name)); } |