|
|
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.