diff options
author | Max Kellermann <max@duempel.org> | 2015-10-16 19:15:30 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-10-16 19:18:04 +0200 |
commit | 607c2c5ba2c19f29c94690c5cc1e28c894286f70 (patch) | |
tree | 74dc5ed9e277f4ff2cabc0b344d63c62b500f8b4 | |
parent | 85f58eb0821dc30207afd21cb8dc087c2a450e28 (diff) |
util/StringUtil: add StringAfterPrefix()
-rw-r--r-- | src/util/StringUtil.cxx | 16 | ||||
-rw-r--r-- | src/util/StringUtil.hxx | 9 | ||||
-rw-r--r-- | src/util/WStringUtil.cxx | 15 | ||||
-rw-r--r-- | src/util/WStringUtil.hxx | 9 |
4 files changed, 49 insertions, 0 deletions
diff --git a/src/util/StringUtil.cxx b/src/util/StringUtil.cxx index bb454e904..b9c99eb4a 100644 --- a/src/util/StringUtil.cxx +++ b/src/util/StringUtil.cxx @@ -18,6 +18,7 @@ */ #include "StringUtil.hxx" +#include "StringAPI.hxx" #include "CharUtil.hxx" #include "ASCII.hxx" @@ -45,6 +46,21 @@ StringEndsWith(const char *haystack, const char *needle) } const char * +StringAfterPrefix(const char *string, const char *prefix) +{ +#if !CLANG_CHECK_VERSION(3,6) + /* disabled on clang due to -Wtautological-pointer-compare */ + assert(string != nullptr); + assert(prefix != nullptr); +#endif + + size_t prefix_length = strlen(prefix); + return StringIsEqual(string, prefix, prefix_length) + ? string + prefix_length + : nullptr; +} + +const char * FindStringSuffix(const char *p, const char *suffix) { const size_t p_length = strlen(p); diff --git a/src/util/StringUtil.hxx b/src/util/StringUtil.hxx index 2d0773a62..7e6dc4d61 100644 --- a/src/util/StringUtil.hxx +++ b/src/util/StringUtil.hxx @@ -37,6 +37,15 @@ bool StringEndsWith(const char *haystack, const char *needle); /** + * Returns the portion of the string after a prefix. If the string + * does not begin with the specified prefix, this function returns + * nullptr. + */ +gcc_pure gcc_nonnull_all +const char * +StringAfterPrefix(const char *string, const char *prefix); + +/** * Check if the given string ends with the specified suffix. If yes, * returns the position of the suffix, and nullptr otherwise. */ diff --git a/src/util/WStringUtil.cxx b/src/util/WStringUtil.cxx index b70a7749e..19e4fc68d 100644 --- a/src/util/WStringUtil.cxx +++ b/src/util/WStringUtil.cxx @@ -43,6 +43,21 @@ StringEndsWith(const wchar_t *haystack, const wchar_t *needle) } const wchar_t * +StringAfterPrefix(const wchar_t *string, const wchar_t *prefix) +{ +#if !CLANG_CHECK_VERSION(3,6) + /* disabled on clang due to -Wtautological-pointer-compare */ + assert(string != nullptr); + assert(prefix != nullptr); +#endif + + size_t prefix_length = StringLength(prefix); + return StringIsEqual(string, prefix, prefix_length) + ? string + prefix_length + : nullptr; +} + +const wchar_t * FindStringSuffix(const wchar_t *p, const wchar_t *suffix) { const size_t p_length = StringLength(p); diff --git a/src/util/WStringUtil.hxx b/src/util/WStringUtil.hxx index bfbfb5d1f..3dde0162e 100644 --- a/src/util/WStringUtil.hxx +++ b/src/util/WStringUtil.hxx @@ -33,6 +33,15 @@ bool StringEndsWith(const wchar_t *haystack, const wchar_t *needle); /** + * Returns the portion of the string after a prefix. If the string + * does not begin with the specified prefix, this function returns + * nullptr. + */ +gcc_nonnull_all +const wchar_t * +StringAfterPrefix(const wchar_t *string, const wchar_t *prefix); + +/** * Check if the given string ends with the specified suffix. If yes, * returns the position of the suffix, and nullptr otherwise. */ |