]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filename.cpp
Committing in .
[wxWidgets.git] / src / common / filename.cpp
index 33361e5ba636a7289984b1ba1b616fd12ccb533b..38f20fee49fd8de3840fbf243ddf0d65607349b3 100644 (file)
@@ -120,14 +120,32 @@ private:
 // convert between wxDateTime and FILETIME which is a 64-bit value representing
 // the number of 100-nanosecond intervals since January 1, 1601.
 
-static void ConvertWxToFileTime(FILETIME *ft, const wxDateTime& dt)
+// the number of milliseconds between the Unix Epoch (January 1, 1970) and the
+// FILETIME reference point (January 1, 1601)
+static const wxLongLong FILETIME_EPOCH_OFFSET = wxLongLong(0xa97, 0x30b66800);
+
+static void ConvertFileTimeToWx(wxDateTime *dt, const FILETIME &ft)
 {
-    // TODO
+    wxLongLong ll(ft.dwHighDateTime, ft.dwLowDateTime);
+
+    // convert 100ns to ms
+    ll /= 10000;
+
+    // move it to our Epoch
+    ll -= FILETIME_EPOCH_OFFSET;
+
+    *dt = wxDateTime(ll);
 }
 
-static void ConvertFileTimeToWx(wxDateTime *dt, const FILETIME &ft)
+static void ConvertWxToFileTime(FILETIME *ft, const wxDateTime& dt)
 {
-    // TODO
+    // do the reverse of ConvertFileTimeToWx()
+    wxLongLong ll = dt.GetValue();
+    ll *= 10000;
+    ll += FILETIME_EPOCH_OFFSET;
+
+    ft->dwHighDateTime = ll.GetHi();
+    ft->dwLowDateTime = ll.GetLo();
 }
 
 #endif // __WIN32__
@@ -793,7 +811,7 @@ wxPathFormat wxFileName::GetFormat( wxPathFormat format )
     {
 #if defined(__WXMSW__) || defined(__WXPM__)
         format = wxPATH_DOS;
-#elif defined(__WXMAC__)
+#elif defined(__WXMAC__) && !defined(__DARWIN__)
         format = wxPATH_MAC; 
 #else
         format = wxPATH_UNIX;