diff options
author | Tomas Volf <~@wolfsden.cz> | 2025-05-18 15:39:35 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2025-05-18 22:55:54 +0200 |
commit | 7a888d98415da19dd45653dac78c41ee738ec253 (patch) | |
tree | e3ff77d091b52c1d8ed16a192f24ed6d7122a315 | |
parent | 8654aecf741e88ce882f82f2eebc594e2e7ccb3f (diff) | |
download | guix-7a888d98415da19dd45653dac78c41ee738ec253.tar.gz guix-7a888d98415da19dd45653dac78c41ee738ec253.zip |
environment: Translate only file names under home directory.
* guix/scripts/environment.scm (file-name-equal-or-under?): New procedure.
(override-user-mappings, override-user-dir): Use it.
Change-Id: Iadd9b838f6442a8080998ed7e07414db562068bf
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r-- | guix/scripts/environment.scm | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index 3c66906793..bc06e97d7b 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -979,6 +979,12 @@ WHILE-LIST." "Return home directory for override user USER." (string-append "/home/" user)) +(define (file-name-equal-or-under? file-name directory) + "Is @var{file-name} equal to or under @var{directory}?" + (or (string=? directory file-name) + (and (string-prefix? directory file-name) + (char=? #\/ (string-ref file-name (string-length directory)))))) + (define (override-user-mappings user home mappings) "If a username USER is provided, rewrite each HOME prefix in file system mappings MAPPINGS to a home directory determined by 'override-user-dir'; @@ -987,7 +993,7 @@ otherwise, return MAPPINGS." mappings (map (lambda (mapping) (let ((target (file-system-mapping-target mapping))) - (if (string-prefix? home target) + (if (file-name-equal-or-under? target home) (file-system-mapping (inherit mapping) (target (override-user-dir user home target))) @@ -997,7 +1003,7 @@ otherwise, return MAPPINGS." (define (override-user-dir user home dir) "If username USER is provided, overwrite string prefix HOME in DIR with a directory determined by 'user-override-home'; otherwise, return DIR." - (if (and user (string-prefix? home dir)) + (if (and user (file-name-equal-or-under? dir home)) (string-append (user-override-home user) (substring dir (string-length home))) dir)) |