USING: accessors arrays calendar continuations grouping io.directories
io.files.info io.files.info.unix io.files.temp io.files.unix
io.pathnames kernel literals math math.bitwise math.functions
-sequences strings tools.test unix.groups unix.users ;
+sequences strings system tools.test unix unix.groups unix.users ;
IN: io.files.unix.tests
{ "/usr/libexec/" } [ "/usr/libexec/awk/" parent-directory ] unit-test
{ f } [ 0 other-execute? ] unit-test
! (cwd)
-{ t } [
- 1 (cwd) string?
-] unit-test
+{ t } [ 1 (cwd) string? ] unit-test
+
+os linux? [
+ { t } [ "/proc/self/exe" read-symbolic-link string? ] unit-test
+] when
! Copyright (C) 2005, 2010 Slava Pestov.
! Copyright (C) 2008 Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.syntax byte-vectors
-classes.struct combinators.short-circuit combinators.smart
-generalizations kernel libc locals math sequences
-sequences.generalizations strings system unix.ffi vocabs.loader
-;
+USING: accessors alien.c-types alien.syntax byte-arrays classes.struct
+combinators.short-circuit combinators.smart generalizations kernel
+libc locals math sequences sequences.generalizations strings system
+unix.ffi vocabs.loader ;
IN: unix
ERROR: unix-system-call-error args errno message word ;
swap >>actime
[ utime ] unix-system-call drop ;
+: (read-symbolic-link) ( path bufsiz -- path' )
+ dup <byte-array> 3dup swap [ readlink ] unix-system-call
+ pick dupd < [ head >string 2nip ] [
+ 2nip 2 * (read-symbolic-link)
+ ] if ;
+
: read-symbolic-link ( path -- path )
- PATH_MAX <byte-vector> [
- underlying>> PATH_MAX
- [ readlink ] unix-system-call
- ] keep swap >>length >string ;
+ 4096 (read-symbolic-link) ;
: unlink-file ( path -- ) [ unlink ] unix-system-call drop ;