From 8688ef20cf5d541e7ca98919cc2d757fbfe1dd32 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sun, 27 Sep 2009 02:15:36 +0000 Subject: - Add static pattern targets to the string cache. - Use specific free_*() calls where appropriate. --- ChangeLog | 6 ++++++ dep.h | 3 ++- read.c | 14 +++++++------- rule.c | 9 +-------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66ce7f3..02b646b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,12 @@ 2009-09-26 Paul Smith + * read.c (record_files): Use free_ns() to free struct nameseq. + (eval): Ditto. + + * rule.c (freerule): Use free_dep_chain(). + * read.c (record_files): Free FILENAMES chain for implicit rules. + (eval): Static pattern targets go into the string cache. * function.c (string_glob): Free NAME in the nameseq chain. diff --git a/dep.h b/dep.h index eda0211..305fb89 100644 --- a/dep.h +++ b/dep.h @@ -80,7 +80,8 @@ struct nameseq *ar_glob (const char *arname, const char *member_pattern, unsigne #define dep_name(d) ((d)->name == 0 ? (d)->file->name : (d)->name) #define alloc_dep() (xcalloc (sizeof (struct dep))) -#define free_dep(_d) free (_d) +#define free_ns(_n) free (_n) +#define free_dep(_d) free_ns (_d) struct dep *copy_dep_chain (const struct dep *d); void free_dep_chain (struct dep *d); diff --git a/read.c b/read.c index 55b26e8..2eb98fa 100644 --- a/read.c +++ b/read.c @@ -852,7 +852,7 @@ eval (struct ebuffer *ebuf, int set_default) const char *name = files->name; int r; - free (files); + free_ns (files); files = next; r = eval_makefile (name, @@ -1142,7 +1142,7 @@ eval (struct ebuffer *ebuf, int set_default) { struct nameseq *target; target = PARSE_FILE_SEQ (&p2, struct nameseq, ':', NULL, - PARSEFS_NOGLOB|PARSEFS_NOCACHE); + PARSEFS_NOGLOB); ++p2; if (target == 0) fatal (fstart, _("missing target pattern")); @@ -1152,7 +1152,7 @@ eval (struct ebuffer *ebuf, int set_default) pattern = target->name; if (pattern_percent == 0) fatal (fstart, _("target pattern contains no `%%'")); - free (target); + free_ns (target); } else pattern = 0; @@ -1779,7 +1779,7 @@ record_target_var (struct nameseq *filenames, char *defn, struct pattern_var *p; nextf = filenames->next; - free (filenames); + free_ns (filenames); /* If it's a pattern target, then add it to the pattern-specific variable list. */ @@ -1938,7 +1938,7 @@ record_files (struct nameseq *filenames, const char *pattern, /* Count the targets to create an array of target names. We already have the first one. */ nextf = filenames->next; - free (filenames); + free_ns (filenames); filenames = nextf; for (c = 1; nextf; ++c, nextf = nextf->next) @@ -1963,7 +1963,7 @@ record_files (struct nameseq *filenames, const char *pattern, ++c; nextf = filenames->next; - free (filenames); + free_ns (filenames); filenames = nextf; } @@ -1981,7 +1981,7 @@ record_files (struct nameseq *filenames, const char *pattern, struct file *f; struct dep *this = 0; - free (filenames); + free_ns (filenames); /* Check for special targets. Do it here instead of, say, snap_deps() so that we can immediately use the value. */ diff --git a/rule.c b/rule.c index 8311fb6..a6928df 100644 --- a/rule.c +++ b/rule.c @@ -401,15 +401,8 @@ static void freerule (struct rule *rule, struct rule *lastrule) { struct rule *next = rule->next; - struct dep *dep; - dep = rule->deps; - while (dep) - { - struct dep *t = dep->next; - free_dep (dep); - dep = t; - } + free_dep_chain (rule->deps); free (rule->targets); free (rule->suffixes); -- cgit v1.2.3