Hi!

I must say, I'm a bit shy about this, so don't rip my head off, I'm
obviously not trying to question Theo's commit. I just came across this
anomaly:

cvs diff -r 1.26 -r 1.27 vi.c 
@@ -792,8 +792,9 @@ vi_cmd(int argcnt, const char *cmd)
                                        return -1;
                                if (*cmd == 'c' &&
                                    (cmd[1]=='w' || cmd[1]=='W') &&
-                                   !isspace(es->cbuf[es->cursor])) {
-                                       while (isspace(es->cbuf[--ncursor]))
+                                   !isspace((unsigned 
char)es->cbuf[es->cursor])) {
+                                       while ((unsigned char)
+                                           isspace(es->cbuf[--ncursor]))
                                                ;
                                        ncursor++;
                                }

That last cast, before isspace(es->...), at line 796; Isn't that cast supposed
to be inside the isspace() function, right before es->..., just like in the 
line above it?
So like:

--- vi.c.orig   2013-12-18 17:33:03.667236200 +0100
+++ vi.c        2013-12-18 17:33:21.810235659 +0100
@@ -793,8 +793,7 @@ vi_cmd(int argcnt, const char *cmd)
                                if (*cmd == 'c' &&
                                    (cmd[1]=='w' || cmd[1]=='W') &&
                                    !isspace((unsigned 
char)es->cbuf[es->cursor])) {
-                                       while ((unsigned char)
-                                           isspace(es->cbuf[--ncursor]))
+                                       while (isspace((unsigned 
char)es->cbuf[--ncursor]))
                                                ;
                                        ncursor++;
                                }


I admit, the bug I was hunting was not present somehow on OpenBSD, just on
Linux, where I am using this ksh with some modifications and some diffs to make
it compile and work on Linux.
Nevertheless this fixed it for me.
Oh, and the bug was when I entered command mode in vi edit mode, then if
I had something like this in my edit buffer:

$ cd /foo/bar

... then escape to command mode, move to the very beginning of the line,
then press 'c' -> 'w' to delete "one word". Then the previous behaviour
was to delete until before the space, and now after these changes it
would delete the space also.



Daniel

-- 
LÉVAI Dániel
PGP key ID = 0x83B63A8F
Key fingerprint = DBEC C66B A47A DFA2 792D  650C C69B BE4C 83B6 3A8F

Reply via email to