summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-10-16 19:15:30 +0200
committerMax Kellermann <max@duempel.org>2015-10-16 19:18:04 +0200
commit607c2c5ba2c19f29c94690c5cc1e28c894286f70 (patch)
tree74dc5ed9e277f4ff2cabc0b344d63c62b500f8b4
parent85f58eb0821dc30207afd21cb8dc087c2a450e28 (diff)
util/StringUtil: add StringAfterPrefix()
-rw-r--r--src/util/StringUtil.cxx16
-rw-r--r--src/util/StringUtil.hxx9
-rw-r--r--src/util/WStringUtil.cxx15
-rw-r--r--src/util/WStringUtil.hxx9
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.
*/