Added long-filename functions & normalisation; patch to Watcom makefiles

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9556 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2001-03-21 12:34:56 +00:00
parent 2c4a8d17cd
commit 9e9b65c1db
4 changed files with 82 additions and 4 deletions

View File

@@ -38,6 +38,12 @@
#include "wx/config.h" // for wxExpandEnvVars
#include "wx/utils.h"
// For GetShort/LongPathName
#ifdef __WIN32__
#include <windows.h>
#include "wx/msw/winundef.h"
#endif
// ============================================================================
// implementation
// ============================================================================
@@ -316,6 +322,13 @@ bool wxFileName::Normalize(wxPathNormalize flags,
m_ext.MakeLower();
}
#if defined(__WXMSW__) && defined(__WIN32__)
if (flags & wxPATH_NORM_LONG)
{
Assign(GetLongPath());
}
#endif
return TRUE;
}
@@ -358,9 +371,15 @@ bool wxFileName::IsAbsolute( wxPathFormat format )
{
wxChar ch = m_dirs.IsEmpty() ? _T('\0') : m_dirs[0u][0u];
// Hack to cope with e.g. c:\thing - need something better
wxChar driveSep = _T('\0');
if (!m_dirs.IsEmpty() && m_dirs[0].Length() > 1)
driveSep = m_dirs[0u][1u];
// the path is absolute if it starts with a path separator or, only for
// Unix filenames, with "~" or "~user"
return IsPathSeparator(ch, format) ||
driveSep == _T(':') ||
(GetFormat(format) == wxPATH_UNIX && ch == _T('~') );
}
@@ -469,6 +488,58 @@ wxString wxFileName::GetFullPath( wxPathFormat format ) const
return GetPathWithSep() + GetFullName();
}
// Return the short form of the path (returns identity on non-Windows platforms)
wxString wxFileName::GetShortPath() const
{
#if defined(__WXMSW__) && defined(__WIN32__)
wxString path(GetFullPath());
wxChar outBuf[MAX_PATH];
// TODO: can't work out how to determine if the function failed
// (positive value if either it succeeded or the buffer was too small)
int bufSz = ::GetShortPathName((const wxChar*) path, outBuf, MAX_PATH*sizeof(wxChar));
if (bufSz == 0)
{
return wxEmptyString;
}
else
{
return wxString(outBuf);
}
#else
return GetFullPath();
#endif
}
// Return the long form of the path (returns identity on non-Windows platforms)
wxString wxFileName::GetLongPath() const
{
#if defined(__WXMSW__) && defined(__WIN32__)
wxString path(GetFullPath());
wxChar outBuf[MAX_PATH];
// TODO: can't work out how to determine if the function failed
// (positive value if either it succeeded or the buffer was too small)
int bufSz = ::GetLongPathName((const wxChar*) path, outBuf, MAX_PATH*sizeof(wxChar));
if (bufSz == 0)
{
return wxEmptyString;
}
else
{
return wxString(outBuf);
}
#else
return GetFullPath();
#endif
}
wxPathFormat wxFileName::GetFormat( wxPathFormat format )
{
if (format == wxPATH_NATIVE)