mirror of
https://github.com/pocoproject/poco.git
synced 2025-03-03 04:38:39 +01:00
enh(Path): ensure directory path ends with separator (#4679)
This commit is contained in:
parent
2163c2044d
commit
94a693dff5
@ -290,6 +290,22 @@ public:
|
|||||||
/// this is the semicolon ';'. On OpenVMS systems, this is the
|
/// this is the semicolon ';'. On OpenVMS systems, this is the
|
||||||
/// comma ','.
|
/// comma ','.
|
||||||
|
|
||||||
|
static std::string addDirectorySeparator(const std::string& path);
|
||||||
|
/// Adds a separator to the end of a string to create the correct syntax for a path.
|
||||||
|
/// If the source path already has a trailing separator, no separator will be added.
|
||||||
|
///
|
||||||
|
/// On Unix systems, this is the slash '/'. On Windows systems,
|
||||||
|
/// this is the backslash '\'. On OpenVMS systems, this is the
|
||||||
|
/// period '.'.
|
||||||
|
|
||||||
|
static std::string addDirectorySeparator(const std::string& path, Style style);
|
||||||
|
/// Adds a separator to the end of a string to create the correct syntax for a path.
|
||||||
|
/// If the source path already has a trailing separator, no separator will be added.
|
||||||
|
///
|
||||||
|
/// On Unix systems, this is the slash '/'. On Windows systems,
|
||||||
|
/// this is the backslash '\'. On OpenVMS systems, this is the
|
||||||
|
/// period '.'.
|
||||||
|
|
||||||
static std::string self();
|
static std::string self();
|
||||||
/// Return path to the executable file, empty string if failed.
|
/// Return path to the executable file, empty string if failed.
|
||||||
/// The path is absolute one.
|
/// The path is absolute one.
|
||||||
|
@ -298,14 +298,14 @@ bool Path::tryParse(const std::string& path, Style style)
|
|||||||
|
|
||||||
Path& Path::parseDirectory(const std::string& path)
|
Path& Path::parseDirectory(const std::string& path)
|
||||||
{
|
{
|
||||||
assign(path);
|
assign(addDirectorySeparator(path));
|
||||||
return makeDirectory();
|
return makeDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Path& Path::parseDirectory(const std::string& path, Style style)
|
Path& Path::parseDirectory(const std::string& path, Style style)
|
||||||
{
|
{
|
||||||
assign(path, style);
|
assign(addDirectorySeparator(path, style), style);
|
||||||
return makeDirectory();
|
return makeDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -574,6 +574,49 @@ Path& Path::clear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string Path::addDirectorySeparator(const std::string& path)
|
||||||
|
{
|
||||||
|
poco_assert(!path.empty());
|
||||||
|
|
||||||
|
if (path.back() != separator())
|
||||||
|
{
|
||||||
|
return path + separator();
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string Path::addDirectorySeparator(const std::string& path, Style style)
|
||||||
|
{
|
||||||
|
poco_assert(!path.empty());
|
||||||
|
|
||||||
|
char ch = '\0';
|
||||||
|
switch (style)
|
||||||
|
{
|
||||||
|
case PATH_UNIX:
|
||||||
|
ch = '/';
|
||||||
|
break;
|
||||||
|
case PATH_WINDOWS:
|
||||||
|
ch = '\\';
|
||||||
|
break;
|
||||||
|
case PATH_VMS:
|
||||||
|
ch = '.';
|
||||||
|
break;
|
||||||
|
case PATH_NATIVE:
|
||||||
|
ch = separator();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
poco_bugcheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path.back() != ch)
|
||||||
|
{
|
||||||
|
return path + ch;
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string Path::self()
|
std::string Path::self()
|
||||||
{
|
{
|
||||||
return PathImpl::selfImpl();
|
return PathImpl::selfImpl();
|
||||||
|
@ -1502,6 +1502,40 @@ void PathTest::testForDirectory()
|
|||||||
|
|
||||||
p = Path::forDirectory("/usr/local/include/", Path::PATH_UNIX);
|
p = Path::forDirectory("/usr/local/include/", Path::PATH_UNIX);
|
||||||
assertTrue (p.toString(Path::PATH_UNIX) == "/usr/local/include/");
|
assertTrue (p.toString(Path::PATH_UNIX) == "/usr/local/include/");
|
||||||
|
|
||||||
|
p = Path::forDirectory("C:", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (p.toString(Path::PATH_WINDOWS) == "C:\\");
|
||||||
|
|
||||||
|
p = Path::forDirectory("C:\\", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (p.toString(Path::PATH_WINDOWS) == "C:\\");
|
||||||
|
|
||||||
|
p = Path::forDirectory("C:\\abc", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (p.toString(Path::PATH_WINDOWS) == "C:\\abc\\");
|
||||||
|
|
||||||
|
p = Path::forDirectory("C:\\abc\\", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (p.toString(Path::PATH_WINDOWS) == "C:\\abc\\");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PathTest::testAddDirectorySeparator()
|
||||||
|
{
|
||||||
|
std::string path = Path::addDirectorySeparator("C:", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (path == "C:\\");
|
||||||
|
|
||||||
|
path = Path::addDirectorySeparator("C:\\", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (path == "C:\\");
|
||||||
|
|
||||||
|
path = Path::addDirectorySeparator("C:\\abc", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (path == "C:\\abc\\");
|
||||||
|
|
||||||
|
path = Path::addDirectorySeparator("C:\\abc\\", Path::PATH_WINDOWS);
|
||||||
|
assertTrue (path == "C:\\abc\\");
|
||||||
|
|
||||||
|
path = Path::addDirectorySeparator("/usr/local/include", Path::PATH_UNIX);
|
||||||
|
assertTrue (path == "/usr/local/include/");
|
||||||
|
|
||||||
|
path = Path::addDirectorySeparator("/usr/local/include/", Path::PATH_UNIX);
|
||||||
|
assertTrue (path == "/usr/local/include/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1675,6 +1709,7 @@ CppUnit::Test* PathTest::suite()
|
|||||||
CppUnit_addTest(pSuite, PathTest, testRobustness);
|
CppUnit_addTest(pSuite, PathTest, testRobustness);
|
||||||
CppUnit_addTest(pSuite, PathTest, testParent);
|
CppUnit_addTest(pSuite, PathTest, testParent);
|
||||||
CppUnit_addTest(pSuite, PathTest, testForDirectory);
|
CppUnit_addTest(pSuite, PathTest, testForDirectory);
|
||||||
|
CppUnit_addTest(pSuite, PathTest, testAddDirectorySeparator);
|
||||||
CppUnit_addTest(pSuite, PathTest, testExpand);
|
CppUnit_addTest(pSuite, PathTest, testExpand);
|
||||||
CppUnit_addTest(pSuite, PathTest, testListRoots);
|
CppUnit_addTest(pSuite, PathTest, testListRoots);
|
||||||
CppUnit_addTest(pSuite, PathTest, testFind);
|
CppUnit_addTest(pSuite, PathTest, testFind);
|
||||||
|
@ -45,6 +45,7 @@ public:
|
|||||||
void testRobustness();
|
void testRobustness();
|
||||||
void testParent();
|
void testParent();
|
||||||
void testForDirectory();
|
void testForDirectory();
|
||||||
|
void testAddDirectorySeparator();
|
||||||
void testExpand();
|
void testExpand();
|
||||||
void testListRoots();
|
void testListRoots();
|
||||||
void testFind();
|
void testFind();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user