// Author: Robert Roebling, Vadim Zeitlin
// Modified by:
// Created: 28.12.2000
-// RCS-ID: $Id$
// Copyright: (c) 2000 Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/config.h" // for wxExpandEnvVars
#include "wx/dynlib.h"
#include "wx/dir.h"
+#include "wx/longlong.h"
#if defined(__WIN32__) && defined(__MINGW32__)
#include "wx/msw/gccpriv.h"
#if wxUSE_DATETIME && defined(__WIN32__) && !defined(__WXMICROWIN__)
-// convert between wxDateTime and FILETIME which is a 64-bit value representing
-// the number of 100-nanosecond intervals since January 1, 1601.
+// Convert between wxDateTime and FILETIME which is a 64-bit value representing
+// the number of 100-nanosecond intervals since January 1, 1601 UTC.
+//
+// This is the offset between FILETIME epoch and the Unix/wxDateTime Epoch.
+static wxInt64 EPOCH_OFFSET_IN_MSEC = wxLL(11644473600000);
static void ConvertFileTimeToWx(wxDateTime *dt, const FILETIME &ft)
{
- FILETIME ftcopy = ft;
- FILETIME ftLocal;
- if ( !::FileTimeToLocalFileTime(&ftcopy, &ftLocal) )
- {
- wxLogLastError(wxT("FileTimeToLocalFileTime"));
- }
+ wxLongLong t(ft.dwHighDateTime, ft.dwLowDateTime);
+ t /= 10000; // Convert hundreds of nanoseconds to milliseconds.
+ t -= EPOCH_OFFSET_IN_MSEC;
- SYSTEMTIME st;
- if ( !::FileTimeToSystemTime(&ftLocal, &st) )
- {
- wxLogLastError(wxT("FileTimeToSystemTime"));
- }
-
- dt->Set(st.wDay, wxDateTime::Month(st.wMonth - 1), st.wYear,
- st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
+ *dt = wxDateTime(t);
}
static void ConvertWxToFileTime(FILETIME *ft, const wxDateTime& dt)
{
- SYSTEMTIME st;
- st.wDay = dt.GetDay();
- st.wMonth = (WORD)(dt.GetMonth() + 1);
- st.wYear = (WORD)dt.GetYear();
- st.wHour = dt.GetHour();
- st.wMinute = dt.GetMinute();
- st.wSecond = dt.GetSecond();
- st.wMilliseconds = dt.GetMillisecond();
-
- FILETIME ftLocal;
- if ( !::SystemTimeToFileTime(&st, &ftLocal) )
- {
- wxLogLastError(wxT("SystemTimeToFileTime"));
- }
+ // Undo the conversions above.
+ wxLongLong t(dt.GetValue());
+ t += EPOCH_OFFSET_IN_MSEC;
+ t *= 10000;
- if ( !::LocalFileTimeToFileTime(&ftLocal, ft) )
- {
- wxLogLastError(wxT("LocalFileTimeToFileTime"));
- }
+ ft->dwHighDateTime = t.GetHi();
+ ft->dwLowDateTime = t.GetLo();
}
#endif // wxUSE_DATETIME && __WIN32__
void wxFileName::Clear()
{
- m_dirs.Clear();
-
- m_volume =
- m_name =
- m_ext = wxEmptyString;
+ m_dirs.clear();
+ m_volume.clear();
+ m_name.clear();
+ m_ext.clear();
// we don't have any absolute path for now
m_relative = true;
case wxPATH_MAC:
// On a Mac even names with * and ? are allowed (Tested with OS
// 9.2.1 and OS X 10.2.5)
- strForbiddenChars = wxEmptyString;
+ strForbiddenChars.clear();
break;
case wxPATH_DOS:
GetVolumeSeparator(wxPATH_DOS) +
GetPathSeparator(wxPATH_DOS);
else
- pathOut = wxEmptyString;
+ pathOut.clear();
wxArrayString dirs = GetDirs();
dirs.Add(GetFullName());