summary refs log tree commit diff
path: root/pkgs/os-specific/linux/musl/tty-more-precise-errors.patch
diff options
context:
space:
mode:
authorWill Dietz <w@wdtz.org>2018-09-18 17:41:58 -0500
committerWill Dietz <w@wdtz.org>2018-09-18 17:41:58 -0500
commit697859fdc562082eae339ccb8cb8c560ab97278d (patch)
tree168109313eccc04929d20ef2a1430ab5c22caf22 /pkgs/os-specific/linux/musl/tty-more-precise-errors.patch
parent4305e7d5ecee69b82101c0cb273fddf23aa5c6e2 (diff)
downloadnixlib-697859fdc562082eae339ccb8cb8c560ab97278d.tar
nixlib-697859fdc562082eae339ccb8cb8c560ab97278d.tar.gz
nixlib-697859fdc562082eae339ccb8cb8c560ab97278d.tar.bz2
nixlib-697859fdc562082eae339ccb8cb8c560ab97278d.tar.lz
nixlib-697859fdc562082eae339ccb8cb8c560ab97278d.tar.xz
nixlib-697859fdc562082eae339ccb8cb8c560ab97278d.tar.zst
nixlib-697859fdc562082eae339ccb8cb8c560ab97278d.zip
musl: apply other upstream fixes, selected for relevance to NixOS usage
Diffstat (limited to 'pkgs/os-specific/linux/musl/tty-more-precise-errors.patch')
-rw-r--r--pkgs/os-specific/linux/musl/tty-more-precise-errors.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/musl/tty-more-precise-errors.patch b/pkgs/os-specific/linux/musl/tty-more-precise-errors.patch
new file mode 100644
index 000000000000..06b108559e46
--- /dev/null
+++ b/pkgs/os-specific/linux/musl/tty-more-precise-errors.patch
@@ -0,0 +1,51 @@
+From c84971995b3a6d5118f9357c040572f4c78bcd55 Mon Sep 17 00:00:00 2001
+From: Benjamin Peterson <benjamin@python.org>
+Date: Thu, 13 Sep 2018 14:23:42 -0700
+Subject: 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.
+---
+ src/unistd/isatty.c    | 6 +++++-
+ 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);
+-- 
+cgit v1.2.1
+