From: Eli Zaretskii Date: Tue, 30 Dec 2014 19:14:25 +0000 (+0200) Subject: Fix executable indicator in file name completion on Windows. X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=05942d8a1b618e1c850b67ad76374f8c59743df5;p=deliverable%2Fbinutils-gdb.git 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. --- diff --git a/readline/ChangeLog.gdb b/readline/ChangeLog.gdb index bd082e0fe6..43abd19e11 100644 --- a/readline/ChangeLog.gdb +++ b/readline/ChangeLog.gdb @@ -1,3 +1,9 @@ +2014-12-30 Eli Zaretskii + + * 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. + 2014-09-22 Chen Gang Pushed by Joel Brobecker diff --git a/readline/complete.c b/readline/complete.c index a9c46dfc15..a5ce8039e5 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); }