The problem was that readline() was returning a newline at the end of each
string, which wasn't getting stripped in the parser and thus \ wasn't at the
end of a line for -f, it was escaping a literal newline, so the continuation
logic didn't trigger. Remove some redundant null checks while we're at it,
and don't bother terminating a string we don't return (yes we leak memory
in an error path, but it's about to error_exit() anyway).
to = delim = xmalloc(strlen(*pstr)+1);
while (mode || *from != d) {
- if (!*from) {
- *to = 0;
-
- return 0;
- }
+ if (!*from) return 0;
// delimiter in regex character range doesn't count
if (*from == '[') {
*(to++) = c;
from+=2;
continue;
- } else if (from[1]) *(to++) = *(from++);
+ } else *(to++) = *(from++);
}
}
*(to++) = *(from++);
int i;
line = errstart = pline ? *pline : "";
+ if (len && line[len-1]=='\n') line[--len] = 0;
// Append additional line to pattern argument string?
// We temporarily repurpose "hit" to indicate line continuations
// processing later, after we replace \\ with \ we can't tell \\1 from \1
fiona = line;
while (*fiona != corwin->hit) {
- if (!*fiona) break;
+ if (!*fiona) goto brand;
if (*fiona++ == '\\') {
if (!*fiona || *fiona == '\n') {
fiona[-1] = '\n';