summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2005-09-26 05:16:31 +0000
committerPaul Smith <psmith@gnu.org>2005-09-26 05:16:31 +0000
commit66459baee27374577d32a78564604ad64228f71d (patch)
tree5a4d57b74c6259e674187757bc7a09d5305be23d
parent5ee856d96d02275ccb19b19afd60c1e241bc62eb (diff)
downloadgunmake-66459baee27374577d32a78564604ad64228f71d.tar.gz
Make sure to assign a boolean value to a 1-bit bitfield. Reported on
the bug-make mailing list. Fix Savannah bug # 14527: remember to free temporary line constructor memory if the line is empty.
-rw-r--r--ChangeLog12
-rw-r--r--job.c17
-rw-r--r--variable.c2
3 files changed, 24 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index d2e47e9..83e1fa8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-09-26 Paul D. Smith <psmith@gnu.org>
+
+ * job.c (construct_command_argv_internal): If the line is empty
+ remember to free the temporary argv strings.
+ Fixes bug # 14527.
+
+2005-09-16 Paul D. Smith <psmith@gnu.org>
+
+ * job.c (start_job_command): The noerror flag is a boolean (single
+ bit); set it appropriately.
+ Reported by Mark Eichin <eichin@metacarta.com>
+
2005-08-29 Paul D. Smith <psmith@gnu.org>
* function.c (func_error): On Windows, output from $(info ...)
diff --git a/job.c b/job.c
index 18d17e3..71bc381 100644
--- a/job.c
+++ b/job.c
@@ -987,7 +987,7 @@ start_job_command (struct child *child)
| child->file->cmds->lines_flags[child->command_line - 1]);
p = child->command_ptr;
- child->noerror = flags & COMMANDS_NOERROR;
+ child->noerror = ((flags & COMMANDS_NOERROR) != 0);
while (*p != '\0')
{
@@ -2298,6 +2298,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
char *end;
int instring, word_has_equals, seen_nonequals, last_argument_was_empty;
char **new_argv = 0;
+ char *argstr = 0;
#ifdef WINDOWS32
int slow_flag = 0;
@@ -2384,7 +2385,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
new_argv = (char **) xmalloc (i * sizeof (char *));
/* All the args can fit in a buffer as big as LINE is. */
- ap = new_argv[0] = (char *) xmalloc (i);
+ ap = new_argv[0] = argstr = (char *) xmalloc (i);
end = ap + i;
/* I is how many complete arguments have been found. */
@@ -2598,8 +2599,12 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
}
if (new_argv[0] == 0)
- /* Line was empty. */
- return 0;
+ {
+ /* Line was empty. */
+ free (argstr);
+ free ((char *)new_argv);
+ return 0;
+ }
return new_argv;
@@ -2609,8 +2614,8 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
if (new_argv != 0)
{
/* Free the old argument list we were working on. */
- free (new_argv[0]);
- free ((void *)new_argv);
+ free (argstr);
+ free ((char *)new_argv);
}
#ifdef __MSDOS__
diff --git a/variable.c b/variable.c
index 2f1826f..43964a5 100644
--- a/variable.c
+++ b/variable.c
@@ -446,7 +446,7 @@ lookup_variable_in_set (const char *name, unsigned int length,
void
initialize_file_variables (struct file *file, int reading)
{
- register struct variable_set_list *l = file->variables;
+ struct variable_set_list *l = file->variables;
if (l == 0)
{