1 ! Copyright (C) 2008 Slava Pestov, Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors io.backend io.files.info io.files.types
4 io.pathnames kernel math namespaces system vocabs vocabs.platforms ;
7 HOOK: make-link os ( target symlink -- )
9 HOOK: make-hard-link os ( target link -- )
11 HOOK: read-link os ( symlink -- path )
13 : copy-link ( target symlink -- )
14 [ read-link ] dip make-link ;
16 : follow-link ( path -- path' )
17 [ parent-directory ] [ read-link ] bi append-path ;
20 10 symlink-depth set-global
22 ERROR: too-many-symlinks path n ;
26 : (follow-links) ( n path -- path' )
27 over 0 = [ symlink-depth get too-many-symlinks ] when
28 dup link-info symbolic-link?
29 [ [ 1 - ] [ follow-link ] bi* (follow-links) ]
30 [ nip ] if ; inline recursive
34 : follow-links ( path -- path' )
35 [ symlink-depth get ] dip normalize-path (follow-links) ;
37 USE-UNIX: io.files.links.unix