Message ID | 83egrklxde.fsf@gnu.org |
---|---|
State | New |
Headers | show |
On Sat, Dec 27, 2014 at 11:13 AM, Eli Zaretskii <eliz@gnu.org> wrote: > I discovered that completing on file names in GDB on MS-Windows marks > every file as executable. This is because Readline uses 'access' and > X_OK to determine that, which doesn't work on Windows. > > Suggested patch is below. Has this gone upstream to readline? Maybe it should go upstream first. Thanks, Andrew Pinski > > 2014-12-27 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. > > --- readline/complete.c~0 2014-06-11 19:34:41.000000000 +0300 > +++ readline/complete.c 2014-12-27 21:06:38.255053100 +0200 > @@ -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); > }
> Date: Sat, 27 Dec 2014 14:00:45 -0800 > From: Andrew Pinski <pinskia@gmail.com> > Cc: Chet Ramey <chet.ramey@case.edu>, > "gdb-patches@sourceware.org" <gdb-patches@sourceware.org> > > On Sat, Dec 27, 2014 at 11:13 AM, Eli Zaretskii <eliz@gnu.org> wrote: > > I discovered that completing on file names in GDB on MS-Windows marks > > every file as executable. This is because Readline uses 'access' and > > X_OK to determine that, which doesn't work on Windows. > > > > Suggested patch is below. > > Has this gone upstream to readline? Maybe it should go upstream first. That's why I CC'ed Chet.
On 12/27/14 2:13 PM, Eli Zaretskii wrote: > I discovered that completing on file names in GDB on MS-Windows marks > every file as executable. This is because Readline uses 'access' and > X_OK to determine that, which doesn't work on Windows. Ugh, really? Thanks for the patch. Chet
> Date: Mon, 29 Dec 2014 10:38:45 -0500 > From: Chet Ramey <chet.ramey@case.edu> > CC: chet.ramey@case.edu, gdb-patches@sourceware.org > > On 12/27/14 2:13 PM, Eli Zaretskii wrote: > > I discovered that completing on file names in GDB on MS-Windows marks > > every file as executable. This is because Readline uses 'access' and > > X_OK to determine that, which doesn't work on Windows. > > Ugh, really? Thanks for the patch. Thanks for reviewing it. Joel, Pedro, others: can I now commit this to the GDB repository? Branch too?
On 12/29/14 11:22 AM, Eli Zaretskii wrote: >> Date: Mon, 29 Dec 2014 10:38:45 -0500 >> From: Chet Ramey <chet.ramey@case.edu> >> CC: chet.ramey@case.edu, gdb-patches@sourceware.org >> >> On 12/27/14 2:13 PM, Eli Zaretskii wrote: >>> I discovered that completing on file names in GDB on MS-Windows marks >>> every file as executable. This is because Readline uses 'access' and >>> X_OK to determine that, which doesn't work on Windows. >> >> Ugh, really? Thanks for the patch. > > Thanks for reviewing it. > > Joel, Pedro, others: can I now commit this to the GDB repository? I am not certain of the exact vintage of the copy of readline in the GDB repository, but you should probably audit it and see whether or not this patch should use `fn' instead of `filename'.
> Date: Mon, 29 Dec 2014 11:46:48 -0500 > From: Chet Ramey <chet.ramey@case.edu> > CC: chet.ramey@case.edu, gdb-patches@sourceware.org > > I am not certain of the exact vintage of the copy of readline in the GDB > repository, but you should probably audit it and see whether or not this > patch should use `fn' instead of `filename'. OK, will do. Thanks.
On 12/29/2014 04:22 PM, Eli Zaretskii wrote: >> Date: Mon, 29 Dec 2014 10:38:45 -0500 >> From: Chet Ramey <chet.ramey@case.edu> >> CC: chet.ramey@case.edu, gdb-patches@sourceware.org >> >> On 12/27/14 2:13 PM, Eli Zaretskii wrote: >>> I discovered that completing on file names in GDB on MS-Windows marks >>> every file as executable. This is because Readline uses 'access' and >>> X_OK to determine that, which doesn't work on Windows. >> >> Ugh, really? Thanks for the patch. > > Thanks for reviewing it. > > Joel, Pedro, others: can I now commit this to the GDB repository? > Branch too? Fine with me. Thanks, Pedro Alves
> Date: Mon, 29 Dec 2014 18:59:48 +0000 > From: Pedro Alves <palves@redhat.com> > CC: gdb-patches@sourceware.org > > On 12/29/2014 04:22 PM, Eli Zaretskii wrote: > >> Date: Mon, 29 Dec 2014 10:38:45 -0500 > >> From: Chet Ramey <chet.ramey@case.edu> > >> CC: chet.ramey@case.edu, gdb-patches@sourceware.org > >> > >> On 12/27/14 2:13 PM, Eli Zaretskii wrote: > >>> I discovered that completing on file names in GDB on MS-Windows marks > >>> every file as executable. This is because Readline uses 'access' and > >>> X_OK to determine that, which doesn't work on Windows. > >> > >> Ugh, really? Thanks for the patch. > > > > Thanks for reviewing it. > > > > Joel, Pedro, others: can I now commit this to the GDB repository? > > Branch too? > > Fine with me. Thanks, done.
--- readline/complete.c~0 2014-06-11 19:34:41.000000000 +0300 +++ readline/complete.c 2014-12-27 21:06:38.255053100 +0200 @@ -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); }