From a16ed909c57823275d89e40e59f6c69123769b1b Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 18 Dec 2002 02:31:33 +0000 Subject: [PATCH] Implemented RtlTimeToElapsedTimeFields. --- dlls/ntdll/time.c | 30 +++++++++++++++++------------- include/winternl.h | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/dlls/ntdll/time.c b/dlls/ntdll/time.c index aee7e486b47..89d08042ab7 100644 --- a/dlls/ntdll/time.c +++ b/dlls/ntdll/time.c @@ -545,23 +545,27 @@ void WINAPI RtlSecondsSince1980ToTime( DWORD time, LARGE_INTEGER *res ) /****************************************************************************** * RtlTimeToElapsedTimeFields [NTDLL.@] * - * ?? - * - * PARAMS: - * liTime [?]: ?? - * TimeFields [?]: ?? - * * RETURNS: * Nothing. - * - * FIXME: - * Prototype guessed. */ -VOID WINAPI RtlTimeToElapsedTimeFields( - PLARGE_INTEGER liTime, - PTIME_FIELDS TimeFields) +void WINAPI RtlTimeToElapsedTimeFields( const LARGE_INTEGER *Time, PTIME_FIELDS TimeFields ) { - FIXME("(%p,%p): stub\n",liTime,TimeFields); + LONGLONG time; + UINT rem; + + time = RtlExtendedLargeIntegerDivide( Time->QuadPart, TICKSPERSEC, &rem ); + TimeFields->Milliseconds = rem / TICKSPERMSEC; + + /* time is now in seconds */ + TimeFields->Year = 0; + TimeFields->Month = 0; + TimeFields->Day = RtlExtendedLargeIntegerDivide( time, SECSPERDAY, &rem ); + + /* rem is now the remaining seconds in the last day */ + TimeFields->Second = rem % 60; + rem /= 60; + TimeFields->Minute = rem % 60; + TimeFields->Hour = rem / 60; } /*********************************************************************** diff --git a/include/winternl.h b/include/winternl.h index 44b885f2665..c3e71f2a69f 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1038,7 +1038,7 @@ NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER); void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS); BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER); -void WINAPI RtlTimeToElapsedTimeFields(PLARGE_INTEGER,PTIME_FIELDS); +void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS); BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,PULONG); BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD); BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);