! Copyright (C) 2005, 2010 Slava Pestov.
! Copyright (C) 2008 Eduardo Cavazos.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien alien.c-types alien.libraries
-alien.syntax byte-vectors classes.struct combinators
-combinators.short-circuit combinators.smart continuations
-generalizations io kernel libc locals macros math namespaces
-sequences sequences.generalizations stack-checker strings system
-unix.time unix.types vocabs vocabs.loader unix.ffi ;
+! See https://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.syntax byte-arrays
+combinators.short-circuit combinators.smart generalizations kernel
+libc math sequences sequences.generalizations strings system
+unix.ffi vocabs.loader ;
IN: unix
ERROR: unix-system-call-error args errno message word ;
[ not ]
} 1|| ;
-MACRO:: unix-system-call ( quot -- )
+MACRO:: unix-system-call ( quot -- quot )
quot inputs :> n
quot first :> word
0 :> ret!
] if
] ;
-MACRO:: unix-system-call-allow-eintr ( quot -- )
+MACRO:: unix-system-call-allow-eintr ( quot -- quot )
quot inputs :> n
quot first :> word
0 :> ret!
: close-file ( fd -- ) [ close ] unix-system-call-allow-eintr drop ;
-FUNCTION: int _exit ( int status ) ;
+FUNCTION: int _exit ( int status )
M: unix open-file [ open ] unix-system-call ;
: make-fifo ( path mode -- ) [ mkfifo ] unix-system-call drop ;
-: truncate-file ( path n -- ) [ truncate ] unix-system-call drop ;
-
: touch ( filename -- ) f [ utime ] unix-system-call drop ;
: change-file-times ( filename access modification -- )
- utimbuf <struct>
+ utimbuf new
swap >>modtime
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 ;
-<<
-
{ "unix" "debugger" } "unix.debugger" require-when
-
->>