guix-commits
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]