Merge branch 'master' of git://factorcode.org/git/factor
commit
5c10f390c7
|
@ -2,28 +2,28 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.c-types combinators destructors
|
USING: accessors alien.c-types combinators destructors
|
||||||
io.backend.unix kernel math.bitwise sequences struct-arrays unix
|
io.backend.unix kernel math.bitwise sequences struct-arrays unix
|
||||||
unix.kqueue unix.time assocs io.backend.unix.multiplexers ;
|
unix.kqueue unix.time assocs io.backend.unix.multiplexers
|
||||||
|
classes.struct ;
|
||||||
IN: io.backend.unix.multiplexers.kqueue
|
IN: io.backend.unix.multiplexers.kqueue
|
||||||
|
|
||||||
TUPLE: kqueue-mx < mx events ;
|
TUPLE: kqueue-mx < mx events ;
|
||||||
|
|
||||||
: max-events ( -- n )
|
! We read up to 256 events at a time. This is an arbitrary
|
||||||
#! We read up to 256 events at a time. This is an arbitrary
|
! constant...
|
||||||
#! constant...
|
CONSTANT: max-events 256
|
||||||
256 ; inline
|
|
||||||
|
|
||||||
: <kqueue-mx> ( -- mx )
|
: <kqueue-mx> ( -- mx )
|
||||||
kqueue-mx new-mx
|
kqueue-mx new-mx
|
||||||
kqueue dup io-error >>fd
|
kqueue dup io-error >>fd
|
||||||
max-events "kevent" <struct-array> >>events ;
|
max-events \ kevent <struct-array> >>events ;
|
||||||
|
|
||||||
M: kqueue-mx dispose* fd>> close-file ;
|
M: kqueue-mx dispose* fd>> close-file ;
|
||||||
|
|
||||||
: make-kevent ( fd filter flags -- event )
|
: make-kevent ( fd filter flags -- event )
|
||||||
"kevent" <c-object>
|
\ kevent <struct>
|
||||||
[ set-kevent-flags ] keep
|
swap >>flags
|
||||||
[ set-kevent-filter ] keep
|
swap >>filter
|
||||||
[ set-kevent-ident ] keep ;
|
swap >>ident ;
|
||||||
|
|
||||||
: register-kevent ( kevent mx -- )
|
: register-kevent ( kevent mx -- )
|
||||||
fd>> swap 1 f 0 f kevent io-error ;
|
fd>> swap 1 f 0 f kevent io-error ;
|
||||||
|
@ -63,13 +63,14 @@ M: kqueue-mx remove-output-callbacks ( fd mx -- seq )
|
||||||
] dip kevent multiplexer-error ;
|
] dip kevent multiplexer-error ;
|
||||||
|
|
||||||
: handle-kevent ( mx kevent -- )
|
: handle-kevent ( mx kevent -- )
|
||||||
[ kevent-ident swap ] [ kevent-filter ] bi {
|
[ ident>> swap ] [ filter>> ] bi {
|
||||||
{ EVFILT_READ [ input-available ] }
|
{ EVFILT_READ [ input-available ] }
|
||||||
{ EVFILT_WRITE [ output-available ] }
|
{ EVFILT_WRITE [ output-available ] }
|
||||||
} case ;
|
} case ;
|
||||||
|
|
||||||
: handle-kevents ( mx n -- )
|
: handle-kevents ( mx n -- )
|
||||||
[ dup events>> ] dip head-slice [ handle-kevent ] with each ;
|
[ dup events>> ] dip head-slice
|
||||||
|
[ \ kevent memory>struct handle-kevent ] with each ;
|
||||||
|
|
||||||
M: kqueue-mx wait-for-events ( us mx -- )
|
M: kqueue-mx wait-for-events ( us mx -- )
|
||||||
swap dup [ make-timespec ] when
|
swap dup [ make-timespec ] when
|
||||||
|
|
|
@ -47,6 +47,6 @@ M: openbsd statvfs>file-system-info ( file-system-info statvfs -- file-system-in
|
||||||
|
|
||||||
M: openbsd file-systems ( -- seq )
|
M: openbsd file-systems ( -- seq )
|
||||||
f 0 0 getfsstat dup io-error
|
f 0 0 getfsstat dup io-error
|
||||||
statfs <c-type-array> dup dup length 0 getfsstat io-error
|
\ statfs <c-type-array> dup dup length 0 getfsstat io-error
|
||||||
statfs heap-size group
|
\ statfs heap-size group
|
||||||
[ f_mntonname>> alien>native-string file-system-info ] map ;
|
[ f_mntonname>> alien>native-string file-system-info ] map ;
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax classes.struct ;
|
||||||
IN: unix.kqueue
|
IN: unix.kqueue
|
||||||
|
|
||||||
C-STRUCT: kevent
|
STRUCT: kevent
|
||||||
{ "ulong" "ident" } ! identifier for this event
|
{ ident ulong }
|
||||||
{ "short" "filter" } ! filter for event
|
{ filter short }
|
||||||
{ "ushort" "flags" } ! action flags for kqueue
|
{ flags ushort }
|
||||||
{ "uint" "fflags" } ! filter flag value
|
{ fflags uint }
|
||||||
{ "long" "data" } ! filter data value
|
{ data long }
|
||||||
{ "void*" "udata" } ! opaque user data identifier
|
{ udata void* } ;
|
||||||
;
|
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax classes.struct ;
|
||||||
IN: unix.kqueue
|
IN: unix.kqueue
|
||||||
|
|
||||||
C-STRUCT: kevent
|
STRUCT: kevent
|
||||||
{ "ulong" "ident" } ! identifier for this event
|
{ ident ulong }
|
||||||
{ "short" "filter" } ! filter for event
|
{ filter short }
|
||||||
{ "ushort" "flags" } ! action flags for kqueue
|
{ flags ushort }
|
||||||
{ "uint" "fflags" } ! filter flag value
|
{ fflags uint }
|
||||||
{ "long" "data" } ! filter data value
|
{ data long }
|
||||||
{ "void*" "udata" } ! opaque user data identifier
|
{ udata void* } ;
|
||||||
;
|
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax classes.struct ;
|
||||||
IN: unix.kqueue
|
IN: unix.kqueue
|
||||||
|
|
||||||
C-STRUCT: kevent
|
STRUCT: kevent
|
||||||
{ "ulong" "ident" } ! identifier for this event
|
{ ident ulong }
|
||||||
{ "uint" "filter" } ! filter for event
|
{ filter uint }
|
||||||
{ "uint" "flags" } ! action flags for kqueue
|
{ flags uint }
|
||||||
{ "uint" "fflags" } ! filter flag value
|
{ fflags uint }
|
||||||
{ "longlong" "data" } ! filter data value
|
{ data longlong }
|
||||||
{ "void*" "udata" } ! opaque user data identifier
|
{ udata void* } ;
|
||||||
;
|
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax classes.struct ;
|
||||||
IN: unix.kqueue
|
IN: unix.kqueue
|
||||||
|
|
||||||
C-STRUCT: kevent
|
STRUCT: kevent
|
||||||
{ "uint" "ident" } ! identifier for this event
|
{ ident uint }
|
||||||
{ "short" "filter" } ! filter for event
|
{ filter short }
|
||||||
{ "ushort" "flags" } ! action flags for kqueue
|
{ flags ushort }
|
||||||
{ "uint" "fflags" } ! filter flag value
|
{ fflags uint }
|
||||||
{ "int" "data" } ! filter data value
|
{ data int }
|
||||||
{ "void*" "udata" } ! opaque user data identifier
|
{ udata void* } ;
|
||||||
;
|
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
||||||
|
|
||||||
|
|
|
@ -18,10 +18,10 @@ STRUCT: stat
|
||||||
{ st_blocks blkcnt_t }
|
{ st_blocks blkcnt_t }
|
||||||
{ st_blksize blksize_t }
|
{ st_blksize blksize_t }
|
||||||
{ st_flags fflags_t }
|
{ st_flags fflags_t }
|
||||||
{ st_gen _uint32_t }
|
{ st_gen __uint32_t }
|
||||||
{ st_lspare __int32_t }
|
{ st_lspare __int32_t }
|
||||||
{ st_birthtimespec timespec }
|
{ st_birthtimespec timespec }
|
||||||
{ pad0 __int32_t[2] }
|
{ pad0 __int32_t[2] } ;
|
||||||
|
|
||||||
FUNCTION: int stat ( char* pathname, stat* buf ) ;
|
FUNCTION: int stat ( char* pathname, stat* buf ) ;
|
||||||
FUNCTION: int lstat ( char* pathname, stat* buf ) ;
|
FUNCTION: int lstat ( char* pathname, stat* buf ) ;
|
||||||
|
|
Loading…
Reference in New Issue