nginx-0.0.1-2003-11-11-21:13:43 import
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index 11dbfac..ca53a23 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -35,6 +35,7 @@
 #define SIZE_FMT   "%d"
 #define SIZEX_FMT  "%x"
 #define PID_FMT    "%d"
+#define TIME_FMT   "%lu"
 
 
 
diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h
index f94936d..21724f8 100644
--- a/src/os/unix/ngx_solaris_config.h
+++ b/src/os/unix/ngx_solaris_config.h
@@ -33,6 +33,7 @@
 #define SIZE_FMT   "%d"
 #define SIZEX_FMT  "%x"
 #define PID_FMT    "%ld"
+#define TIME_FMT   "%lu"
 
 
 #ifndef HAVE_SELECT
diff --git a/src/os/unix/ngx_time.c b/src/os/unix/ngx_time.c
index bf3432b..3703991 100644
--- a/src/os/unix/ngx_time.c
+++ b/src/os/unix/ngx_time.c
@@ -5,20 +5,22 @@
 
 void ngx_localtime(ngx_tm_t *tm)
 {
+#if (HAVE_LOCALTIME_R)
+
     localtime_r(&ngx_cached_time, tm);
 
+#else
+    ngx_tm_t  *t;
+
+    t = localtime(&ngx_cached_time);
+    *tm = *t;
+
+#endif
+
     tm->ngx_tm_mon++;
     tm->ngx_tm_year += 1900;
 }
 
-u_int ngx_msec(void)
-{
-    struct timeval  tv;
-
-    gettimeofday(&tv, NULL);
-
-    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
-}
 
 
 #if 0
diff --git a/src/os/unix/ngx_time.h b/src/os/unix/ngx_time.h
index cdec417..9dc4aea 100644
--- a/src/os/unix/ngx_time.h
+++ b/src/os/unix/ngx_time.h
@@ -3,9 +3,13 @@
 
 
 #include <ngx_config.h>
+#include <ngx_core.h>
+
+
+typedef uint64_t       ngx_epoch_msec_t;
 
 typedef u_int          ngx_msec_t;
-#define NGX_MAX_MSEC   (u_int) -1
+#define NGX_MAX_MSEC   (ngx_msec_t) -1
 
 typedef struct tm      ngx_tm_t;
 
@@ -17,16 +21,14 @@
 #define ngx_tm_year    tm_year
 #define ngx_tm_wday    tm_wday
 
-#define ngx_msleep(ms) usleep(ms * 1000)
 
 void ngx_localtime(ngx_tm_t *tm);
 
-ngx_msec_t ngx_msec(void);
+#define ngx_gettimeofday(tp)  gettimeofday(tp, NULL);
+#define ngx_msleep(ms)        usleep(ms * 1000)
 
-time_t ngx_time();
 
 extern time_t  ngx_cached_time;
 
 
-
 #endif /* _NGX_TIME_H_INCLUDED_ */
diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
index a29e333..0565eaf 100644
--- a/src/os/win32/ngx_files.h
+++ b/src/os/win32/ngx_files.h
@@ -69,8 +69,8 @@
 
 #define ngx_file_uniq(fi)   (*(ngx_file_uniq_t *) &fi.nFileIndexHigh)
 
-/* There are 134774 days between 1 Jan 1970 and 1 Jan 1601,
-   11644473600 seconds or 11644473600,000,000,0 100-nanosecond intervals */
+
+/* 116444736000000000 is commented in src/os/win32/ngx_time.c */
 
 #define ngx_file_mtime(fi)                                                  \
    (time_t) (((((unsigned __int64) fi.ftLastWriteTime.dwHighDateTime << 32) \
diff --git a/src/os/win32/ngx_time.c b/src/os/win32/ngx_time.c
new file mode 100644
index 0000000..8497c53
--- /dev/null
+++ b/src/os/win32/ngx_time.c
@@ -0,0 +1,29 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+void ngx_gettimeofday(struct timeval *tp)
+{
+    uint64_t  intervals;
+    FILETIME  ft;
+
+    GetSystemTimeAsFileTime(&ft);
+
+    /*
+     * A file time is a 64-bit value that represents the number
+     * of 100-nanosecond intervals that have elapsed since
+     * 12:00 A.M. January 1, 1601 (UTC).
+     *
+     * Between January 1, 1970 (Epoch) and January 1, 1601 there are
+     * 134744 days,
+     * 11644473600 seconds or
+     * 11644473600,000,000,0 100-nanosecond intervals.
+     */
+
+    intervals = ((uint64_t) ft.dwHighDateTime << 32) | ft.dwLowDateTime;
+    intervals -= 116444736000000000;
+
+    tp->tv_sec = intervals / 10000000;
+    tp->tv_usec = (intervals % 10000000) / 10;
+}
diff --git a/src/os/win32/ngx_time.h b/src/os/win32/ngx_time.h
index 4cd84e5..36f8918 100644
--- a/src/os/win32/ngx_time.h
+++ b/src/os/win32/ngx_time.h
@@ -6,8 +6,10 @@
 #include <ngx_core.h>
 
 
-typedef unsigned int   ngx_msec_t;
-#define NGX_MAX_MSEC   ~0
+typedef uint64_t       ngx_epoch_msec_t;
+
+typedef u_int          ngx_msec_t;
+#define NGX_MAX_MSEC   (ngx_msec_t) -1
 
 
 typedef SYSTEMTIME     ngx_tm_t;
@@ -23,10 +25,16 @@
 
 #define ngx_msleep     Sleep
 #define ngx_localtime  GetLocalTime
-#define ngx_msec       GetTickCount
 
-/* STUB */
-#define ngx_time()     time(NULL)
+
+struct timeval {
+    long   tv_sec;
+    long   tv_usec;
+};
+
+
+void ngx_gettimeofday(struct timeval *tp);
+
 
 
 #endif /* _NGX_TIME_H_INCLUDED_ */