From c2800b786f62c190b35e306e59af7a73a19094e0 Mon Sep 17 00:00:00 2001 From: Manolis Ragkousis Date: Fri, 21 Aug 2015 22:00:16 +0300 Subject: [PATCH] syscalls: Turn syscalls wrappers into procedures. * guix/build/syscalls.scm (mount, umount, swapon, swapoff, setns, pivot-root, clone): Turn into procedures. --- guix/build/syscalls.scm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index fc801a5..c65456f 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -182,7 +182,10 @@ (define MNT_EXPIRE 4) (define UMOUNT_NOFOLLOW 8) -(define mount +;; By turning the syscalls wrappers into procedures we can delegate their evaluation +;; till they are actually needed, thus enabling Guix to build on systems which the +;; syscalls are not available. +(define (mount) (let* ((ptr (dynamic-func "mount" (dynamic-link))) (proc (pointer->procedure int ptr `(* * * ,unsigned-long *)))) (lambda* (source target type #:optional (flags 0) options @@ -211,7 +214,7 @@ error." (when update-mtab? (augment-mtab source target type options)))))) -(define umount +(define (umount) (let* ((ptr (dynamic-func "umount2" (dynamic-link))) (proc (pointer->procedure int ptr `(* ,int)))) (lambda* (target #:optional (flags 0) @@ -239,7 +242,7 @@ constants from ." ((source mount-point _ ...) (loop (cons mount-point result)))))))))) -(define swapon +(define (swapon) (let* ((ptr (dynamic-func "swapon" (dynamic-link))) (proc (pointer->procedure int ptr (list '* int)))) (lambda* (device #:optional (flags 0)) @@ -251,7 +254,7 @@ constants from ." (list device (strerror err)) (list err))))))) -(define swapoff +(define (swapoff) (let* ((ptr (dynamic-func "swapoff" (dynamic-link))) (proc (pointer->procedure int ptr '(*)))) (lambda (device) @@ -312,7 +315,7 @@ string TMPL and return its file name. TMPL must end with 'XXXXXX'." ;; The libc interface to sys_clone is not useful for Scheme programs, so the ;; low-level system call is wrapped instead. -(define clone +(define (clone) (let* ((ptr (dynamic-func "syscall" (dynamic-link))) (proc (pointer->procedure int ptr (list int int '*))) ;; TODO: Don't do this. @@ -327,7 +330,7 @@ Unlike the fork system call, clone accepts FLAGS that specify which resources are shared between the parent and child processes." (proc syscall-id flags %null-pointer)))) -(define setns +(define (setns) ;; Some systems may be using an old (pre-2.14) version of glibc where there ;; is no 'setns' function available. (false-if-exception @@ -345,7 +348,7 @@ there is no such limitation." (list fdes nstype (strerror err)) (list err)))))))) -(define pivot-root +(define (pivot-root) (let* ((ptr (dynamic-func "pivot_root" (dynamic-link))) (proc (pointer->procedure int ptr (list '* '*)))) (lambda (new-root put-old) -- 2.5.0