Support MAKE_TERMOUT and MAKE_TERMERR on MS-Windows.

* w32/compat/posixfcn.c (isatty, ttyname): New functions.
* config.h.W32.template (HAVE_TTYNAME): Define.  Add a prototype
for ttyname.
This commit is contained in:
Eli Zaretskii 2014-09-15 19:51:41 +03:00
parent 562344122f
commit b484efca56
2 changed files with 32 additions and 1 deletions

View file

@ -296,7 +296,8 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#define HAVE_ISATTY 1
/* Define to 1 if you have the `ttyname' function. */
/* #undef HAVE_TTYNAME */
#define HAVE_TTYNAME 1
char *ttyname (int);
/* Define to 1 if 'n_un.n_name' is a member of 'struct nlist'. */
/* #undef HAVE_STRUCT_NLIST_N_UN_N_NAME */

View file

@ -454,3 +454,33 @@ dlclose (void *handle)
#endif /* MAKE_LOAD */
/* MS runtime's isatty returns non-zero for any character device,
including the null device, which is not what we want. */
int
isatty (int fd)
{
HANDLE fh = (HANDLE) _get_osfhandle (fd);
DWORD con_mode;
if (fh == INVALID_HANDLE_VALUE)
{
errno = EBADF;
return 0;
}
if (GetConsoleMode (fh, &con_mode))
return 1;
errno = ENOTTY;
return 0;
}
char *
ttyname (int fd)
{
/* This "knows" that Make only asks about stdout and stderr. A more
sophisticated implementation should test whether FD is open for
input or output. We can do that by looking at the mode returned
by GetConsoleMode. */
return "CONOUT$";
}