From c10d6f02e40d079f7bb266de566f2d33f09a68b5 Mon Sep 17 00:00:00 2001 From: Paul LeoNerd Evans Date: Sat, 6 Dec 2008 00:03:48 +0000 Subject: [PATCH] Make sure only to slide buffer down when returning a real key to the user, or else it might upset the meta-key logic when it returns --- termkey.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/termkey.c b/termkey.c index eb2e759..22d72e5 100644 --- a/termkey.c +++ b/termkey.c @@ -318,13 +318,6 @@ static void eat_bytes(termkey_t *tk, size_t count) tk->buffstart += count; tk->buffcount -= count; - - size_t halfsize = tk->buffsize / 2; - - if(tk->buffstart > halfsize) { - memcpy(tk->buffer, tk->buffer + halfsize, halfsize); - tk->buffstart -= halfsize; - } } static inline unsigned int utf8_seqlen(long codepoint) @@ -444,6 +437,16 @@ static termkey_result getkey(termkey_t *tk, termkey_key *key, int force) #ifdef DEBUG print_key(tk, key); fprintf(stderr, "\n"); #endif + // Slide the data down to stop it running away + { + size_t halfsize = tk->buffsize / 2; + + if(tk->buffstart > halfsize) { + memcpy(tk->buffer, tk->buffer + halfsize, halfsize); + tk->buffstart -= halfsize; + } + } + /* fallthrough */ case TERMKEY_RES_EOF: return ret;