less aggressive open-file for file-times, use FILETIME struct now
parent
3507616f3b
commit
c50eaf1c29
|
@ -0,0 +1,6 @@
|
|||
! Copyright (C) 2009 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: tools.test io.files.info.windows system kernel ;
|
||||
IN: io.files.info.windows.tests
|
||||
|
||||
[ ] [ vm file-times 3drop ] unit-test
|
|
@ -188,10 +188,10 @@ M: winnt file-systems ( -- array )
|
|||
|
||||
: file-times ( path -- timestamp timestamp timestamp )
|
||||
[
|
||||
normalize-path open-existing &dispose handle>>
|
||||
"FILETIME" <c-object>
|
||||
"FILETIME" <c-object>
|
||||
"FILETIME" <c-object>
|
||||
normalize-path open-read &dispose handle>>
|
||||
FILETIME <struct>
|
||||
FILETIME <struct>
|
||||
FILETIME <struct>
|
||||
[ GetFileTime win32-error=0/f ] 3keep
|
||||
[ FILETIME>timestamp >local-time ] tri@
|
||||
] with-destructors ;
|
||||
|
|
|
@ -216,15 +216,15 @@ C-STRUCT: OVERLAPPED
|
|||
{ "DWORD" "offset-high" }
|
||||
{ "HANDLE" "event" } ;
|
||||
|
||||
C-STRUCT: SYSTEMTIME
|
||||
{ "WORD" "wYear" }
|
||||
{ "WORD" "wMonth" }
|
||||
{ "WORD" "wDayOfWeek" }
|
||||
{ "WORD" "wDay" }
|
||||
{ "WORD" "wHour" }
|
||||
{ "WORD" "wMinute" }
|
||||
{ "WORD" "wSecond" }
|
||||
{ "WORD" "wMilliseconds" } ;
|
||||
STRUCT: SYSTEMTIME
|
||||
{ wYear WORD }
|
||||
{ wMonth WORD }
|
||||
{ wDayOfWeek WORD }
|
||||
{ wDay WORD }
|
||||
{ wHour WORD }
|
||||
{ wMinute WORD }
|
||||
{ wSecond WORD }
|
||||
{ wMilliseconds WORD } ;
|
||||
|
||||
C-STRUCT: TIME_ZONE_INFORMATION
|
||||
{ "LONG" "Bias" }
|
||||
|
@ -235,9 +235,9 @@ C-STRUCT: TIME_ZONE_INFORMATION
|
|||
{ "SYSTEMTIME" "DaylightDate" }
|
||||
{ "LONG" "DaylightBias" } ;
|
||||
|
||||
C-STRUCT: FILETIME
|
||||
{ "DWORD" "dwLowDateTime" }
|
||||
{ "DWORD" "dwHighDateTime" } ;
|
||||
STRUCT: FILETIME
|
||||
{ dwLowDateTime DWORD }
|
||||
{ dwHighDateTime DWORD } ;
|
||||
|
||||
C-STRUCT: STARTUPINFO
|
||||
{ "DWORD" "cb" }
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
! Copyright (C) 2007 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien alien.c-types kernel math windows.errors
|
||||
windows.kernel32 namespaces calendar math.bitwise ;
|
||||
windows.kernel32 namespaces calendar math.bitwise accessors
|
||||
classes.struct ;
|
||||
IN: windows.time
|
||||
|
||||
: >64bit ( lo hi -- n )
|
||||
|
@ -11,15 +12,13 @@ IN: windows.time
|
|||
1601 1 1 0 0 0 instant <timestamp> ;
|
||||
|
||||
: FILETIME>windows-time ( FILETIME -- n )
|
||||
[ FILETIME-dwLowDateTime ]
|
||||
[ FILETIME-dwHighDateTime ]
|
||||
bi >64bit ;
|
||||
[ dwLowDateTime>> ] [ dwHighDateTime>> ] bi >64bit ;
|
||||
|
||||
: windows-time>timestamp ( n -- timestamp )
|
||||
10000000 /i seconds windows-1601 swap time+ ;
|
||||
|
||||
: windows-time ( -- n )
|
||||
"FILETIME" <c-object> [ GetSystemTimeAsFileTime ] keep
|
||||
FILETIME <struct> [ GetSystemTimeAsFileTime ] keep
|
||||
FILETIME>windows-time ;
|
||||
|
||||
: timestamp>windows-time ( timestamp -- n )
|
||||
|
@ -27,11 +26,8 @@ IN: windows.time
|
|||
>gmt windows-1601 (time-) 10000000 * >integer ;
|
||||
|
||||
: windows-time>FILETIME ( n -- FILETIME )
|
||||
"FILETIME" <c-object>
|
||||
[
|
||||
[ [ 32 bits ] dip set-FILETIME-dwLowDateTime ]
|
||||
[ [ -32 shift ] dip set-FILETIME-dwHighDateTime ] 2bi
|
||||
] keep ;
|
||||
[ FILETIME <struct> ] dip
|
||||
[ 32 bits >>dwLowDateTime ] [ -32 shift >>dwHighDateTime ] bi ;
|
||||
|
||||
: timestamp>FILETIME ( timestamp -- FILETIME/f )
|
||||
dup [ >gmt timestamp>windows-time windows-time>FILETIME ] when ;
|
||||
|
|
Loading…
Reference in New Issue