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 | 77113cf667e1f4fbccc337b508d0f81b1f4b7563 (patch) | |
tree | 46b7a688a48f1b62c4135dd21f1a1bac4e8fc5d5 | |
parent | Use stderr instead of /dev/tty, realloc buffer if lines too long (diff) | |
download | src-77113cf667e1f4fbccc337b508d0f81b1f4b7563.tar.gz src-77113cf667e1f4fbccc337b508d0f81b1f4b7563.zip |
Don't duplicate path string
-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); } |