summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2009-09-27 02:15:36 +0000
committerPaul Smith <psmith@gnu.org>2009-09-27 02:15:36 +0000
commit8688ef20cf5d541e7ca98919cc2d757fbfe1dd32 (patch)
treee78361ae6cb8cd6391c58ce7f3828ac5162f150a
parent44ac2cdb4dc8481cff33101f95f94761c5aa74bc (diff)
downloadgunmake-8688ef20cf5d541e7ca98919cc2d757fbfe1dd32.tar.gz
- Add static pattern targets to the string cache.
- Use specific free_*() calls where appropriate.
-rw-r--r--ChangeLog6
-rw-r--r--dep.h3
-rw-r--r--read.c14
-rw-r--r--rule.c9
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 <psmith@gnu.org>
+ * 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);