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 db84376f98 (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>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2023-02-07 00:07:50 +01:00 коммит произвёл Junio C Hamano
Родитель 41211db10f
Коммит 891c9965fb
1 изменённых файлов: 9 добавлений и 5 удалений

14
grep.c
Просмотреть файл

@ -769,11 +769,11 @@ static void free_pattern_expr(struct grep_expr *x)
free(x);
}
void free_grep_patterns(struct grep_opt *opt)
static void free_grep_pat(struct grep_pat *pattern)
{
struct grep_pat *p, *n;
for (p = opt->pattern_list; p; p = n) {
for (p = pattern; p; p = n) {
n = p->next;
switch (p->token) {
case GREP_PATTERN: /* atom */
@ -790,10 +790,14 @@ void free_grep_patterns(struct grep_opt *opt)
}
free(p);
}
}
if (!opt->pattern_expression)
return;
free_pattern_expr(opt->pattern_expression);
void free_grep_patterns(struct grep_opt *opt)
{
free_grep_pat(opt->pattern_list);
if (opt->pattern_expression)
free_pattern_expr(opt->pattern_expression);
}
static const char *end_of_line(const char *cp, unsigned long *left)