time: yet another speedup
Huw D M Davies
h.davies1 at physics.ox.ac.uk
Tue Feb 24 06:31:56 CST 2004
Huw Davies <huw at codeweavers.com>
Call TIME_GetBias rather than RtlQueryTimeZoneInfo if we're
only interested in the bias - it's faster.
--
Huw Davies
huw at codeweavers.com
--- dlls/ntdll/time.c 2004-02-24 12:24:18.000000000 +0000
+++ dlls/ntdll/time.c 2004-02-24 12:20:28.000000000 +0000
@@ -257,8 +257,6 @@
'e','\0'}, -780, 0}
};
-/*********** start of code by Rex Jolliff (rex at lvcablemodem.com) **************/
-
#define TICKSPERSEC 10000000
#define TICKSPERMSEC 10000
#define SECSPERDAY 86400
@@ -469,6 +467,27 @@
return TRUE;
}
+/***********************************************************************
+ * TIME_GetBias [internal]
+ *
+ * Helper function calculates delta local time from UTC.
+ *
+ * PARAMS
+ * utc [I] The current utc time.
+ * pdaylight [I] Local daylight.
+ *
+ * RETURNS
+ * The bias for the current timezone.
+ */
+static int TIME_GetBias(time_t utc, int *pdaylight)
+{
+ struct tm *ptm = localtime(&utc);
+ *pdaylight = ptm->tm_isdst; /* daylight for local timezone */
+ ptm = gmtime(&utc);
+ ptm->tm_isdst = *pdaylight; /* use local daylight, not that of Greenwich */
+ return (int)(utc-mktime(ptm));
+}
+
/******************************************************************************
* RtlLocalTimeToSystemTime [NTDLL.@]
*
@@ -485,12 +504,15 @@
NTSTATUS WINAPI RtlLocalTimeToSystemTime( const LARGE_INTEGER *LocalTime,
PLARGE_INTEGER SystemTime)
{
- TIME_ZONE_INFORMATION tzinfo;
-
+ time_t gmt;
+ int bias, daylight;
+
TRACE("(%p, %p)\n", LocalTime, SystemTime);
- RtlQueryTimeZoneInformation(&tzinfo);
- SystemTime->QuadPart = LocalTime->QuadPart + tzinfo.Bias * 60 * (LONGLONG)10000000;
+ gmt = time(NULL);
+ bias = TIME_GetBias(gmt, &daylight);
+
+ SystemTime->QuadPart = LocalTime->QuadPart - bias * (LONGLONG)10000000;
return STATUS_SUCCESS;
}
@@ -510,12 +532,15 @@
NTSTATUS WINAPI RtlSystemTimeToLocalTime( const LARGE_INTEGER *SystemTime,
PLARGE_INTEGER LocalTime )
{
- TIME_ZONE_INFORMATION tzinfo;
+ time_t gmt;
+ int bias, daylight;
TRACE("(%p, %p)\n", SystemTime, LocalTime);
- RtlQueryTimeZoneInformation(&tzinfo);
- LocalTime->QuadPart = SystemTime->QuadPart - tzinfo.Bias * 60 * (LONGLONG)10000000;
+ gmt = time(NULL);
+ bias = TIME_GetBias(gmt, &daylight);
+
+ LocalTime->QuadPart = SystemTime->QuadPart + bias * (LONGLONG)10000000;
return STATUS_SUCCESS;
}
@@ -659,27 +684,6 @@
}
/***********************************************************************
- * TIME_GetBias [internal]
- *
- * Helper function calculates delta local time from UTC.
- *
- * PARAMS
- * utc [I] The current utc time.
- * pdaylight [I] Local daylight.
- *
- * RETURNS
- * The bias for the current timezone.
- */
-static int TIME_GetBias(time_t utc, int *pdaylight)
-{
- struct tm *ptm = localtime(&utc);
- *pdaylight = ptm->tm_isdst; /* daylight for local timezone */
- ptm = gmtime(&utc);
- ptm->tm_isdst = *pdaylight; /* use local daylight, not that of Greenwich */
- return (int)(utc-mktime(ptm));
-}
-
-/***********************************************************************
* TIME_GetTZAsStr [internal]
*
* Helper function that returns the given timezone as a string.
More information about the wine-patches
mailing list