summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-02-18 17:31:10 +0100
committerLudovic Courtès <ludo@gnu.org>2022-03-10 11:43:14 +0100
commita3a76a8384e9f9b6e86b5dbe58ba1421101a87a3 (patch)
tree327f6dd9aa4a9a5db4615a49d5d3ccad767af929 /gnu
parenta81bb1e4bb838210eed7d63ad5bf89ae9dd72eda (diff)
downloadguix-a3a76a8384e9f9b6e86b5dbe58ba1421101a87a3.tar.gz
home: symlink-manager: Avoid extra 'lstat' call.
* gnu/home/services/symlink-manager.scm (update-symlinks-script)[symlink-to-store?]:
Avoid extra 'lstat' call.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/home/services/symlink-manager.scm9
1 files changed, 7 insertions, 2 deletions
diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm
index 6b3a9de3d1..ba42424e8e 100644
--- a/gnu/home/services/symlink-manager.scm
+++ b/gnu/home/services/symlink-manager.scm
@@ -103,8 +103,13 @@ appear only after all nested items already listed."
            (string-append backup-dir "/." path))
 
          (define (symlink-to-store? path)
-           (and (equal? (stat:type (lstat path)) 'symlink)
-                (store-file-name? (readlink path))))
+           (catch 'system-error
+             (lambda ()
+               (store-file-name? (readlink path)))
+             (lambda args
+               (if (= EINVAL (system-error-errno args))
+                   #f
+                   (apply throw args)))))
 
          (define (backup-file path)
            (mkdir-p backup-dir)