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:
Eli Zaretskii
2016-09-17 11:50:37 +03:00
parent a3fa21cadc
commit 7f3c5ec870
14 changed files with 125 additions and 11 deletions

View File

@@ -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));