]> git.ipfire.org Git - thirdparty/make.git/commitdiff
Fix a core dump when reading_file is 0 (20033).
authorPaul Smith <psmith@gnu.org>
Tue, 19 Jun 2007 04:47:58 +0000 (04:47 +0000)
committerPaul Smith <psmith@gnu.org>
Tue, 19 Jun 2007 04:47:58 +0000 (04:47 +0000)
Fix some manual typos (20018).

ChangeLog
doc/make.texi
expand.c
read.c

index 85756904714caa86aa2bd0f69211d41229d967f0..3a30917517e074c1c5dcd6775926146b51c6e747 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-06-13  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Reading Makefiles): "Expansion of deferred" ->
+       "Expansion of a deferred"
+       Fixes Savannah bug #20018.
+
+       * expand.c (variable_expand_for_file): Preserve the value of
+       reading_file rather than setting it to 0 at the end.
+       Fixes Savannah bug #20033.
+
 2007-05-11  Paul Smith  <psmith@gnu.org>
 
        * job.c (new_job): Add debug info to specify where make found the
index baf92afdc8e4870e5803fde01767cbf95940afff..3928db7fe440499c3d0a8e903165d426aa67c8cd 100644 (file)
@@ -1541,7 +1541,7 @@ constructs within the makefile.  We say that expansion is
 @code{make} will expand any variables or functions in that section of a
 construct as the makefile is parsed.  We say that expansion is
 @dfn{deferred} if expansion is not performed immediately.  Expansion of
-deferred construct is not performed until either the construct appears
+deferred construct is not performed until either the construct appears
 later in an immediate context, or until the second phase.
 
 You may not be familiar with some of these constructs yet.  You can
index cc8ede414cdb34a50646ae828d52baed48329484..3d0229c5018b3977f39fa336dd7b07c5cb7a5eff 100644 (file)
--- a/expand.c
+++ b/expand.c
@@ -460,20 +460,25 @@ char *
 variable_expand_for_file (const char *line, struct file *file)
 {
   char *result;
-  struct variable_set_list *save;
+  struct variable_set_list *savev;
+  const struct floc *savef;
 
   if (file == 0)
     return variable_expand (line);
 
-  save = current_variable_set_list;
+  savev = current_variable_set_list;
   current_variable_set_list = file->variables;
+
+  savef = reading_file;
   if (file->cmds && file->cmds->fileinfo.filenm)
     reading_file = &file->cmds->fileinfo;
   else
     reading_file = 0;
+
   result = variable_expand (line);
-  current_variable_set_list = save;
-  reading_file = 0;
+
+  current_variable_set_list = savev;
+  reading_file = savef;
 
   return result;
 }
diff --git a/read.c b/read.c
index e50a76c9d3089a54c960f624ba75c7690b17c298..6f13e40b5fb5f2e1e5b5bf027b729902731249c6 100644 (file)
--- a/read.c
+++ b/read.c
@@ -463,7 +463,7 @@ eval (struct ebuffer *ebuf, int set_default)
 
 #define record_waiting_files()                                               \
   do                                                                         \
-    {                                                                        \
+    {                                                                        \
       if (filenames != 0)                                                    \
         {                                                                     \
          fi.lineno = tgts_started;                                           \
@@ -570,7 +570,7 @@ eval (struct ebuffer *ebuf, int set_default)
       remove_comments (collapsed);
 
       /* Compare a word, both length and contents. */
-#define        word1eq(s)      (wlen == sizeof(s)-1 && strneq (s, p, sizeof(s)-1))
+#define        word1eq(s)      (wlen == sizeof(s)-1 && strneq (s, p, sizeof(s)-1))
       p = collapsed;
       while (isspace ((unsigned char)*p))
        ++p;
@@ -608,7 +608,7 @@ eval (struct ebuffer *ebuf, int set_default)
 
       if (!in_ignored_define)
        {
-         int i = conditional_line (p, wlen, fstart);
+         int i = conditional_line (p, wlen, fstart);
           if (i != -2)
             {
               if (i == -1)