diff options
author | Benjamin Peterson <benjamin@python.org> | 2018-09-13 14:23:42 -0700 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2018-09-15 01:58:03 -0400 |
commit | c84971995b3a6d5118f9357c040572f4c78bcd55 (patch) | |
tree | 36b663dffd83bc09199d01f34f77126167c71ccb /src/unistd | |
parent | e13063aad7aee341d278d2a879a76ec7b59b2ad8 (diff) | |
download | musl-c84971995b3a6d5118f9357c040572f4c78bcd55.tar.gz musl-c84971995b3a6d5118f9357c040572f4c78bcd55.tar.xz musl-c84971995b3a6d5118f9357c040572f4c78bcd55.zip |
improve error handling of ttyname_r and isatty
POSIX allows ttyname(_r) and isatty to return EBADF if passed file descriptor is invalid. maintainer's note: these are optional ("may fail") errors, but it's non-conforming for ttyname_r to return ENOTTY when it failed for a different reason.
Diffstat (limited to 'src/unistd')
-rw-r--r-- | src/unistd/isatty.c | 6 | ||||
-rw-r--r-- | src/unistd/ttyname_r.c | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/unistd/isatty.c b/src/unistd/isatty.c index c8badaf5..75a9c186 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(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 cb364c29..82acb75e 100644 --- a/src/unistd/ttyname_r.c +++ b/src/unistd/ttyname_r.c @@ -9,7 +9,7 @@ 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)) return errno; __procfdname(procname, fd); l = readlink(procname, name, size); |