]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2648. [port] win32: isc_time_seconds() was broken. [RT #19900]
authorMark Andrews <marka@isc.org>
Thu, 13 Aug 2009 03:40:57 +0000 (03:40 +0000)
committerMark Andrews <marka@isc.org>
Thu, 13 Aug 2009 03:40:57 +0000 (03:40 +0000)
CHANGES
lib/isc/win32/time.c

diff --git a/CHANGES b/CHANGES
index 083cb437eab3a1337f43c5b5ccecc8ddfbf96a15..941b0db3aacb989c3fc7ac73af1b9052aad0a4a7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+2648.  [port]          win32: isc_time_seconds() was broken. [RT #19900]
+
 2646.  [bug]           Incorrect cleanup on error in socket.c. [RT #19987]
 
 2645.  [port]          "gcc -m32" didn't work on amd64 and x86_64 platforms
index de29aaa1164908206a5e9b25a68c3cc77b331a94..580bec6b27f7238afc7cddc0674cfc2a149e749c 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: time.c,v 1.43.128.2 2008/08/29 23:46:52 tbox Exp $ */
+/* $Id: time.c,v 1.43.128.3 2009/08/13 03:40:57 marka Exp $ */
 
 #include <config.h>
 
@@ -205,28 +205,30 @@ isc_time_microdiff(const isc_time_t *t1, const isc_time_t *t2) {
 
 isc_uint32_t
 isc_time_seconds(const isc_time_t *t) {
-       SYSTEMTIME st;
+       SYSTEMTIME epoch = { 1970, 1, 4, 1, 0, 0, 0, 0 };
+       FILETIME temp;
+       ULARGE_INTEGER i1, i2;
+       LONGLONG i3;
 
-       /*
-        * Convert the time to a SYSTEMTIME structure and the grab the
-        * milliseconds
-        */
-       FileTimeToSystemTime(&t->absolute, &st);
+       SystemTimeToFileTime(&epoch, &temp);
+
+       i1.LowPart  = t->absolute.dwLowDateTime;
+       i1.HighPart = t->absolute.dwHighDateTime;
+       i2.LowPart  = temp.dwLowDateTime;
+       i2.HighPart = temp.dwHighDateTime;
+
+       i3 = (i1.QuadPart - i2.QuadPart) / 10000000;
 
-       return ((isc_uint32_t)(st.wMilliseconds / 1000));
+       return ((isc_uint32_t)i3)
 }
 
 isc_uint32_t
 isc_time_nanoseconds(const isc_time_t *t) {
-       SYSTEMTIME st;
-
-       /*
-        * Convert the time to a SYSTEMTIME structure and the grab the
-        * milliseconds
-        */
-       FileTimeToSystemTime(&t->absolute, &st);
+       ULARGE_INTEGER i;
 
-       return ((isc_uint32_t)(st.wMilliseconds * 1000000));
+       i.LowPart  = t->absolute.dwLowDateTime;
+       i.HighPart = t->absolute.dwHighDateTime;
+       return ((isc_uint32_t)(i.QuadPart % 10000000) * 100);
 }
 
 void