49 lines
1.3 KiB
Factor
49 lines
1.3 KiB
Factor
! Copyright (C) 2005, 2008 Slava Pestov, Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: accessors byte-arrays continuations destructors environment
|
|
io.backend.unix io.files io.files.private io.pathnames io.ports kernel
|
|
libc literals math system unix unix.ffi ;
|
|
IN: io.files.unix
|
|
|
|
: (cwd) ( bufsiz -- path )
|
|
[
|
|
dup <byte-array> over [ getcwd ] unix-system-call nip
|
|
] [
|
|
dup errno>> ERANGE = [
|
|
drop 2 * (cwd)
|
|
] [ rethrow ] if
|
|
] recover ;
|
|
|
|
M: unix cwd ( -- path )
|
|
4096 (cwd) ;
|
|
|
|
M: unix cd ( path -- ) [ chdir ] unix-system-call drop ;
|
|
|
|
CONSTANT: read-flags flags{ O_RDONLY }
|
|
|
|
: open-read ( path -- fd ) read-flags file-mode open-file ;
|
|
|
|
M: unix (file-reader) ( path -- stream )
|
|
open-read <fd> init-fd <input-port> ;
|
|
|
|
CONSTANT: write-flags flags{ O_WRONLY O_CREAT O_TRUNC }
|
|
|
|
: open-write ( path -- fd )
|
|
write-flags file-mode open-file ;
|
|
|
|
M: unix (file-writer) ( path -- stream )
|
|
open-write <fd> init-fd <output-port> ;
|
|
|
|
CONSTANT: append-flags flags{ O_WRONLY O_APPEND O_CREAT }
|
|
|
|
: open-append ( path -- fd )
|
|
[
|
|
append-flags file-mode open-file |dispose
|
|
dup 0 SEEK_END [ lseek ] unix-system-call drop
|
|
] with-destructors ;
|
|
|
|
M: unix (file-appender) ( path -- stream )
|
|
open-append <fd> init-fd <output-port> ;
|
|
|
|
M: unix home "HOME" os-env ;
|