gnu: ld-wrapper2: Make 'readlink*' tail-recursive.
* gnu/packages/ld-wrapper2.in (readlink*): Make tail-recursive.
This commit is contained in:
parent
5763ad9266
commit
07c0b6e082
1 changed files with 16 additions and 10 deletions
|
|
@ -97,16 +97,22 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
|
||||||
target
|
target
|
||||||
(string-append (dirname file) "/" target)))
|
(string-append (dirname file) "/" target)))
|
||||||
|
|
||||||
(catch 'system-error
|
(if (>= depth %max-symlink-depth)
|
||||||
(lambda ()
|
file
|
||||||
(if (>= depth %max-symlink-depth)
|
(call-with-values
|
||||||
file
|
(lambda ()
|
||||||
(loop (absolute (readlink file)) (+ depth 1))))
|
(catch 'system-error
|
||||||
(lambda args
|
(lambda ()
|
||||||
(let ((errno (system-error-errno args)))
|
(values #t (readlink file)))
|
||||||
(if (or (= errno EINVAL) (= errno ENOENT))
|
(lambda args
|
||||||
file
|
(let ((errno (system-error-errno args)))
|
||||||
(apply throw args)))))))
|
(if (or (= errno EINVAL) (= errno ENOENT))
|
||||||
|
(values #f file)
|
||||||
|
(apply throw args))))))
|
||||||
|
(lambda (success? target)
|
||||||
|
(if success?
|
||||||
|
(loop (absolute target) (+ depth 1))
|
||||||
|
file))))))
|
||||||
|
|
||||||
(define (pure-file-name? file)
|
(define (pure-file-name? file)
|
||||||
;; Return #t when FILE is the name of a file either within the store
|
;; Return #t when FILE is the name of a file either within the store
|
||||||
|
|
|
||||||
Reference in a new issue