summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/build/syscalls.scm5
-rw-r--r--tests/syscalls.scm7
2 files changed, 8 insertions, 4 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index d168293ee4..6cdf65304d 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -1034,7 +1034,10 @@ always a positive integer."
(fall-back)))
(lambda args
(let ((errno (system-error-errno args)))
- (if (= errno ENOTTY)
+ ;; ENOTTY is what we're after but 2012-and-earlier Linux versions
+ ;; would return EINVAL instead in some cases:
+ ;; <https://bugs.ruby-lang.org/issues/10494>.
+ (if (or (= errno ENOTTY) (= errno EINVAL))
(fall-back)
(apply throw args))))))
diff --git a/tests/syscalls.scm b/tests/syscalls.scm
index 895f90f4d8..71bcbc4d32 100644
--- a/tests/syscalls.scm
+++ b/tests/syscalls.scm
@@ -259,15 +259,16 @@
(#f #f)
(lo (interface-address lo)))))))
-(test-equal "terminal-window-size ENOTTY"
- ENOTTY
+(test-assert "terminal-window-size ENOTTY"
(call-with-input-file "/dev/null"
(lambda (port)
(catch 'system-error
(lambda ()
(terminal-window-size port))
(lambda args
- (system-error-errno args))))))
+ ;; Accept EINVAL, which some old Linux versions might return.
+ (memv (system-error-errno args)
+ (list ENOTTY EINVAL)))))))
(test-assert "terminal-columns"
(> (terminal-columns) 0))