+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
/* 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);
{
*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;
}
/* 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,