X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f2570aaf16049c11fc50d85cb15952e73bbab85..abfcca57dd0d805ceec9e19c4be207614d79252a:/src/common/filename.cpp diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 33361e5ba6..38f20fee49 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -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;