diff options
author | Paul Smith <psmith@gnu.org> | 2005-09-26 05:16:31 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2005-09-26 05:16:31 +0000 |
commit | 66459baee27374577d32a78564604ad64228f71d (patch) | |
tree | 5a4d57b74c6259e674187757bc7a09d5305be23d | |
parent | 5ee856d96d02275ccb19b19afd60c1e241bc62eb (diff) | |
download | gunmake-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-- | ChangeLog | 12 | ||||
-rw-r--r-- | job.c | 17 | ||||
-rw-r--r-- | variable.c | 2 |
3 files changed, 24 insertions, 7 deletions
@@ -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 ...) @@ -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__ @@ -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) { |