[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[shepherd] 01/02: system: Remove errno handling code for Guile < 2.0.12.
From: |
Ludovic Courtès |
Subject: |
[shepherd] 01/02: system: Remove errno handling code for Guile < 2.0.12. |
Date: |
Sat, 23 May 2020 17:27:05 -0400 (EDT) |
civodul pushed a commit to branch master
in repository shepherd.
commit dc44e79552b6680f592c2444d9e546ab1ce91652
Author: Ludovic Courtès <address@hidden>
AuthorDate: Sat May 23 18:38:15 2020 +0200
system: Remove errno handling code for Guile < 2.0.12.
This is a followup to 766c4dccfa6e956a41d6e4d42d08d9b13a880d21.
* modules/shepherd/system.scm.in (syscall->procedure): Remove
'wrong-number-of-args' catch.
(%libc-errno-pointer, errno): Remove.
---
modules/shepherd/system.scm.in | 48 +++---------------------------------------
1 file changed, 3 insertions(+), 45 deletions(-)
diff --git a/modules/shepherd/system.scm.in b/modules/shepherd/system.scm.in
index adf303c..a003e32 100644
--- a/modules/shepherd/system.scm.in
+++ b/modules/shepherd/system.scm.in
@@ -46,19 +46,9 @@ If an error occurs while creating the binding, defer the
error report until
the returned procedure is called."
(catch #t
(lambda ()
- (let ((ptr (dynamic-func name (dynamic-link))))
- ;; The #:return-errno? facility was introduced in Guile 2.0.12.
- ;; Support older versions of Guile by catching 'wrong-number-of-args'.
- (catch 'wrong-number-of-args
- (lambda ()
- (pointer->procedure return-type ptr argument-types
- #:return-errno? #t))
- (lambda (key . rest)
- (let ((proc (pointer->procedure return-type ptr argument-types)))
- (lambda args
- (let ((result (apply proc args))
- (err (errno)))
- (values result err))))))))
+ (pointer->procedure return-type (dynamic-func name (dynamic-link))
+ argument-types
+ #:return-errno? #t))
(lambda args
(lambda _
(error (format #f "~a: syscall->procedure failed: ~s"
@@ -80,38 +70,6 @@ the returned procedure is called."
(list (strerror err) (howto->symbol howto))
(list err)))))))
-(define %libc-errno-pointer
- ;; Glibc's 'errno' pointer.
- (let ((errno-loc (dynamic-func "__errno_location" (dynamic-link))))
- (and errno-loc
- (let ((proc (pointer->procedure '* errno-loc '())))
- (proc)))))
-
-(define errno
- (if %libc-errno-pointer
- (let ((bv (pointer->bytevector %libc-errno-pointer (sizeof int))))
- (lambda ()
- "Return the current errno."
- ;; XXX: We assume that nothing changes 'errno' while we're doing all
this.
- ;; In particular, that means that no async must be running here.
-
- ;; Use one of the fixed-size native-ref procedures because they are
- ;; optimized down to a single VM instruction, which reduces the risk
- ;; that we fiddle with 'errno' (needed on Guile 2.0.5, libc 2.11.)
- (let-syntax ((ref (lambda (s)
- (syntax-case s ()
- ((_ bv)
- (case (sizeof int)
- ((4)
- #'(bytevector-s32-native-ref bv 0))
- ((8)
- #'(bytevector-s64-native-ref bv 0))
- (else
- (error "unsupported 'int' size"
- (sizeof int)))))))))
- (ref bv))))
- (lambda () 0)))
-
(define (disable-reboot-on-ctrl-alt-del)
"Disable hard reboot upon ctrl-alt-del. Instead, the kernel Linux will send
SIGINT to PID 1, which is responsible for cleaning things up gracefully. See