From d957b9537ee2b93af93c92dbb8a2a6cfc3682318 Mon Sep 17 00:00:00 2001 From: Paul Fox Date: Mon, 28 Nov 2005 18:07:53 +0000 Subject: fix bug #474: 0000474: vi crashes often problem was that the buffer used for "." command ("last_modifying_cmd") wasn't being maintined correctly -- the recording code was walking back over the front of that buffer when a repeatable insert command included backspacing (e.g. "i\b\b\bfoo"). the fix is to simply record the backspaces along with the rest of the command. also, cleaned up start_new_cmd_q() slightly. --- editors/vi.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/editors/vi.c b/editors/vi.c index e6c87560d..6689e290b 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -1615,16 +1615,6 @@ static Byte *char_insert(Byte * p, Byte c) // insert the char c at 'p' if ((p[-1] != '\n') && (dot>text)) { p--; p = text_hole_delete(p, p); // shrink buffer 1 char -#ifdef CONFIG_FEATURE_VI_DOT_CMD - // also rmove char from last_modifying_cmd - if (last_modifying_cmd != 0 && strlen((char *) last_modifying_cmd) > 0) { - Byte *q; - - q = last_modifying_cmd; - q[strlen((char *) q) - 1] = '\0'; // erase BS - q[strlen((char *) q) - 1] = '\0'; // erase prev char - } -#endif /* CONFIG_FEATURE_VI_DOT_CMD */ } } else { // insert a char into text[] @@ -2009,11 +1999,10 @@ static void start_new_cmd_q(Byte c) memset(last_modifying_cmd, '\0', BUFSIZ); // clear new cmd queue // if there is a current cmd count put it in the buffer first if (cmdcnt > 0) - sprintf((char *) last_modifying_cmd, "%d", cmdcnt); - // save char c onto queue - last_modifying_cmd[strlen((char *) last_modifying_cmd)] = c; + sprintf((char *) last_modifying_cmd, "%d%c", cmdcnt, c); + else // just save char c onto queue + last_modifying_cmd[0] = c; adding2q = 1; - return; } static void end_cmd_q(void) -- cgit v1.2.3