1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-07-26 10:39:01 +02:00

tty: don't distinguish input errors

* src/tty.c (main): Don't distinguish ENOTTY from other errors,
because isatty() doesn't portably distinguish errors.
Solaris returns ENOENT for all input errors for example.
Musl also returns ENOENT, and ENODEV may be returned as disscussed at:
http://openwall.com/lists/musl/2017/04/06/6
* tests/misc/tty.sh: Adjust accordingly.
This commit is contained in:
Pádraig Brady
2017-08-30 20:14:22 -07:00
parent 5ee9c8f7a6
commit 173bee1bdf
3 changed files with 5 additions and 12 deletions
-1
View File
@@ -15123,7 +15123,6 @@ Exit status:
1 if standard input is a non-terminal file
2 if given incorrect arguments
3 if a write error occurs
4 if standard input is closed or its type cannot be determined
@end display
+3 -8
View File
@@ -17,7 +17,7 @@
/* Displays "not a tty" if stdin is not a terminal.
Displays nothing if -s option is given.
Exit status 0 if stdin is a tty, 1 if not a tty, 2 if usage error,
3 if write error, 4 for other stdin errors.
3 if write error.
Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
@@ -35,8 +35,7 @@ enum
{
TTY_STDIN_NOTTY = 1,
TTY_FAILURE = 2,
TTY_WRITE_ERROR = 3,
TTY_STDIN_ERROR = 4
TTY_WRITE_ERROR = 3
};
/* The official name of this program (e.g., no 'g' prefix). */
@@ -118,17 +117,13 @@ main (int argc, char **argv)
errno = ENOENT;
if (silent)
return (isatty (STDIN_FILENO) ? EXIT_SUCCESS
: (errno == ENOTTY || errno == EINVAL) ? TTY_STDIN_NOTTY
: TTY_STDIN_ERROR);
return isatty (STDIN_FILENO) ? EXIT_SUCCESS : TTY_STDIN_NOTTY;
int status = EXIT_SUCCESS;
char const *tty = ttyname (STDIN_FILENO);
if (! tty)
{
if (errno != ENOTTY && errno != EINVAL)
error (TTY_STDIN_ERROR, errno, _("standard input"));
tty = _("not a tty");
status = TTY_STDIN_NOTTY;
}
+2 -3
View File
@@ -27,6 +27,8 @@ fi
returns_ 1 tty </dev/null || fail=1
returns_ 1 tty -s </dev/null || fail=1
returns_ 1 tty <&- 2>/dev/null || fail=1
returns_ 1 tty -s <&- || fail=1
returns_ 2 tty a || fail=1
returns_ 2 tty -s a || fail=1
@@ -38,7 +40,4 @@ if test -w /dev/full && test -c /dev/full; then
returns_ 3 tty </dev/null >/dev/full || fail=1
fi
returns_ 4 tty <&- 2>/dev/null || fail=1
returns_ 4 tty -s <&- || fail=1
Exit $fail