Use new-style structs for overlapped struct on Windows

db4
Slava Pestov 2009-09-05 16:20:58 -05:00
parent 9881332ddb
commit 75f7e27c6c
2 changed files with 12 additions and 11 deletions

View File

@ -14,11 +14,11 @@ TUPLE: io-callback port thread ;
C: <io-callback> io-callback C: <io-callback> io-callback
: (make-overlapped) ( -- overlapped-ext ) : (make-overlapped) ( -- overlapped-ext )
"OVERLAPPED" malloc-object &free ; OVERLAPPED malloc-struct &free ;
: make-overlapped ( port -- overlapped-ext ) : make-overlapped ( port -- overlapped-ext )
[ (make-overlapped) ] dip [ (make-overlapped) ] dip
handle>> ptr>> [ over set-OVERLAPPED-offset ] when* ; handle>> ptr>> [ >>offset ] when* ;
M: winnt FileArgs-overlapped ( port -- overlapped ) M: winnt FileArgs-overlapped ( port -- overlapped )
make-overlapped ; make-overlapped ;
@ -40,7 +40,7 @@ M: winnt add-completion ( win32-handle -- )
: twiddle-thumbs ( overlapped port -- bytes-transferred ) : twiddle-thumbs ( overlapped port -- bytes-transferred )
[ [
drop drop
[ pending-overlapped get-global set-at ] curry "I/O" suspend [ >c-ptr pending-overlapped get-global set-at ] curry "I/O" suspend
{ {
{ [ dup integer? ] [ ] } { [ dup integer? ] [ ] }
{ [ dup array? ] [ { [ dup array? ] [
@ -57,11 +57,12 @@ M: winnt add-completion ( win32-handle -- )
f <void*> [ ! overlapped f <void*> [ ! overlapped
us [ 1000 /i ] [ INFINITE ] if* ! timeout us [ 1000 /i ] [ INFINITE ] if* ! timeout
GetQueuedCompletionStatus zero? GetQueuedCompletionStatus zero?
] keep *void* ] keep
*void* dup [ OVERLAPPED memory>struct ] when
] keep *int spin ; ] keep *int spin ;
: resume-callback ( result overlapped -- ) : resume-callback ( result overlapped -- )
pending-overlapped get-global delete-at* drop resume-with ; >c-ptr pending-overlapped get-global delete-at* drop resume-with ;
: handle-overlapped ( us -- ? ) : handle-overlapped ( us -- ? )
wait-for-overlapped [ wait-for-overlapped [

View File

@ -210,12 +210,12 @@ C-ENUM:
TYPEDEF: uint COMPUTER_NAME_FORMAT TYPEDEF: uint COMPUTER_NAME_FORMAT
C-STRUCT: OVERLAPPED STRUCT: OVERLAPPED
{ "UINT_PTR" "internal" } { internal UINT_PTR }
{ "UINT_PTR" "internal-high" } { internal-high UINT_PTR }
{ "DWORD" "offset" } { offset DWORD }
{ "DWORD" "offset-high" } { offset-high DWORD }
{ "HANDLE" "event" } ; { event HANDLE } ;
STRUCT: SYSTEMTIME STRUCT: SYSTEMTIME
{ wYear WORD } { wYear WORD }