aboutsummaryrefslogtreecommitdiff
path: root/guix/build/utils.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-12-11 14:57:55 +0100
committerLudovic Courtès <ludo@gnu.org>2020-12-13 22:47:56 +0100
commitb1e2ec008a463cc70fe15ee6c9e8b18dfa5e8e0d (patch)
tree8a3ff546ce2f1b862b03cf264409f84ed8def490 /guix/build/utils.scm
parent72809abc9e61eebbc51b8377827109d5f66754cf (diff)
downloadguix-b1e2ec008a463cc70fe15ee6c9e8b18dfa5e8e0d.tar
guix-b1e2ec008a463cc70fe15ee6c9e8b18dfa5e8e0d.tar.gz
utils: 'set-file-time' passes AT_SYMLINK_NOFOLLOW.
* guix/build/utils.scm (AT_SYMLINK_NOFOLLOW): New variable. (set-file-time): Use it.
Diffstat (limited to 'guix/build/utils.scm')
-rw-r--r--guix/build/utils.scm10
1 files changed, 9 insertions, 1 deletions
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 11ac6a8a7b..9965106c48 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -924,13 +924,21 @@ a thunk."
(min len buffer-size)
buffer-size))))))
+(define AT_SYMLINK_NOFOLLOW
+ ;; Guile 2.0 did not define this constant, hence this hack.
+ (let ((variable (module-variable the-root-module 'AT_SYMLINK_NOFOLLOW)))
+ (if variable
+ (variable-ref variable)
+ 256))) ;for GNU/Linux
+
(define (set-file-time file stat)
"Set the atime/mtime of FILE to that specified by STAT."
(utime file
(stat:atime stat)
(stat:mtime stat)
(stat:atimensec stat)
- (stat:mtimensec stat)))
+ (stat:mtimensec stat)
+ AT_SYMLINK_NOFOLLOW))
(define (get-char* p)
;; We call it `get-char', but that's really a binary version