update stream seeking on windows for new api

db4
Doug Coleman 2009-02-07 11:00:16 -06:00
parent bc0521f88a
commit 44a4c20f23
4 changed files with 16 additions and 6 deletions

View File

@ -82,7 +82,17 @@ M: winnt init-io ( -- )
H{ } clone pending-overlapped set-global
windows.winsock:init-winsock ;
M: winnt (stream-seek) ( n stream -- ) 2drop ;
ERROR: invalid-file-size n ;
: handle>file-size ( handle -- n )
0 <ulonglong> [ GetFileSizeEx win32-error=0/f ] keep *ulonglong ;
M: winnt (stream-seek) ( n seek-type stream -- )
swap {
{ seek-absolute [ handle>> (>>ptr) ] }
{ seek-relative [ handle>> [ + ] change-ptr drop ] }
{ seek-end [ handle>> [ handle>> handle>file-size + ] keep (>>ptr) ] }
} case ;
: file-error? ( n -- eof? )
zero? [

View File

@ -21,15 +21,15 @@ M: buffer dispose* ptr>> free ;
: buffer-reset ( n buffer -- )
swap >>fill 0 >>pos drop ;
: buffer-reset-hard ( buffer -- )
0 >>fill 0 >>pos drop ;
: buffer-capacity ( buffer -- n )
[ size>> ] [ fill>> ] bi - ; inline
: buffer-empty? ( buffer -- ? )
fill>> zero? ; inline
: buffer-seek ( n buffer -- )
0 >>fill 0 >>pos 2drop ; inline
: buffer-consume ( n buffer -- )
[ + ] change-pos
dup [ pos>> ] [ fill>> ] bi <

View File

@ -124,7 +124,7 @@ HOOK: (stream-seek) os ( n seek-type stream -- )
M: port stream-seek ( n seek-type stream -- )
dup check-disposed
[ nip buffer>> buffer-seek ] [ (stream-seek) ] 3bi ;
[ buffer>> buffer-reset-hard 2drop ] [ (stream-seek) ] 3bi ;
GENERIC: shutdown ( handle -- )

View File

@ -1235,7 +1235,7 @@ ALIAS: GetFileAttributesEx GetFileAttributesExW
FUNCTION: BOOL GetFileInformationByHandle ( HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation ) ;
FUNCTION: DWORD GetFileSize ( HANDLE hFile, LPDWORD lpFileSizeHigh ) ;
! FUNCTION: GetFileSizeEx
FUNCTION: BOOL GetFileSizeEx ( HANDLE hFile, PLARGE_INTEGER lpFileSize ) ;
FUNCTION: BOOL GetFileTime ( HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime ) ;
FUNCTION: DWORD GetFileType ( HANDLE hFile ) ;
! FUNCTION: GetFirmwareEnvironmentVariableA