wxPATH_NORM_TILDE = 0x0004, // Unix only: replace ~ and ~user
wxPATH_NORM_CASE = 0x0008, // if case insensitive => tolower
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
};
// ----------------------------------------------------------------------------
// Construct full path with name and ext
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
// get the canonical path format for this platform
#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
// ============================================================================
m_ext.MakeLower();
}
+#if defined(__WXMSW__) && defined(__WIN32__)
+ if (flags & wxPATH_NORM_LONG)
+ {
+ Assign(GetLongPath());
+ }
+#endif
+
return TRUE;
}
{
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('~') );
}
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)
@%append $(LNK) system $(LINKOPTION)
@%append $(LNK) $(STACK)
@%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 ($(LIBS)) do @%append $(LNK) lib %i
+ @for %i in ($(EXTRALIBS)) do @%append $(LNK) lib %i
# @%append $(LNK) $(MINDATA)
# @%append $(LNK) $(MAXDATA)