From 75f7e27c6c3ec90efb8eaeafe329cf6316d124df Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 5 Sep 2009 16:20:58 -0500 Subject: [PATCH] Use new-style structs for overlapped struct on Windows --- basis/io/backend/windows/nt/nt.factor | 11 ++++++----- basis/windows/kernel32/kernel32.factor | 12 ++++++------ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/basis/io/backend/windows/nt/nt.factor b/basis/io/backend/windows/nt/nt.factor index 46d4d28cfc..217ce7b31e 100755 --- a/basis/io/backend/windows/nt/nt.factor +++ b/basis/io/backend/windows/nt/nt.factor @@ -14,11 +14,11 @@ TUPLE: io-callback port thread ; C: io-callback : (make-overlapped) ( -- overlapped-ext ) - "OVERLAPPED" malloc-object &free ; + OVERLAPPED malloc-struct &free ; : make-overlapped ( port -- overlapped-ext ) [ (make-overlapped) ] dip - handle>> ptr>> [ over set-OVERLAPPED-offset ] when* ; + handle>> ptr>> [ >>offset ] when* ; M: winnt FileArgs-overlapped ( port -- overlapped ) make-overlapped ; @@ -40,7 +40,7 @@ M: winnt add-completion ( win32-handle -- ) : twiddle-thumbs ( overlapped port -- bytes-transferred ) [ 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 array? ] [ @@ -57,11 +57,12 @@ M: winnt add-completion ( win32-handle -- ) f [ ! overlapped us [ 1000 /i ] [ INFINITE ] if* ! timeout GetQueuedCompletionStatus zero? - ] keep *void* + ] keep + *void* dup [ OVERLAPPED memory>struct ] when ] keep *int spin ; : 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 -- ? ) wait-for-overlapped [ diff --git a/basis/windows/kernel32/kernel32.factor b/basis/windows/kernel32/kernel32.factor index f4d6038954..2cba1173d5 100755 --- a/basis/windows/kernel32/kernel32.factor +++ b/basis/windows/kernel32/kernel32.factor @@ -210,12 +210,12 @@ C-ENUM: TYPEDEF: uint COMPUTER_NAME_FORMAT -C-STRUCT: OVERLAPPED - { "UINT_PTR" "internal" } - { "UINT_PTR" "internal-high" } - { "DWORD" "offset" } - { "DWORD" "offset-high" } - { "HANDLE" "event" } ; +STRUCT: OVERLAPPED + { internal UINT_PTR } + { internal-high UINT_PTR } + { offset DWORD } + { offset-high DWORD } + { event HANDLE } ; STRUCT: SYSTEMTIME { wYear WORD } -- 2.34.1