Hello,

In vi, cs_next() always returns zero so don't check its return value.
cs.cs_flags is always checked afterwards; cs.cs_flags seems to be
the effective return value.

I didn't change two invocations in v_word.c where cs_next() is 2nd
operand in && expression and might be skipped.

- Michael


Index: vi/getc.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/vi/getc.c,v
retrieving revision 1.10
diff -u -p -u -r1.10 getc.c
--- vi/getc.c   6 Jan 2016 22:28:52 -0000       1.10
+++ vi/getc.c   27 Apr 2017 03:20:35 -0000
@@ -123,8 +123,7 @@ cs_fspace(SCR *sp, VCS *csp)
        if (csp->cs_flags != 0 || !isblank(csp->cs_ch))
                return (0);
        for (;;) {
-               if (cs_next(sp, csp))
-                       return (1);
+               cs_next(sp, csp);
                if (csp->cs_flags != 0 || !isblank(csp->cs_ch))
                        break;
        }
@@ -141,8 +140,7 @@ int
 cs_fblank(SCR *sp, VCS *csp)
 {
        for (;;) {
-               if (cs_next(sp, csp))
-                       return (1);
+               cs_next(sp, csp);
                if (csp->cs_flags == CS_EOL || csp->cs_flags == CS_EMP ||
                    (csp->cs_flags == 0 && isblank(csp->cs_ch)))
                        continue;
Index: vi/v_sentence.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/vi/v_sentence.c,v
retrieving revision 1.7
diff -u -p -u -r1.7 v_sentence.c
--- vi/v_sentence.c     12 Nov 2014 04:28:41 -0000      1.7
+++ vi/v_sentence.c     27 Apr 2017 03:20:35 -0000
@@ -82,14 +82,12 @@ v_sentencef(SCR *sp, VICMD *vp)
        }
 
        for (state = NONE;;) {
-               if (cs_next(sp, &cs))
-                       return (1);
+               cs_next(sp, &cs);
                if (cs.cs_flags == CS_EOF)
                        break;
                if (cs.cs_flags == CS_EOL) {
                        if ((state == PERIOD || state == BLANK) && --cnt == 0) {
-                               if (cs_next(sp, &cs))
-                                       return (1);
+                               cs_next(sp, &cs);
                                if (cs.cs_flags == 0 &&
                                    isblank(cs.cs_ch) && cs_fblank(sp, &cs))
                                        return (1);
@@ -273,8 +271,7 @@ ret:                        slno = cs.cs_lno;
                         * and special characters.
                         */
                        do {
-                               if (cs_next(sp, &cs))
-                                       return (1);
+                               cs_next(sp, &cs);
                        } while (!cs.cs_flags &&
                            (cs.cs_ch == ')' || cs.cs_ch == ']' ||
                            cs.cs_ch == '"' || cs.cs_ch == '\''));
Index: vi/v_word.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/vi/v_word.c,v
retrieving revision 1.7
diff -u -p -u -r1.7 v_word.c
--- vi/v_word.c 12 Nov 2014 04:28:41 -0000      1.7
+++ vi/v_word.c 27 Apr 2017 03:20:35 -0000
@@ -140,8 +140,7 @@ fword(SCR *sp, VICMD *vp, enum which typ
        if (type == BIGWORD)
                while (cnt--) {
                        for (;;) {
-                               if (cs_next(sp, &cs))
-                                       return (1);
+                               cs_next(sp, &cs);
                                if (cs.cs_flags == CS_EOF)
                                        goto ret;
                                if (cs.cs_flags != 0 || isblank(cs.cs_ch))
@@ -172,8 +171,7 @@ fword(SCR *sp, VICMD *vp, enum which typ
                        state = cs.cs_flags == 0 &&
                            inword(cs.cs_ch) ? INWORD : NOTWORD;
                        for (;;) {
-                               if (cs_next(sp, &cs))
-                                       return (1);
+                               cs_next(sp, &cs);
                                if (cs.cs_flags == CS_EOF)
                                        goto ret;
                                if (cs.cs_flags != 0 || isblank(cs.cs_ch))
@@ -276,8 +274,7 @@ eword(SCR *sp, VICMD *vp, enum which typ
         * past the current one, it sets word "state" for the 'e' command.
         */
        if (cs.cs_flags == 0 && !isblank(cs.cs_ch)) {
-               if (cs_next(sp, &cs))
-                       return (1);
+               cs_next(sp, &cs);
                if (cs.cs_flags == 0 && !isblank(cs.cs_ch))
                        goto start;
        }
@@ -293,8 +290,7 @@ eword(SCR *sp, VICMD *vp, enum which typ
 start: if (type == BIGWORD)
                while (cnt--) {
                        for (;;) {
-                               if (cs_next(sp, &cs))
-                                       return (1);
+                               cs_next(sp, &cs);
                                if (cs.cs_flags == CS_EOF)
                                        goto ret;
                                if (cs.cs_flags != 0 || isblank(cs.cs_ch))
@@ -322,8 +318,7 @@ start:      if (type == BIGWORD)
                        state = cs.cs_flags == 0 &&
                            inword(cs.cs_ch) ? INWORD : NOTWORD;
                        for (;;) {
-                               if (cs_next(sp, &cs))
-                                       return (1);
+                               cs_next(sp, &cs);
                                if (cs.cs_flags == CS_EOF)
                                        goto ret;
                                if (cs.cs_flags != 0 || isblank(cs.cs_ch))

Reply via email to