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:
@@ -65,7 +65,8 @@ enum wxPathNormalize
|
|||||||
wxPATH_NORM_TILDE = 0x0004, // Unix only: replace ~ and ~user
|
wxPATH_NORM_TILDE = 0x0004, // Unix only: replace ~ and ~user
|
||||||
wxPATH_NORM_CASE = 0x0008, // if case insensitive => tolower
|
wxPATH_NORM_CASE = 0x0008, // if case insensitive => tolower
|
||||||
wxPATH_NORM_ABSOLUTE = 0x0010, // make the path absolute
|
wxPATH_NORM_ABSOLUTE = 0x0010, // make the path absolute
|
||||||
wxPATH_NORM_ALL = 0x001f
|
wxPATH_NORM_LONG = 0x0020, // make the path the long form
|
||||||
|
wxPATH_NORM_ALL = 0x003f
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -241,6 +242,12 @@ public:
|
|||||||
// Construct full path with name and ext
|
// Construct full path with name and ext
|
||||||
wxString GetFullPath( wxPathFormat format = wxPATH_NATIVE ) const;
|
wxString GetFullPath( wxPathFormat format = wxPATH_NATIVE ) const;
|
||||||
|
|
||||||
|
// Return the short form of the path (returns identity on non-Windows platforms)
|
||||||
|
wxString GetShortPath() const;
|
||||||
|
|
||||||
|
// Return the long form of the path (returns identity on non-Windows platforms)
|
||||||
|
wxString GetLongPath() const;
|
||||||
|
|
||||||
// various helpers
|
// various helpers
|
||||||
|
|
||||||
// get the canonical path format for this platform
|
// get the canonical path format for this platform
|
||||||
|
@@ -38,6 +38,12 @@
|
|||||||
#include "wx/config.h" // for wxExpandEnvVars
|
#include "wx/config.h" // for wxExpandEnvVars
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
|
|
||||||
|
// For GetShort/LongPathName
|
||||||
|
#ifdef __WIN32__
|
||||||
|
#include <windows.h>
|
||||||
|
#include "wx/msw/winundef.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -316,6 +322,13 @@ bool wxFileName::Normalize(wxPathNormalize flags,
|
|||||||
m_ext.MakeLower();
|
m_ext.MakeLower();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__WXMSW__) && defined(__WIN32__)
|
||||||
|
if (flags & wxPATH_NORM_LONG)
|
||||||
|
{
|
||||||
|
Assign(GetLongPath());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,9 +371,15 @@ bool wxFileName::IsAbsolute( wxPathFormat format )
|
|||||||
{
|
{
|
||||||
wxChar ch = m_dirs.IsEmpty() ? _T('\0') : m_dirs[0u][0u];
|
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
|
// the path is absolute if it starts with a path separator or, only for
|
||||||
// Unix filenames, with "~" or "~user"
|
// Unix filenames, with "~" or "~user"
|
||||||
return IsPathSeparator(ch, format) ||
|
return IsPathSeparator(ch, format) ||
|
||||||
|
driveSep == _T(':') ||
|
||||||
(GetFormat(format) == wxPATH_UNIX && ch == _T('~') );
|
(GetFormat(format) == wxPATH_UNIX && ch == _T('~') );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -469,6 +488,58 @@ wxString wxFileName::GetFullPath( wxPathFormat format ) const
|
|||||||
return GetPathWithSep() + GetFullName();
|
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 )
|
wxPathFormat wxFileName::GetFormat( wxPathFormat format )
|
||||||
{
|
{
|
||||||
if (format == wxPATH_NATIVE)
|
if (format == wxPATH_NATIVE)
|
||||||
|
@@ -20,9 +20,9 @@ $(LNK) : makefile.wat
|
|||||||
@%append $(LNK) system $(LINKOPTION)
|
@%append $(LNK) system $(LINKOPTION)
|
||||||
@%append $(LNK) $(STACK)
|
@%append $(LNK) $(STACK)
|
||||||
@%append $(LNK) name $(PROGRAM).exe
|
@%append $(LNK) name $(PROGRAM).exe
|
||||||
@for %i in ($(LIBS)) do @%append $(LNK) file %i
|
|
||||||
@for %i in ($(EXTRALIBS)) do @%append $(LNK) file %i
|
|
||||||
@for %i in ($(OBJECTS)) do @%append $(LNK) file %i
|
@for %i in ($(OBJECTS)) do @%append $(LNK) file %i
|
||||||
|
@for %i in ($(LIBS)) do @%append $(LNK) lib %i
|
||||||
|
@for %i in ($(EXTRALIBS)) do @%append $(LNK) lib %i
|
||||||
# @%append $(LNK) $(MINDATA)
|
# @%append $(LNK) $(MINDATA)
|
||||||
# @%append $(LNK) $(MAXDATA)
|
# @%append $(LNK) $(MAXDATA)
|
||||||
|
|
||||||
|
@@ -85,7 +85,7 @@ minigzip.obj: minigzip.c zlib.h zconf.h
|
|||||||
|
|
||||||
# we must cut the command line to fit in the MS/DOS 128 byte limit:
|
# we must cut the command line to fit in the MS/DOS 128 byte limit:
|
||||||
$(LIBTARGET): $(OBJ1) $(OBJ2) $(OBJ3)
|
$(LIBTARGET): $(OBJ1) $(OBJ2) $(OBJ3)
|
||||||
del $(LIBTARGET)
|
if exist $(LIBTARGET) del $(LIBTARGET)
|
||||||
$(LIB) $(LIBTARGET) +$(OBJP1)
|
$(LIB) $(LIBTARGET) +$(OBJP1)
|
||||||
$(LIB) $(LIBTARGET) +$(OBJP2)
|
$(LIB) $(LIBTARGET) +$(OBJP2)
|
||||||
$(LIB) $(LIBTARGET) +$(OBJP3)
|
$(LIB) $(LIBTARGET) +$(OBJP3)
|
||||||
|
Reference in New Issue
Block a user