grep.c: refactor free_grep_patterns()

Refactor the free_grep_patterns() function to split out the freeing of the "struct grep_pat" it contains. Right now we're only freeing the "pattern_list", but we should be freeing another member of the same type, which we'll do in the subsequent commit. Let's also replace the "return" if we don't have an "opt->pattern_expression" with a conditional call of free_pattern_expr(). Before db84376f981 (grep.c: remove "extended" in favor of "pattern_expression", fix segfault, 2022-10-11) the pattern here was: if (!x) return; free_pattern_expr(y); While at it, instead of: if (!x) return; free_pattern_expr(x); Let's instead do: if (x) free_pattern_expr(x); This will make it easier to free additional members from free_grep_patterns() in the future. Helped-by: Elijah Newren <newren@gmail.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Feb 7, 2023 at 00:07 UTC 891c9965fbc05848fb66444274e39c7ae2c6f321
1 file changed +9 -5
grep.c
+9 -5
@@ -769,11 +769,11 @@ static void free_pattern_expr(struct grep_expr *x)
769 free(x);
770 }
771
772 -void free_grep_patterns(struct grep_opt *opt)
772 +static void free_grep_pat(struct grep_pat *pattern)
773 {
774 struct grep_pat *p, *n;
775
776 - for (p = opt->pattern_list; p; p = n) {
776 + for (p = pattern; p; p = n) {
777 n = p->next;
778 switch (p->token) {
779 case GREP_PATTERN: /* atom */
@@ -790,10 +790,14 @@ void free_grep_patterns(struct grep_opt *opt)
790 }
791 free(p);
792 }
793 +}
794
794 - if (!opt->pattern_expression)
795 - return;
796 - free_pattern_expr(opt->pattern_expression);
795 +void free_grep_patterns(struct grep_opt *opt)
796 +{
797 + free_grep_pat(opt->pattern_list);
798 +
799 + if (opt->pattern_expression)
800 + free_pattern_expr(opt->pattern_expression);
801 }
802
803 static const char *end_of_line(const char *cp, unsigned long *left)