Mercurial > hg > octave-lyh > gnulib-hg
changeset 16356:2fa8e82affcc
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.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 04 Feb 2012 19:13:34 +0100 |
parents | cc8e7dd6c439 |
children | fb977cbd79e9 |
files | ChangeLog lib/isatty.c |
diffstat | 2 files changed, 22 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-02-04 Bruno Haible <bruno@clisp.org> + + 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. + 2012-02-04 Bruno Haible <bruno@clisp.org> spawn-pipe tests: Fix a NULL program name in a diagnostic.
--- a/lib/isatty.c +++ b/lib/isatty.c @@ -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; }