[前][次][番号順一覧][スレッド一覧]

ruby-changes:7528

From: usa <ko1@a...>
Date: Tue, 2 Sep 2008 10:17:45 +0900 (JST)
Subject: [ruby-changes:7528] Ruby:r19049 (trunk): * win32/win32.c (gettimeofday): calc tv_sec and tv_usec from system

usa	2008-09-02 10:17:28 +0900 (Tue, 02 Sep 2008)

  New Revision: 19049

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19049

  Log:
    * win32/win32.c (gettimeofday): calc tv_sec and tv_usec from system
      time by myself. [ruby-dev:36084]

  Modified files:
    trunk/ChangeLog
    trunk/win32/win32.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19048)
+++ ChangeLog	(revision 19049)
@@ -1,3 +1,8 @@
+Tue Sep  2 10:09:17 2008  NAKAMURA Usaku  <usa@r...>
+
+	* win32/win32.c (gettimeofday): calc tv_sec and tv_usec from system
+	  time by myself. [ruby-dev:36084]
+
 Tue Sep  2 04:00:37 2008  Tanaka Akira  <akr@f...>
 
 	* transcode_data.h (o3): prevent sign extension on 64bit environment.
Index: win32/win32.c
===================================================================
--- win32/win32.c	(revision 19048)
+++ win32/win32.c	(revision 19049)
@@ -3088,13 +3088,25 @@
 int _cdecl
 gettimeofday(struct timeval *tv, struct timezone *tz)
 {
-    SYSTEMTIME st;
-    struct tm tm;
+    FILETIME ft;
+    ULARGE_INTEGER tmp;
+    unsigned LONG_LONG lt;
 
-    GetSystemTime(&st);
-    time(&tv->tv_sec);
-    tv->tv_usec = st.wMilliseconds * 1000;
+    GetSystemTimeAsFileTime(&ft);
+    tmp.LowPart = ft.dwLowDateTime;
+    tmp.HighPart = ft.dwHighDateTime;
+    lt = tmp.QuadPart;
 
+    /* lt is now 100-nanosec intervals since 1601/01/01 00:00:00 UTC,
+       convert it into UNIX time (since 1970/01/01 00:00:00 UTC).
+       the first leap second is at 1972/06/30, so we doesn't need to think
+       about it. */
+    lt /= 10000;	/* to msec */
+    lt -= (LONG_LONG)(369 * 365 + 24 * 3 + 17) * 24 * 60 * 60 * 1000;
+
+    tv->tv_sec = lt / 1000;
+    tv->tv_usec = lt % 1000;
+
     return 0;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]