diff options
author | June McEnroe <june@causal.agency> | 2022-06-02 21:30:03 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2022-06-02 21:30:03 -0400 |
commit | 095aef4eef5efd2c2ad7b73ce0ae093a9a227a17 (patch) | |
tree | 34ec4011f32fc7cb67203462f82f81a42c589158 | |
parent | Use stderr instead of /dev/tty, realloc buffer if lines too long (diff) | |
download | src-095aef4eef5efd2c2ad7b73ce0ae093a9a227a17.tar.gz src-095aef4eef5efd2c2ad7b73ce0ae093a9a227a17.zip |
Don't duplicate path string
Diffstat (limited to '')
-rw-r--r-- | bin/qf.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/bin/qf.c b/bin/qf.c index 3b4f5851..98c897ce 100644 --- a/bin/qf.c +++ b/bin/qf.c @@ -55,15 +55,16 @@ static void push(struct Line line) { static void parse(struct Line line) { char *text = line.text; - size_t sep = strcspn(line.text, ":"); - if (!line.text[sep]) { + size_t sep = strcspn(text, ":"); + if (!text[sep]) { line.type = Text; + if (lines.len) line.path = lines.ptr[lines.len-1].path; push(line); return; } - line.path = strndup(line.text, sep); - if (!line.path) err(EX_OSERR, "strndup"); - line.text += sep + 1; + line.path = text; + text[sep] = '\0'; + line.text = &text[sep+1]; if ( !lines.len || !lines.ptr[lines.len-1].path || @@ -77,15 +78,13 @@ static void parse(struct Line line) { } char *rest; line.nr = strtoul(line.text, &rest, 10); + line.type = Match; if (rest != line.text && rest[0] == ':') { line.type = Match; line.text = &rest[1]; } else if (rest != line.text && rest[0] == '-') { line.type = Context; line.text = &rest[1]; - } else { - line.type = Text; - line.text = text; } push(line); } |