forked from Imagelibrary/binutils-gdb
Improve MinGW support in Readline
These changes were already accepted upstream in Readline, but GDB did not yet import a newer Readline version. readline/Changelog.gdb: * util.c: Include rlshell.h. (_rl_tropen) [_WIN32 && !__CYGWIN__]: Open the trace file in the user's temporary directory. * tcap.h [HAVE_NCURSES_TERMCAP_H]: Include ncurses/termcap.h. * input.c (w32_isatty) [_WIN32 && !__CYGWIN__]: New function, to replace isatty that is not reliable enough on MS-Windows. (isatty) [_WIN32 && !__CYGWIN__]: Redirect to w32_isatty. (rl_getc): Call _getch, not getch, which could be an ncurses function when linked with ncurses, in which case getch will return EOF for any keystroke, because there's no curses window. * tilde.c (tilde_expand_word) [_WIN32]: * histfile.c (history_filename) [_WIN32]: Windows-specific environment variable to replace HOME if that is undefined. * funmap.c (default_funmap): Compile rl_paste_from_clipboard on all Windows platforms, not just Cygwin. * readline.h (rl_paste_from_clipboard): Include declaration for all Windows platforms. * display.c (insert_some_chars, delete_chars): Don't use the MinGW-specific code if linked with ncurses. * configure.in: * config.h.in: Support ncurses/termcap.h. The configure script was updated accordingly. * complete.c [_WIN32 && !__CYGWIN__]: Initialize _rl_completion_case_fold to 1. (printable_part, rl_filename_completion_function) [_WIN32 && !__CYGWIN__]: Handle the drive letter.
This commit is contained in:
@@ -86,6 +86,36 @@ static int ibuffer_space PARAMS((void));
|
||||
static int rl_get_char PARAMS((int *));
|
||||
static int rl_gather_tyi PARAMS((void));
|
||||
|
||||
#if defined (_WIN32) && !defined (__CYGWIN__)
|
||||
|
||||
/* 'isatty' in the Windows runtime returns non-zero for every
|
||||
character device, including the null device. Repair that. */
|
||||
#include <io.h>
|
||||
#define WIN32_LEAN_AND_MEAN 1
|
||||
#include <windows.h>
|
||||
|
||||
int w32_isatty (int fd)
|
||||
{
|
||||
if (_isatty(fd))
|
||||
{
|
||||
HANDLE h = (HANDLE) _get_osfhandle (fd);
|
||||
DWORD ignored;
|
||||
|
||||
if (h == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
errno = EBADF;
|
||||
return 0;
|
||||
}
|
||||
if (GetConsoleMode (h, &ignored) != 0)
|
||||
return 1;
|
||||
}
|
||||
errno = ENOTTY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define isatty(x) w32_isatty(x)
|
||||
#endif
|
||||
|
||||
/* **************************************************************** */
|
||||
/* */
|
||||
/* Character Input Buffering */
|
||||
@@ -465,8 +495,10 @@ rl_getc (stream)
|
||||
RL_CHECK_SIGNALS ();
|
||||
|
||||
#if defined (__MINGW32__)
|
||||
/* Use _getch to make sure we call the function from MS runtime,
|
||||
even if some curses library is linked in. */
|
||||
if (isatty (fileno (stream)))
|
||||
return (getch ());
|
||||
return (_getch ());
|
||||
#endif
|
||||
result = read (fileno (stream), &c, sizeof (unsigned char));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user