--- 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
}