mirror of
https://github.com/mirror/make.git
synced 2025-01-27 21:00:22 +08:00
Fixes from Eli Zaretskii:
Fix to allow quoted directories in PATH. Fix for Savannah bug #20549.
This commit is contained in:
parent
e54dfb4284
commit
2a23064da5
16
ChangeLog
16
ChangeLog
@ -10,6 +10,11 @@
|
|||||||
* make.h: Add a prototype for w32_kill() (change suggested by
|
* make.h: Add a prototype for w32_kill() (change suggested by
|
||||||
Yongwei Wu <wuyongwei@gmail.com>).
|
Yongwei Wu <wuyongwei@gmail.com>).
|
||||||
|
|
||||||
|
2007-09-21 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
* w32/pathstuff.c (convert_Path_to_windows32): Handle quoted
|
||||||
|
directories in Path.
|
||||||
|
|
||||||
2007-08-15 Paul Smith <psmith@gnu.org>
|
2007-08-15 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* doc/make.texi (GNU Free Documentation License): The fdl.texi
|
* doc/make.texi (GNU Free Documentation License): The fdl.texi
|
||||||
@ -23,6 +28,17 @@
|
|||||||
then (order-only for example) but they will be this time.
|
then (order-only for example) but they will be this time.
|
||||||
Fixes Savannah bug #'s 3330 and 15919.
|
Fixes Savannah bug #'s 3330 and 15919.
|
||||||
|
|
||||||
|
2007-07-21 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
Fix Savannah bug #20549:
|
||||||
|
* function.c (func_shell): Call construct_command_argv with zero
|
||||||
|
value of FLAGS.
|
||||||
|
* job.c (construct_command_argv_internal): New argument FLAGS; all
|
||||||
|
callers changed.
|
||||||
|
[WINDOWS32]: If FLAGS has the COMMANDS_RECURSE bit set, ignore
|
||||||
|
just_print_flag.
|
||||||
|
* job.h (construct_command_argv_internal): Update prototype.
|
||||||
|
|
||||||
2007-07-13 Paul Smith <psmith@gnu.org>
|
2007-07-13 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* file.c (expand_deps): Use variable_buffer as the start of the
|
* file.c (expand_deps): Use variable_buffer as the start of the
|
||||||
|
@ -1601,7 +1601,8 @@ func_shell (char *o, char **argv, const char *funcname UNUSED)
|
|||||||
|
|
||||||
#ifndef __MSDOS__
|
#ifndef __MSDOS__
|
||||||
/* Construct the argument list. */
|
/* Construct the argument list. */
|
||||||
command_argv = construct_command_argv (argv[0], NULL, NULL, &batch_filename);
|
command_argv = construct_command_argv (argv[0], NULL, NULL, 0,
|
||||||
|
&batch_filename);
|
||||||
if (command_argv == 0)
|
if (command_argv == 0)
|
||||||
return o;
|
return o;
|
||||||
#endif
|
#endif
|
||||||
@ -1785,8 +1786,8 @@ func_shell (char *o, char **argv, const char *funcname)
|
|||||||
char* batch_filename = NULL;
|
char* batch_filename = NULL;
|
||||||
|
|
||||||
/* Construct the argument list. */
|
/* Construct the argument list. */
|
||||||
command_argv = construct_command_argv (argv[0], (char **) NULL,
|
command_argv = construct_command_argv (argv[0], NULL, NULL, 0,
|
||||||
(struct file *) 0, &batch_filename);
|
&batch_filename);
|
||||||
if (command_argv == 0)
|
if (command_argv == 0)
|
||||||
return o;
|
return o;
|
||||||
|
|
||||||
|
23
job.c
23
job.c
@ -1016,7 +1016,9 @@ start_job_command (struct child *child)
|
|||||||
#ifdef VMS
|
#ifdef VMS
|
||||||
argv = p;
|
argv = p;
|
||||||
#else
|
#else
|
||||||
argv = construct_command_argv (p, &end, child->file, &child->sh_batch_file);
|
argv = construct_command_argv (p, &end, child->file,
|
||||||
|
child->file->cmds->lines_flags[child->command_line - 1],
|
||||||
|
&child->sh_batch_file);
|
||||||
#endif
|
#endif
|
||||||
if (end == NULL)
|
if (end == NULL)
|
||||||
child->command_ptr = NULL;
|
child->command_ptr = NULL;
|
||||||
@ -2200,11 +2202,17 @@ void clean_tmp (void)
|
|||||||
If *RESTP is NULL, newlines will be ignored.
|
If *RESTP is NULL, newlines will be ignored.
|
||||||
|
|
||||||
SHELL is the shell to use, or nil to use the default shell.
|
SHELL is the shell to use, or nil to use the default shell.
|
||||||
IFS is the value of $IFS, or nil (meaning the default). */
|
IFS is the value of $IFS, or nil (meaning the default).
|
||||||
|
|
||||||
|
FLAGS is the value of lines_flags for this command line. It is
|
||||||
|
used in the WINDOWS32 port to check whether + or $(MAKE) were found
|
||||||
|
in this command line, in which case the effect of just_print_flag
|
||||||
|
is overridden. */
|
||||||
|
|
||||||
static char **
|
static char **
|
||||||
construct_command_argv_internal (char *line, char **restp, char *shell,
|
construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||||
char *ifs, char **batch_filename_ptr)
|
char *ifs, int flags,
|
||||||
|
char **batch_filename_ptr)
|
||||||
{
|
{
|
||||||
#ifdef __MSDOS__
|
#ifdef __MSDOS__
|
||||||
/* MSDOS supports both the stock DOS shell and ports of Unixy shells.
|
/* MSDOS supports both the stock DOS shell and ports of Unixy shells.
|
||||||
@ -2784,7 +2792,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
|||||||
/* Some shells do not work well when invoked as 'sh -c xxx' to run a
|
/* Some shells do not work well when invoked as 'sh -c xxx' to run a
|
||||||
command line (e.g. Cygnus GNUWIN32 sh.exe on WIN32 systems). In these
|
command line (e.g. Cygnus GNUWIN32 sh.exe on WIN32 systems). In these
|
||||||
cases, run commands via a script file. */
|
cases, run commands via a script file. */
|
||||||
if (just_print_flag) {
|
if (just_print_flag && !(flags & COMMANDS_RECURSE)) {
|
||||||
/* Need to allocate new_argv, although it's unused, because
|
/* Need to allocate new_argv, although it's unused, because
|
||||||
start_job_command will want to free it and its 0'th element. */
|
start_job_command will want to free it and its 0'th element. */
|
||||||
new_argv = xmalloc(2 * sizeof (char *));
|
new_argv = xmalloc(2 * sizeof (char *));
|
||||||
@ -2826,7 +2834,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
|||||||
} else
|
} else
|
||||||
#endif /* WINDOWS32 */
|
#endif /* WINDOWS32 */
|
||||||
if (unixy_shell)
|
if (unixy_shell)
|
||||||
new_argv = construct_command_argv_internal (new_line, 0, 0, 0, 0);
|
new_argv = construct_command_argv_internal (new_line, 0, 0, 0, flags, 0);
|
||||||
#ifdef __EMX__
|
#ifdef __EMX__
|
||||||
else if (!unixy_shell)
|
else if (!unixy_shell)
|
||||||
{
|
{
|
||||||
@ -2937,7 +2945,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
|||||||
|
|
||||||
char **
|
char **
|
||||||
construct_command_argv (char *line, char **restp, struct file *file,
|
construct_command_argv (char *line, char **restp, struct file *file,
|
||||||
char **batch_filename_ptr)
|
int cmd_flags, char **batch_filename_ptr)
|
||||||
{
|
{
|
||||||
char *shell, *ifs;
|
char *shell, *ifs;
|
||||||
char **argv;
|
char **argv;
|
||||||
@ -3049,7 +3057,8 @@ construct_command_argv (char *line, char **restp, struct file *file,
|
|||||||
warn_undefined_variables_flag = save;
|
warn_undefined_variables_flag = save;
|
||||||
}
|
}
|
||||||
|
|
||||||
argv = construct_command_argv_internal (line, restp, shell, ifs, batch_filename_ptr);
|
argv = construct_command_argv_internal (line, restp, shell, ifs,
|
||||||
|
cmd_flags, batch_filename_ptr);
|
||||||
|
|
||||||
free (shell);
|
free (shell);
|
||||||
free (ifs);
|
free (ifs);
|
||||||
|
3
job.h
3
job.h
@ -70,7 +70,8 @@ void new_job (struct file *file);
|
|||||||
void reap_children (int block, int err);
|
void reap_children (int block, int err);
|
||||||
void start_waiting_jobs (void);
|
void start_waiting_jobs (void);
|
||||||
|
|
||||||
char **construct_command_argv (char *line, char **restp, struct file *file, char** batch_file);
|
char **construct_command_argv (char *line, char **restp, struct file *file,
|
||||||
|
int cmd_flags, char** batch_file);
|
||||||
#ifdef VMS
|
#ifdef VMS
|
||||||
int child_execute_job (char *argv, struct child *child);
|
int child_execute_job (char *argv, struct child *child);
|
||||||
#elif defined(__EMX__)
|
#elif defined(__EMX__)
|
||||||
|
@ -70,11 +70,17 @@ convert_Path_to_windows32(char *Path, char to_delim)
|
|||||||
} else
|
} else
|
||||||
/* all finished, force abort */
|
/* all finished, force abort */
|
||||||
p += strlen(p);
|
p += strlen(p);
|
||||||
|
} else if (*p == '"') { /* a quoted directory */
|
||||||
|
for (p++; *p && *p != '"'; p++) /* skip quoted part */
|
||||||
|
;
|
||||||
|
etok = strpbrk(p, ":;"); /* find next delimiter */
|
||||||
|
*etok = to_delim;
|
||||||
|
p = ++etok;
|
||||||
} else {
|
} else {
|
||||||
/* found another one, no drive letter */
|
/* found another one, no drive letter */
|
||||||
*etok = to_delim;
|
*etok = to_delim;
|
||||||
p = ++etok;
|
p = ++etok;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Path;
|
return Path;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user