Win32OperatingSystem.st
changeset 22247 2cb99dbc787d
parent 22246 436ac1b74528
child 22248 d912ed5595ba
--- a/Win32OperatingSystem.st	Mon Sep 04 15:35:00 2017 +0200
+++ b/Win32OperatingSystem.st	Tue Sep 05 10:09:35 2017 +0200
@@ -749,13 +749,21 @@
 FileTimeToNanosecondTime1970(LPFILETIME pft)
 {
     LONGLONG lTime = ((LONGLONG)pft->dwHighDateTime << 32) + pft->dwLowDateTime;
-    lTime -= 11644473600000000LL;  // the number of 100nanos from 1.1.1601 to 1.1.1970
-    lTime *= 100;    // convert multiple of 100ns to nanoseconds
 
 #if __POINTER_SIZE__ == 8
+    lTime -= 11644473600000000LL;   // the number of 100nanos from 1.1.1601 to 1.1.1970
+    lTime *= 100;                   // convert multiple of 100ns to nanoseconds
     return(__MKINT(lTime));
 #else
-    return(__MKLARGEINT64(1, (unsigned INT)(lTime & 0xFFFFFFFF), (unsigned INT)(lTime >> 32)));
+    if (lTime >= (LONGLONG)11644473600000000L) {
+        lTime -= (LONGLONG)11644473600000000L;  // the number of 100nanos from 1.1.1601 to 1.1.1970
+        lTime *= 100;                           // convert multiple of 100ns to nanoseconds
+        return(__MKLARGEINT64(1, (unsigned INT)(lTime & 0xFFFFFFFF), (unsigned INT)(lTime >> 32)));
+    } else {
+        lTime = (LONGLONG)11644473600000000L - lTime;
+        lTime *= 100;                           // convert multiple of 100ns to nanoseconds
+        return(__MKLARGEINT64(-1, (unsigned INT)(lTime & 0xFFFFFFFF), (unsigned INT)(lTime >> 32)));
+    }
 #endif
 }