From 5b65c5b916e458e5eed3c74f038dd11c008fdfd8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 22 Jun 2013 16:16:56 +0300 Subject: 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. --- main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 147f77d..fe8d355 100644 --- a/main.c +++ b/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, -- cgit v1.2.3