diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-02-12 01:23:09 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-02-12 01:23:09 +0300 |
commit | 541bd299d521666d7d02b4f36b75f31dd8a2d64f (patch) | |
tree | 0d25d0af90cbe5b8698ad2f3c4a4610c9d4b0d75 /src/utils/stringutils.cpp | |
parent | bb156df11431e3eb286ddd3311adf1ac710945e0 (diff) | |
download | mv-541bd299d521666d7d02b4f36b75f31dd8a2d64f.tar.gz mv-541bd299d521666d7d02b4f36b75f31dd8a2d64f.tar.bz2 mv-541bd299d521666d7d02b4f36b75f31dd8a2d64f.tar.xz mv-541bd299d521666d7d02b4f36b75f31dd8a2d64f.zip |
Fix some possible errors in string untils.
Diffstat (limited to 'src/utils/stringutils.cpp')
-rw-r--r-- | src/utils/stringutils.cpp | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp index 798690602..9184ba79d 100644 --- a/src/utils/stringutils.cpp +++ b/src/utils/stringutils.cpp @@ -105,6 +105,7 @@ std::string strprintf(char const *format, ...) return res; } +/* std::string &removeBadChars(std::string &str) { std::string::size_type pos; @@ -118,6 +119,7 @@ std::string &removeBadChars(std::string &str) return str; } +*/ std::string removeColors(std::string msg) { @@ -316,27 +318,37 @@ void getSafeUtf8String(std::string text, char *buf) std::string getFileName(std::string path) { - size_t pos = path.rfind("/"); - if (pos == std::string::npos) - pos = path.rfind("\\"); - if (pos == std::string::npos) + size_t pos1 = path.rfind("/"); + size_t pos2 = path.rfind("\\"); + if (pos1 == std::string::npos) + pos1 = pos2; + else if (pos2 != std::string::npos && pos2 > pos1) + pos1 = pos2; + + if (pos1 == std::string::npos) return path; - return path.substr(pos + 1); + return path.substr(pos1 + 1); } std::string getFileDir(std::string path) { - size_t pos = path.rfind("/"); - if (pos == std::string::npos) - pos = path.rfind("\\"); - if (pos == std::string::npos) - return ""; - return path.substr(0, pos); + size_t pos1 = path.rfind("/"); + size_t pos2 = path.rfind("\\"); + if (pos1 == std::string::npos) + pos1 = pos2; + else if (pos2 != std::string::npos && pos2 > pos1) + pos1 = pos2; + + if (pos1 == std::string::npos) + return path; + return path.substr(0, pos1); } std::string& replaceAll(std::string& context, const std::string& from, const std::string& to) { + if (from.empty()) + return context; size_t lookHere = 0; size_t foundHere; while ((foundHere = context.find(from, lookHere)) != std::string::npos) |