mirror of
https://github.com/mirror/make.git
synced 2025-02-04 08:40:27 +08:00
Fix a fatal error at startup on Windows due to non-ASCII characters in PATH.
main.c (find_and_set_default_shell): Don't use file_exists_p or dir_file_exists_p, as those call readdir, which can fail if PATH includes directories with non-ASCII characters, and that would cause Make to fail at startup with confusing diagnostics. See https://sourceforge.net/mailarchive/message.php?msg_id=30846737 for the details.
This commit is contained in:
parent
cc85b927cd
commit
5b65c5b916
@ -1,3 +1,12 @@
|
||||
2013-06-22 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* main.c (find_and_set_default_shell): Don't use file_exists_p or
|
||||
dir_file_exists_p, as those call readdir, which can fail if PATH
|
||||
includes directories with non-ASCII characters, and that would
|
||||
cause Make to fail at startup with confusing diagnostics. See
|
||||
https://sourceforge.net/mailarchive/message.php?msg_id=30846737
|
||||
for the details.
|
||||
|
||||
2013-06-22 Paul Smith <psmith@gnu.org>
|
||||
|
||||
Improve performance by using a character map to determine where we
|
||||
|
21
main.c
21
main.c
@ -956,7 +956,7 @@ find_and_set_default_shell (const char *token)
|
||||
/* no new information, path already set or known */
|
||||
sh_found = 1;
|
||||
}
|
||||
else if (file_exists_p (search_token))
|
||||
else if (_access (search_token, 0) == 0)
|
||||
{
|
||||
/* search token path was found */
|
||||
sprintf (sh_path, "%s", search_token);
|
||||
@ -982,9 +982,9 @@ find_and_set_default_shell (const char *token)
|
||||
{
|
||||
*ep = '\0';
|
||||
|
||||
if (dir_file_exists_p (p, search_token))
|
||||
sprintf (sh_path, "%s/%s", p, search_token);
|
||||
if (_access (sh_path, 0) == 0)
|
||||
{
|
||||
sprintf (sh_path, "%s/%s", p, search_token);
|
||||
default_shell = xstrdup (w32ify (sh_path, 0));
|
||||
sh_found = 1;
|
||||
*ep = PATH_SEPARATOR_CHAR;
|
||||
@ -1002,12 +1002,15 @@ find_and_set_default_shell (const char *token)
|
||||
}
|
||||
|
||||
/* be sure to check last element of Path */
|
||||
if (p && *p && dir_file_exists_p (p, search_token))
|
||||
{
|
||||
sprintf (sh_path, "%s/%s", p, search_token);
|
||||
default_shell = xstrdup (w32ify (sh_path, 0));
|
||||
sh_found = 1;
|
||||
}
|
||||
if (p && *p)
|
||||
{
|
||||
sprintf (sh_path, "%s/%s", p, search_token);
|
||||
if (_access (sh_path, 0) == 0)
|
||||
{
|
||||
default_shell = xstrdup (w32ify (sh_path, 0));
|
||||
sh_found = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (sh_found)
|
||||
DB (DB_VERBOSE,
|
||||
|
Loading…
Reference in New Issue
Block a user