diff options
author | Eli Zaretskii <eliz@gnu.org> | 2014-12-30 21:14:25 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2014-12-30 21:27:46 +0200 |
commit | 18de9f067ed583c693b1b8b70a2fa92a1f08a7f8 (patch) | |
tree | 2deb28c34961f57d1c42f36b70bcbf7b4834bc2d | |
parent | 7494da42cf329b56ee86a391b62bd297674ab6b0 (diff) | |
download | binutils-gdb-18de9f067ed583c693b1b8b70a2fa92a1f08a7f8.tar.gz |
Fix executable indicator in file name completion on Windows.
* complete.c (stat_char) [_WIN32]: Don't use 'access' and X_OK on
Windows, they don't work. Instead, look at the file-name
extension to determine whether the file is executable.
-rw-r--r-- | readline/ChangeLog.gdb | 6 | ||||
-rw-r--r-- | readline/complete.c | 13 |
2 files changed, 19 insertions, 0 deletions
diff --git a/readline/ChangeLog.gdb b/readline/ChangeLog.gdb index 1218fd7ee2d..26fb2523aae 100644 --- a/readline/ChangeLog.gdb +++ b/readline/ChangeLog.gdb @@ -1,3 +1,9 @@ +2014-12-30 Eli Zaretskii <eliz@gnu.org> + + * complete.c (stat_char) [_WIN32]: Don't use 'access' and X_OK on + Windows, they don't work. Instead, look at the file-name + extension to determine whether the file is executable. + 2013-09-24 Pierre Muller <muller@sourceware.org> * readline.c (bind_arrow_keys_internal): diff --git a/readline/complete.c b/readline/complete.c index a9c46dfc15e..a5ce8039e50 100644 --- a/readline/complete.c +++ b/readline/complete.c @@ -598,8 +598,21 @@ stat_char (filename) #endif else if (S_ISREG (finfo.st_mode)) { +#if defined (_WIN32) && !defined (__CYGWIN__) + /* Windows 'access' doesn't support X_OK and on latest Windows + versions even invokes an invalid parameter exception. */ + char *ext = strrchr (filename, '.'); + + if (ext + && (_rl_stricmp (ext, ".exe") == 0 + || _rl_stricmp (ext, ".cmd") == 0 + || _rl_stricmp (ext, ".bat") == 0 + || _rl_stricmp (ext, ".com") == 0)) + character = '*'; +#else if (access (filename, X_OK) == 0) character = '*'; +#endif } return (character); } |