[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
isatty on native Windows
From: |
Bruno Haible |
Subject: |
isatty on native Windows |
Date: |
Sat, 04 Feb 2012 19:13:54 +0100 |
User-agent: |
KMail/4.7.4 (Linux/3.1.0-1.2-desktop; KDE/4.7.4; x86_64; ; ) |
On mingw, I'm seeing this test failure:
test-ptsname_r.c:117: assertion failed
FAIL: test-ptsname_r.exe
The reason is that our ptsname_r implementation assumes that isatty()
sets errno when it returns 0, but our isatty() replacement does not do this.
This fixes it (at least for mingw):
2012-02-04 Bruno Haible <address@hidden>
isatty: Fix test failure of ptsname_r on native Windows.
* lib/isatty.c (_isatty_nothrow): Upon exception, return 0, not -1,
and don't set errno.
(isatty): Test first whether fd is valid. Set errno when returning 0.
--- lib/isatty.c.orig Sat Feb 4 19:11:06 2012
+++ lib/isatty.c Sat Feb 4 19:00:50 2012
@@ -48,8 +48,7 @@
}
CATCH_MSVC_INVAL
{
- result = -1;
- errno = EBADF;
+ result = 0;
}
DONE_MSVC_INVAL;
@@ -59,15 +58,24 @@
# define _isatty_nothrow _isatty
#endif
+/* Determine whether FD refers to a console device. Return 1 if yes.
+ Return 0 and set errno if no. (ptsname_r relies on the errno value.) */
int
isatty (int fd)
{
- /* _isatty (fd) tests whether GetFileType of the handle is FILE_TYPE_CHAR.
*/
+ HANDLE h = (HANDLE) _get_osfhandle (fd);
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return 0;
+ }
+ /* _isatty (fd) tests whether GetFileType of the handle is FILE_TYPE_CHAR.
+ But it does not set errno when it returns 0. */
if (_isatty_nothrow (fd))
{
- HANDLE h = (HANDLE) _get_osfhandle (fd);
- return IsConsoleHandle (h);
+ if (IsConsoleHandle (h))
+ return 1;
}
- else
- return 0;
+ errno = ENOTTY;
+ return 0;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- isatty on native Windows,
Bruno Haible <=