Recognize UNCs starting with forward slashes too in wxFileName.
Treat \\share\path and //share/path in the same way (for wxPATH_DOS paths). Add a test for UNC parsing to the unit test. Closes #11376. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62561 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -144,6 +144,8 @@
|
|||||||
extern const wxULongLong wxInvalidSize = (unsigned)-1;
|
extern const wxULongLong wxInvalidSize = (unsigned)-1;
|
||||||
#endif // wxUSE_LONGLONG
|
#endif // wxUSE_LONGLONG
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// private classes
|
// private classes
|
||||||
@@ -295,17 +297,26 @@ static wxString wxGetVolumeString(const wxString& volume, wxPathFormat format)
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return true if the character is a DOS path separator i.e. either a slash or
|
||||||
|
// a backslash
|
||||||
|
inline bool IsDOSPathSep(wxUniChar ch)
|
||||||
|
{
|
||||||
|
return ch == wxFILE_SEP_PATH_DOS || ch == wxFILE_SEP_PATH_UNIX;
|
||||||
|
}
|
||||||
|
|
||||||
// return true if the format used is the DOS/Windows one and the string looks
|
// return true if the format used is the DOS/Windows one and the string looks
|
||||||
// like a UNC path
|
// like a UNC path
|
||||||
static bool IsUNCPath(const wxString& path, wxPathFormat format)
|
static bool IsUNCPath(const wxString& path, wxPathFormat format)
|
||||||
{
|
{
|
||||||
return format == wxPATH_DOS &&
|
return format == wxPATH_DOS &&
|
||||||
path.length() >= 4 && // "\\a" can't be a UNC path
|
path.length() >= 4 && // "\\a" can't be a UNC path
|
||||||
path[0u] == wxFILE_SEP_PATH_DOS &&
|
IsDOSPathSep(path[0u]) &&
|
||||||
path[1u] == wxFILE_SEP_PATH_DOS &&
|
IsDOSPathSep(path[1u]) &&
|
||||||
path[2u] != wxFILE_SEP_PATH_DOS;
|
!IsDOSPathSep(path[2u]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
@@ -124,6 +124,7 @@ private:
|
|||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
CPPUNIT_TEST( TestShortLongPath );
|
CPPUNIT_TEST( TestShortLongPath );
|
||||||
#endif // __WINDOWS__
|
#endif // __WINDOWS__
|
||||||
|
CPPUNIT_TEST( TestUNC );
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
void TestConstruction();
|
void TestConstruction();
|
||||||
@@ -136,6 +137,7 @@ private:
|
|||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
void TestShortLongPath();
|
void TestShortLongPath();
|
||||||
#endif // __WINDOWS__
|
#endif // __WINDOWS__
|
||||||
|
void TestUNC();
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(FileNameTestCase)
|
DECLARE_NO_COPY_CLASS(FileNameTestCase)
|
||||||
};
|
};
|
||||||
@@ -493,3 +495,15 @@ void FileNameTestCase::TestShortLongPath()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // __WINDOWS__
|
#endif // __WINDOWS__
|
||||||
|
|
||||||
|
void FileNameTestCase::TestUNC()
|
||||||
|
{
|
||||||
|
wxFileName fn("//share/path/name.ext", wxPATH_DOS);
|
||||||
|
CPPUNIT_ASSERT_EQUAL( "share", fn.GetVolume() );
|
||||||
|
CPPUNIT_ASSERT_EQUAL( "/path", fn.GetPath() );
|
||||||
|
|
||||||
|
fn.Assign("\\\\share2\\path2\\name.ext", wxPATH_DOS);
|
||||||
|
CPPUNIT_ASSERT_EQUAL( "share2", fn.GetVolume() );
|
||||||
|
CPPUNIT_ASSERT_EQUAL( "/path2", fn.GetPath() );
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user