factor/extra/io/unix/files/files.factor

71 lines
1.7 KiB
Factor
Raw Normal View History

! Copyright (C) 2005, 2008 Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: io.backend io.nonblocking io.unix.backend io.files io
unix unix.stat kernel math continuations math.bitfields byte-arrays
2008-02-05 18:31:27 -05:00
alien ;
2007-09-20 18:09:08 -04:00
IN: io.unix.files
M: unix-io cwd
2008-02-06 00:14:10 -05:00
MAXPATHLEN dup <byte-array> swap
getcwd [ (io-error) ] unless* ;
M: unix-io cd
chdir io-error ;
: read-flags O_RDONLY ; inline
2007-09-20 18:09:08 -04:00
: open-read ( path -- fd )
O_RDONLY file-mode open dup io-error ;
M: unix-io <file-reader> ( path -- stream )
open-read <reader> ;
2008-02-02 14:29:09 -05:00
: write-flags { O_WRONLY O_CREAT O_TRUNC } flags ; inline
2007-09-20 18:09:08 -04:00
: open-write ( path -- fd )
write-flags file-mode open dup io-error ;
M: unix-io <file-writer> ( path -- stream )
open-write <writer> ;
2008-02-02 14:29:09 -05:00
: append-flags { O_WRONLY O_APPEND O_CREAT } flags ; inline
2007-09-20 18:09:08 -04:00
: open-append ( path -- fd )
append-flags file-mode open dup io-error
[ dup 0 SEEK_END lseek io-error ] [ ] [ close ] cleanup ;
M: unix-io <file-appender> ( path -- stream )
open-append <writer> ;
2008-02-27 15:59:15 -05:00
: touch-mode
{ O_WRONLY O_APPEND O_CREAT O_EXCL } flags ; foldable
M: unix-io touch-file ( path -- )
touch-mode file-mode open
dup 0 < [ err_no EEXIST = [ err_no io-error ] unless ] when
close ;
M: unix-io move-file ( from to -- )
2007-09-20 18:09:08 -04:00
rename io-error ;
M: unix-io delete-file ( path -- )
unlink io-error ;
M: unix-io make-directory ( path -- )
OCT: 777 mkdir io-error ;
M: unix-io delete-directory ( path -- )
rmdir io-error ;
2008-02-27 15:59:15 -05:00
: (copy-file) ( from to -- )
dup parent-directory make-directories
<file-writer> [
swap <file-reader> [
swap stream-copy
] with-disposal
] with-disposal ;
M: unix-io copy-file ( from to -- )
2008-02-27 17:31:13 -05:00
>r dup file-permissions over r> (copy-file) chmod io-error ;