summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston2021-04-15 12:02:43 +0100
committerDenys Vlasenko2021-04-15 13:09:12 +0200
commit38ae0f3e3e9490c5b8cc3b917c2d896404afddbe (patch)
treedce724c5a0c89ecf31028e0acf7511e7ad326723
parent033fa3d5c65958a89fee155208ce8ac7f9049fcd (diff)
downloadbusybox-38ae0f3e3e9490c5b8cc3b917c2d896404afddbe.zip
busybox-38ae0f3e3e9490c5b8cc3b917c2d896404afddbe.tar.gz
vi: reset command count when specifying '0' range
Since commit a54450248 (vi: allow the '.' command to have a repetition count) using '0' to specify a range doesn't work with a non-zero repeat count, e.g. '1d0'. Users wouldn't normally try to do that but the '.' command does. Add a special case in get_motion_char() to handle this. function old new delta find_range 737 746 +9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 9/0) Total: 9 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/vi.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/editors/vi.c b/editors/vi.c
index d37357e..d20481f 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -1128,11 +1128,16 @@ static int get_motion_char(void)
int c, cnt;
c = get_one_char();
- if (c != '0' && isdigit(c)) {
- // get any non-zero motion count
- for (cnt = 0; isdigit(c); c = get_one_char())
- cnt = cnt * 10 + (c - '0');
- cmdcnt = (cmdcnt ?: 1) * cnt;
+ if (isdigit(c)) {
+ if (c != '0') {
+ // get any non-zero motion count
+ for (cnt = 0; isdigit(c); c = get_one_char())
+ cnt = cnt * 10 + (c - '0');
+ cmdcnt = (cmdcnt ?: 1) * cnt;
+ } else {
+ // ensure standalone '0' works
+ cmdcnt = 0;
+ }
}
return c;