Change (revert!) behaviour of SGPath::base, which broke TerraGear, when used with multiple file suffixes (hgt.zip, for example). Test cases updated to match TG-required behaviour.
This commit is contained in:
@@ -82,7 +82,7 @@ int main(int argc, char* argv[])
|
||||
SGPath pj("/Foo/zot.dot/thing.tar.gz");
|
||||
COMPARE(pj.dir(), std::string("/Foo/zot.dot"));
|
||||
COMPARE(pj.file(), std::string("thing.tar.gz"));
|
||||
COMPARE(pj.base(), std::string("/Foo/zot.dot/thing"));
|
||||
COMPARE(pj.base(), std::string("/Foo/zot.dot/thing.tar"));
|
||||
COMPARE(pj.file_base(), std::string("thing"));
|
||||
COMPARE(pj.extension(), std::string("gz"));
|
||||
COMPARE(pj.complete_lower_extension(), std::string("tar.gz"));
|
||||
@@ -124,7 +124,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
SGPath extB("BAH/FOO.HTML.GZ");
|
||||
COMPARE(extB.extension(), "GZ");
|
||||
COMPARE(extB.base(), "BAH/FOO");
|
||||
COMPARE(extB.base(), "BAH/FOO.HTML");
|
||||
COMPARE(extB.lower_extension(), "gz");
|
||||
COMPARE(extB.complete_lower_extension(), "html.gz");
|
||||
#ifdef _WIN32
|
||||
|
||||
@@ -189,40 +189,40 @@ string SGPath::file() const {
|
||||
string SGPath::dir() const {
|
||||
int index = path.rfind(sgDirPathSep);
|
||||
if (index >= 0) {
|
||||
return path.substr(0, index);
|
||||
return path.substr(0, index);
|
||||
} else {
|
||||
return "";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
// get the base part of the path (everything but the extension.)
|
||||
string SGPath::base() const {
|
||||
unsigned int index = path.rfind(sgDirPathSep);
|
||||
if (index == string::npos) {
|
||||
index = 0; // no separator in the name
|
||||
} else {
|
||||
++index; // skip past the separator
|
||||
}
|
||||
|
||||
// find the first dot after the final separator
|
||||
unsigned int firstDot = path.find(".", index);
|
||||
if (firstDot == string::npos) {
|
||||
return path; // no extension, return whole path
|
||||
string SGPath::base() const
|
||||
{
|
||||
string::size_type index = path.rfind(".");
|
||||
string::size_type lastSep = path.rfind(sgDirPathSep);
|
||||
|
||||
// tolerate dots inside directory names
|
||||
if ((lastSep != string::npos) && (index < lastSep)) {
|
||||
return path;
|
||||
}
|
||||
|
||||
return path.substr(0, firstDot);
|
||||
if (index >= 0) {
|
||||
return path.substr(0, index);
|
||||
} else {
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
string SGPath::file_base() const
|
||||
{
|
||||
unsigned int index = path.rfind(sgDirPathSep);
|
||||
string::size_type index = path.rfind(sgDirPathSep);
|
||||
if (index == string::npos) {
|
||||
index = 0; // no separator in the name
|
||||
} else {
|
||||
++index; // skip past the separator
|
||||
}
|
||||
|
||||
unsigned int firstDot = path.find(".", index);
|
||||
string::size_type firstDot = path.find(".", index);
|
||||
if (firstDot == string::npos) {
|
||||
return path.substr(index); // no extensions
|
||||
}
|
||||
@@ -248,14 +248,14 @@ string SGPath::lower_extension() const {
|
||||
|
||||
string SGPath::complete_lower_extension() const
|
||||
{
|
||||
unsigned int index = path.rfind(sgDirPathSep);
|
||||
string::size_type index = path.rfind(sgDirPathSep);
|
||||
if (index == string::npos) {
|
||||
index = 0; // no separator in the name
|
||||
} else {
|
||||
++index; // skip past the separator
|
||||
}
|
||||
|
||||
int firstDot = path.find(".", index);
|
||||
string::size_type firstDot = path.find(".", index);
|
||||
if ((firstDot >= 0) && (path.find(sgDirPathSep, firstDot) == string::npos)) {
|
||||
return boost::to_lower_copy(path.substr(firstDot + 1));
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user