Skip to content
Snippets Groups Projects
Commit b4abdeb6 authored by David Thompson's avatar David Thompson Committed by David Thompson
Browse files

build: syscalls: Add mkdtemp!

* guix/build/syscalls.scm (mkdtemp!): New procedure.
* tests/syscalls.scm ("mkdtemp!"): New test.
parent b16d138a
No related branches found
No related tags found
No related merge requests found
......@@ -45,6 +45,7 @@ (define-module (guix build syscalls)
swapon
swapoff
processes
mkdtemp!
IFF_UP
IFF_BROADCAST
......@@ -265,6 +266,20 @@ (define (processes)
(scandir "/proc"))
<))
(define mkdtemp!
(let* ((ptr (dynamic-func "mkdtemp" (dynamic-link)))
(proc (pointer->procedure '* ptr '(*))))
(lambda (tmpl)
"Create a new unique directory in the file system using the template
string TMPL and return its file name. TMPL must end with 'XXXXXX'."
(let ((result (proc (string->pointer tmpl)))
(err (errno)))
(when (null-pointer? result)
(throw 'system-error "mkdtemp!" "~S: ~A"
(list tmpl (strerror err))
(list err)))
(pointer->string result)))))
;;;
;;; Packed structures.
......
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
......@@ -67,6 +68,14 @@ (define-module (test-syscalls)
(lambda args
(memv (system-error-errno args) (list EPERM EINVAL ENOENT)))))
(test-assert "mkdtemp!"
(let* ((tmp (or (getenv "TMPDIR") "/tmp"))
(dir (mkdtemp! (string-append tmp "/guix-test-XXXXXX"))))
(and (file-exists? dir)
(begin
(rmdir dir)
#t))))
(test-assert "all-network-interfaces"
(match (all-network-interfaces)
(((? string? names) ..1)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment