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))