guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/14: build: syscalls: Add setns syscall wrapper.


From: David Thompson
Subject: 02/14: build: syscalls: Add setns syscall wrapper.
Date: Tue, 30 Jun 2015 01:54:05 +0000

davexunit pushed a commit to branch wip-container
in repository guix.

commit 02f7ba82814c72e23f6a4f31b5a6fb067def3a9b
Author: David Thompson <address@hidden>
Date:   Mon Jun 8 08:43:05 2015 -0400

    build: syscalls: Add setns syscall wrapper.
    
    * guix/build/syscalls.scm (setns): New procedure.
---
 guix/build/syscalls.scm |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 3346358..6794d9d 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -45,6 +45,7 @@
             CLONE_NEWPID
             CLONE_NEWNET
             clone
+            setns
 
             IFF_UP
             IFF_BROADCAST
@@ -279,6 +280,20 @@ 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
+  (let* ((ptr  (dynamic-func "setns" (dynamic-link)))
+         (proc (pointer->procedure int ptr (list int int))))
+    (lambda (fdes nstype)
+      "Reassociate the current process with the namespace specified by FDES.
+NSTYPE specifies which type of namespace the current process may be
+reassociated with, or 0 if there is no such limitation."
+      (let ((ret (proc fdes nstype))
+            (err (errno)))
+        (unless (zero? ret)
+          (throw 'system-error "setns" "~d ~d: ~A"
+                 (list fdes nstype (strerror err))
+                 (list err)))))))
+
 
 ;;;
 ;;; Packed structures.



reply via email to

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