Re: Remove BACKWARDS flag from get_shell_command in ed(1)
ping On 06/02/18 16:08, Martijn van Duren wrote: > anyone? > > On 05/24/18 09:40, Martijn van Duren wrote: >> Since we accept "!" as a full command to system(3), I decided to do even >> more trimming than when BACKWARDS is not defined. This way we trim even >> more LoC and have one less error case. >> >> Note that running "!!" without a prior command adds an extra empty line >> if suppress diagnostics is not active, because substitution prints the >> replaced line, which would be empty. But this would be identical to >> first running "!" followed by a "!!" with BACKWARDS disabled. >> >> If people do care about this error message I suggest that we also add >> another case for when the command is completely empty, because right >> now this would work as well: >> $ ed -p'>' >>> ! >> ! >>> a >> foo >> . >>> w ! >> 4 >> >> OK? >> >> martijn@ >> >> Index: main.c >> === >> RCS file: /cvs/src/bin/ed/main.c,v >> retrieving revision 1.62 >> diff -u -p -r1.62 main.c >> --- main.c 24 May 2018 06:24:29 - 1.62 >> +++ main.c 24 May 2018 07:35:08 - >> @@ -1012,20 +1012,13 @@ get_shell_command(void) >> REALLOC(buf, n, i + 1, ERR); >> buf[i++] = *ibufp++; >> } >> -#ifdef BACKWARDS >> -else if (shcmd == NULL || *(shcmd + 1) == '\0') >> -#else >> -else if (shcmd == NULL) >> -#endif >> -{ >> -seterrmsg("no previous command"); >> -return ERR; >> -} else { >> +if (shcmd != NULL) { >> REALLOC(buf, n, i + shcmdi, ERR); >> for (s = shcmd + 1; s < shcmd + shcmdi;) >> buf[i++] = *s++; >> -s = ibufp++; >> +s = ibufp; >> } >> +ibufp++; >> break; >> case '%': >> if (*old_filename == '\0') { >> >
Re: Remove BACKWARDS flag from get_shell_command in ed(1)
anyone? On 05/24/18 09:40, Martijn van Duren wrote: > Since we accept "!" as a full command to system(3), I decided to do even > more trimming than when BACKWARDS is not defined. This way we trim even > more LoC and have one less error case. > > Note that running "!!" without a prior command adds an extra empty line > if suppress diagnostics is not active, because substitution prints the > replaced line, which would be empty. But this would be identical to > first running "!" followed by a "!!" with BACKWARDS disabled. > > If people do care about this error message I suggest that we also add > another case for when the command is completely empty, because right > now this would work as well: > $ ed -p'>' >> ! > ! >> a > foo > . >> w ! > 4 > > OK? > > martijn@ > > Index: main.c > === > RCS file: /cvs/src/bin/ed/main.c,v > retrieving revision 1.62 > diff -u -p -r1.62 main.c > --- main.c24 May 2018 06:24:29 - 1.62 > +++ main.c24 May 2018 07:35:08 - > @@ -1012,20 +1012,13 @@ get_shell_command(void) > REALLOC(buf, n, i + 1, ERR); > buf[i++] = *ibufp++; > } > -#ifdef BACKWARDS > - else if (shcmd == NULL || *(shcmd + 1) == '\0') > -#else > - else if (shcmd == NULL) > -#endif > - { > - seterrmsg("no previous command"); > - return ERR; > - } else { > + if (shcmd != NULL) { > REALLOC(buf, n, i + shcmdi, ERR); > for (s = shcmd + 1; s < shcmd + shcmdi;) > buf[i++] = *s++; > - s = ibufp++; > + s = ibufp; > } > + ibufp++; > break; > case '%': > if (*old_filename == '\0') { >
Remove BACKWARDS flag from get_shell_command in ed(1)
Since we accept "!" as a full command to system(3), I decided to do even more trimming than when BACKWARDS is not defined. This way we trim even more LoC and have one less error case. Note that running "!!" without a prior command adds an extra empty line if suppress diagnostics is not active, because substitution prints the replaced line, which would be empty. But this would be identical to first running "!" followed by a "!!" with BACKWARDS disabled. If people do care about this error message I suggest that we also add another case for when the command is completely empty, because right now this would work as well: $ ed -p'>' >! ! >a foo . >w ! 4 OK? martijn@ Index: main.c === RCS file: /cvs/src/bin/ed/main.c,v retrieving revision 1.62 diff -u -p -r1.62 main.c --- main.c 24 May 2018 06:24:29 - 1.62 +++ main.c 24 May 2018 07:35:08 - @@ -1012,20 +1012,13 @@ get_shell_command(void) REALLOC(buf, n, i + 1, ERR); buf[i++] = *ibufp++; } -#ifdef BACKWARDS - else if (shcmd == NULL || *(shcmd + 1) == '\0') -#else - else if (shcmd == NULL) -#endif - { - seterrmsg("no previous command"); - return ERR; - } else { + if (shcmd != NULL) { REALLOC(buf, n, i + shcmdi, ERR); for (s = shcmd + 1; s < shcmd + shcmdi;) buf[i++] = *s++; - s = ibufp++; + s = ibufp; } + ibufp++; break; case '%': if (*old_filename == '\0') {