]> git.mxchange.org Git - simgear.git/commitdiff
Change (revert!) behaviour of SGPath::base, which broke TerraGear, when used with...
authorJames Turner <zakalawe@mac.com>
Wed, 26 Oct 2011 18:57:57 +0000 (19:57 +0100)
committerJames Turner <zakalawe@mac.com>
Wed, 26 Oct 2011 18:57:57 +0000 (19:57 +0100)
simgear/misc/path_test.cxx
simgear/misc/sg_path.cxx

index 4d976e01ffdd52328dfc9dedc0e82f2e263addfc..cda488590c42d2921aba99e0fb13273c75e3ce6b 100644 (file)
@@ -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
index bff1a61c17481c5a7ebc407d023a832ba79e91b7..2a98b34ec4b88aa75262f9c860b8b803c159a8b3 100644 (file)
@@ -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 {