syscalls: Define AT_SYMLINK_NOFOLLOW et al.
* guix/build/syscalls.scm (AT_FDCWD, AT_SYMLINK_NOFOLLOW, AT_REMOVEDIR) (AT_SYMLINK_FOLLOW, AT_NO_AUTOMOUNT, AT_EMPTY_PATH): New variables. * tests/syscalls.scm ("utime with AT_SYMLINK_NOFOLLOW"): New test.
This commit is contained in:
parent
a5b34d9d24
commit
25c7ff6a3e
@ -46,6 +46,14 @@
|
||||
MNT_DETACH
|
||||
MNT_EXPIRE
|
||||
UMOUNT_NOFOLLOW
|
||||
|
||||
AT_FDCWD
|
||||
AT_SYMLINK_NOFOLLOW
|
||||
AT_REMOVEDIR
|
||||
AT_SYMLINK_FOLLOW
|
||||
AT_NO_AUTOMOUNT
|
||||
AT_EMPTY_PATH
|
||||
|
||||
restart-on-EINTR
|
||||
mount-points
|
||||
swapon
|
||||
@ -667,6 +675,15 @@ mounted at FILE."
|
||||
(* (file-system-block-size fs)
|
||||
(file-system-blocks-available fs))))
|
||||
|
||||
;; Flags for the *at command, notably the 'utime' procedure of libguile.
|
||||
;; From <fcntl.h>.
|
||||
(define AT_FDCWD -100)
|
||||
(define AT_SYMLINK_NOFOLLOW #x100)
|
||||
(define AT_REMOVEDIR #x200)
|
||||
(define AT_SYMLINK_FOLLOW #x400)
|
||||
(define AT_NO_AUTOMOUNT #x800)
|
||||
(define AT_EMPTY_PATH #x1000)
|
||||
|
||||
|
||||
;;;
|
||||
;;; Containers.
|
||||
|
@ -60,6 +60,19 @@
|
||||
(any (cute member <> (mount-points))
|
||||
'("/" "/proc" "/sys" "/dev")))
|
||||
|
||||
(false-if-exception (delete-file temp-file))
|
||||
(test-equal "utime with AT_SYMLINK_NOFOLLOW"
|
||||
'(0 0)
|
||||
(begin
|
||||
;; Test libguile's utime with AT_SYMLINK_NOFOLLOW, which libguile does not
|
||||
;; define as of Guile 2.2.4.
|
||||
(symlink "/nowhere" temp-file)
|
||||
(utime temp-file 0 0 0 0 AT_SYMLINK_NOFOLLOW)
|
||||
(let ((st (lstat temp-file)))
|
||||
(delete-file temp-file)
|
||||
;; Note: 'utimensat' does not change 'ctime'.
|
||||
(list (stat:mtime st) (stat:atime st)))))
|
||||
|
||||
(test-assert "swapon, ENOENT/EPERM"
|
||||
(catch 'system-error
|
||||
(lambda ()
|
||||
|
Loading…
Reference in New Issue
Block a user