diff options
-rw-r--r-- | xbmc/utils/URIUtils.cpp | 19 | ||||
-rw-r--r-- | xbmc/utils/test/TestURIUtils.cpp | 10 |
2 files changed, 20 insertions, 9 deletions
diff --git a/xbmc/utils/URIUtils.cpp b/xbmc/utils/URIUtils.cpp index 7153beb719..faefd5d38c 100644 --- a/xbmc/utils/URIUtils.cpp +++ b/xbmc/utils/URIUtils.cpp @@ -218,16 +218,19 @@ void URIUtils::Split(const std::string& strFileNameAndPath, // everything to the right of the directory separator strFileName = strFileNameAndPath.substr(i+1); - // ignore options - i = strFileName.size() - 1; - while (i > 0) + // if actual uri, ignore options + if (IsURL(strFileNameAndPath)) { - char ch = strFileName[i]; - if (ch == '?') break; - else i--; + i = strFileName.size() - 1; + while (i > 0) + { + char ch = strFileName[i]; + if (ch == '?') break; + else i--; + } + if (i > 0) + strFileName = strFileName.substr(0, i); } - if (i > 0) - strFileName = strFileName.substr(0, i); } std::vector<std::string> URIUtils::SplitPath(const std::string& strPath) diff --git a/xbmc/utils/test/TestURIUtils.cpp b/xbmc/utils/test/TestURIUtils.cpp index 72be4563f4..7902aa108b 100644 --- a/xbmc/utils/test/TestURIUtils.cpp +++ b/xbmc/utils/test/TestURIUtils.cpp @@ -124,7 +124,15 @@ TEST_F(TestURIUtils, Split) std::string varpathOptional, varfileOptional; - URIUtils::Split("/path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional); + refpath = "/path/to/"; + reffile = "movie?movie.avi"; + URIUtils::Split("/path/to/movie?movie.avi", varpathOptional, varfileOptional); + EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str()); + EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str()); + + refpath = "file:///path/to/"; + reffile = "movie.avi"; + URIUtils::Split("file:///path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional); EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str()); EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str()); } |