Mercurial > hg > toybox
changeset 1562:b5968bffb65c draft
More sed bugfixes.
author | Rob Landley <rob@landley.net> |
---|---|
date | Tue, 18 Nov 2014 04:25:27 -0600 |
parents | 162c7cc868e5 |
children | 3d32f9523584 |
files | toys/pending/sed.c |
diffstat | 1 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/pending/sed.c Mon Nov 17 21:21:04 2014 -0600 +++ b/toys/pending/sed.c Tue Nov 18 04:25:27 2014 -0600 @@ -573,8 +573,10 @@ j = stridx(from, line[i]); if (j != -1) line[i] = to[j]; } - } else if (c=='=') xprintf("%ld\n", TT.count); - else if (!strchr(":{}", c)) error_exit("todo: %c", c); + } else if (c=='=') { + sprintf(toybuf, "%ld", TT.count); + emit(toybuf, strlen(toybuf), 1); + } else if (!strchr(":{}", c)) error_exit("todo: %c", c); logrus = logrus->next; } @@ -630,11 +632,16 @@ char *tmp; if (i) { + struct step *primal; + if (!fd && *name=='-') { error_msg("no -i on stdin"); return; } TT.fdout = copy_tempfile(fd, name, &tmp); + TT.count = 0; + for (primal = (void *)TT.pattern; primal; primal = primal->next) + primal->hit = 0; } do_lines(fd, name, walk_pattern); if (i) { @@ -653,6 +660,7 @@ // Ok, what happens if we xexec() sed with constant arguments then? // TODO: ^^^ that +// also screws up error reporting for bad patterns // returns length of processed string, *pstr advances to next unused char, // if delim (or *delim) is 0 uses starting char as delimiter, otherwise @@ -690,7 +698,7 @@ // Check escaped end delimiter before printf style escapes. if (from[1] == d) from++; - else { + else if (from[1]!='\\') { char c = unescape(from[1]); if (c) { @@ -818,7 +826,7 @@ if (isspace(*line)) continue; if (0 <= (l = stridx("igp", *line))) corwin->sflags |= 1<<l; - else if (!corwin->sflags >> 3 && 0<(l = strtol(line, &line, 10))) { + else if (!(corwin->sflags>>3) && 0<(l = strtol(line, &line, 10))) { corwin->sflags |= l << 3; line--; } else break;