diff --git a/library/win32/win32-io-internals.factor b/library/win32/win32-io-internals.factor index b09f31d754..b092641a8e 100644 --- a/library/win32/win32-io-internals.factor +++ b/library/win32/win32-io-internals.factor @@ -72,10 +72,6 @@ GENERIC: expire dup add-completion ] with-scope ; -BEGIN-STRUCT: indirect-pointer - FIELD: int value -END-STRUCT - : ( -- overlapped ) "overlapped-ext" c-size malloc ; @@ -103,14 +99,11 @@ C: io-callback ( -- callback ) io-callback-quotation ; : (wait-for-io) ( timeout -- error overlapped len ) - >r completion-port get - "indirect-pointer" [ 0 swap set-indirect-pointer-value ] keep - "indirect-pointer" - "indirect-pointer" + >r completion-port get 0 0 pick over r> -rot >r >r GetQueuedCompletionStatus r> r> ; : overlapped>callback ( overlapped -- callback ) - indirect-pointer-value dup zero? [ + *int dup zero? [ drop f ] [ overlapped-ext-user-data get-io-callback @@ -121,7 +114,7 @@ C: io-callback ( -- callback ) io-queue-callbacks [ io-callback-stream [ expire ] when* ] each ; : wait-for-io ( timeout -- callback len ) - (wait-for-io) overlapped>callback swap indirect-pointer-value + (wait-for-io) overlapped>callback swap *int rot [ queue-error ] unless ; : win32-init-stdio ( -- ) diff --git a/library/win32/win32-server.factor b/library/win32/win32-server.factor index 912e63f606..3d6ac78756 100644 --- a/library/win32/win32-server.factor +++ b/library/win32/win32-server.factor @@ -66,11 +66,11 @@ SYMBOL: socket dup sockaddr-in-port ntohs swap sockaddr-in-addr inet-ntoa ; : extract-remote-host ( buffer -- port host ) - buffer-ptr 0 32 32 "indirect-pointer" - "indirect-pointer" - "indirect-pointer" - dup >r "indirect-pointer" - GetAcceptExSockaddrs r> indirect-pointer-value sockaddr> ; + buffer-ptr 0 32 32 0 + 0 + 0 + dup >r 0 + GetAcceptExSockaddrs r> *int sockaddr> ; C: win32-client-stream ( buf stream -- stream ) [ set-delegate extract-remote-host ] keep