mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 13:28:12 -05:00
syscalls: Add 'swapon' and 'swapoff'.
* guix/build/syscalls.scm (swapon, swapoff): New procedures. * tests/syscalls.scm ("swapon, ENOENT/EPERM", "swapoff, EINVAL/EPERM"): New tests.
This commit is contained in:
parent
510f9d8624
commit
715fc9d44d
2 changed files with 42 additions and 0 deletions
|
@ -31,6 +31,8 @@ (define-module (guix build syscalls)
|
|||
MS_MOVE
|
||||
mount
|
||||
umount
|
||||
swapon
|
||||
swapoff
|
||||
processes
|
||||
|
||||
IFF_UP
|
||||
|
@ -164,6 +166,30 @@ (define umount
|
|||
(when update-mtab?
|
||||
(remove-from-mtab target))))))
|
||||
|
||||
(define swapon
|
||||
(let* ((ptr (dynamic-func "swapon" (dynamic-link)))
|
||||
(proc (pointer->procedure int ptr (list '* int))))
|
||||
(lambda* (device #:optional (flags 0))
|
||||
"Use the block special device at DEVICE for swapping."
|
||||
(let ((ret (proc (string->pointer device) flags))
|
||||
(err (errno)))
|
||||
(unless (zero? ret)
|
||||
(throw 'system-error "swapon" "~S: ~A"
|
||||
(list device (strerror err))
|
||||
(list err)))))))
|
||||
|
||||
(define swapoff
|
||||
(let* ((ptr (dynamic-func "swapoff" (dynamic-link)))
|
||||
(proc (pointer->procedure int ptr '(*))))
|
||||
(lambda (device)
|
||||
"Stop using block special device DEVICE for swapping."
|
||||
(let ((ret (proc (string->pointer device)))
|
||||
(err (errno)))
|
||||
(unless (zero? ret)
|
||||
(throw 'system-error "swapff" "~S: ~A"
|
||||
(list device (strerror err))
|
||||
(list err)))))))
|
||||
|
||||
(define (kernel? pid)
|
||||
"Return #t if PID designates a \"kernel thread\" rather than a normal
|
||||
user-land process."
|
||||
|
|
|
@ -44,6 +44,22 @@ (define-module (test-syscalls)
|
|||
;; Both return values have been encountered in the wild.
|
||||
(memv (system-error-errno args) (list EPERM ENOENT)))))
|
||||
|
||||
(test-assert "swapon, ENOENT/EPERM"
|
||||
(catch 'system-error
|
||||
(lambda ()
|
||||
(swapon "/does-not-exist")
|
||||
#f)
|
||||
(lambda args
|
||||
(memv (system-error-errno args) (list EPERM ENOENT)))))
|
||||
|
||||
(test-assert "swapoff, EINVAL/EPERM"
|
||||
(catch 'system-error
|
||||
(lambda ()
|
||||
(swapoff "/does-not-exist")
|
||||
#f)
|
||||
(lambda args
|
||||
(memv (system-error-errno args) (list EPERM EINVAL)))))
|
||||
|
||||
(test-assert "all-network-interfaces"
|
||||
(match (all-network-interfaces)
|
||||
(((? string? names) ..1)
|
||||
|
|
Loading…
Reference in a new issue