|
Message-Id: <20180913162755.18911-1-benjamin@python.org> Date: Thu, 13 Sep 2018 09:27:55 -0700 From: Benjamin Peterson <benjamin@...hon.org> To: musl@...ts.openwall.com Subject: [PATCH] improve error handling of ttyname_r and isatty POSIX allows ttyname(_r) and isatty to return EBADF if passed file descriptor is invalid. --- src/unistd/isatty.c | 6 +++++- src/unistd/ttyname_r.c | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/unistd/isatty.c b/src/unistd/isatty.c index c8badaf5..3d5213c6 100644 --- a/src/unistd/isatty.c +++ b/src/unistd/isatty.c @@ -1,9 +1,13 @@ #include <unistd.h> +#include <errno.h> #include <sys/ioctl.h> #include "syscall.h" int isatty(int fd) { struct winsize wsz; - return !__syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz); + unsigned long r = __syscall_ret(__syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz)); + if (r == 0) return 1; + if (errno != EBADF) errno = ENOTTY; + return 0; } diff --git a/src/unistd/ttyname_r.c b/src/unistd/ttyname_r.c index 33aa4ae1..3f836a6a 100644 --- a/src/unistd/ttyname_r.c +++ b/src/unistd/ttyname_r.c @@ -10,7 +10,10 @@ int ttyname_r(int fd, char *name, size_t size) char procname[sizeof "/proc/self/fd/" + 3*sizeof(int) + 2]; ssize_t l; - if (!isatty(fd)) return ENOTTY; + if (!isatty(fd)) { + if (errno != EBADF) errno = ENOTTY; + return errno; + } __procfdname(procname, fd); l = readlink(procname, name, size); -- 2.17.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.