diff options
-rw-r--r-- | common/str.cpp | 12 | ||||
-rw-r--r-- | common/str.h | 6 |
2 files changed, 18 insertions, 0 deletions
diff --git a/common/str.cpp b/common/str.cpp index faf84d722f..ad02bfdaf8 100644 --- a/common/str.cpp +++ b/common/str.cpp @@ -665,6 +665,18 @@ String lastPathComponent(const String &path, const char sep) { return String(first, last); } +String String::stringByAppendingPathComponent(String component, char sep) const { + if (lastChar() == sep && component.firstChar() == sep) { + return String::format("%s%s", c_str(), component.c_str() + 1); + } + + if (lastChar() == sep || component.firstChar() == sep) { + return String::format("%s%s", c_str(), component.c_str()); + } + + return String::format("%s%c%s", c_str(), sep, component.c_str()); +} + String normalizePath(const String &path, const char sep) { if (path.empty()) return path; diff --git a/common/str.h b/common/str.h index dede87a005..f156290e94 100644 --- a/common/str.h +++ b/common/str.h @@ -180,6 +180,7 @@ public: inline uint size() const { return _size; } inline bool empty() const { return (_size == 0); } + char firstChar() const { return (_size > 0) ? _str[0] : 0; } char lastChar() const { return (_size > 0) ? _str[_size - 1] : 0; } char operator[](int idx) const { @@ -217,6 +218,11 @@ public: */ void trim(); + /** + * Add a path component + */ + String stringByAppendingPathComponent(String component, char sep = '/') const; + uint hash() const; /** |