Commit 607c2c5b authored by Max Kellermann's avatar Max Kellermann

util/StringUtil: add StringAfterPrefix()

parent 85f58eb0
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
*/ */
#include "StringUtil.hxx" #include "StringUtil.hxx"
#include "StringAPI.hxx"
#include "CharUtil.hxx" #include "CharUtil.hxx"
#include "ASCII.hxx" #include "ASCII.hxx"
...@@ -45,6 +46,21 @@ StringEndsWith(const char *haystack, const char *needle) ...@@ -45,6 +46,21 @@ StringEndsWith(const char *haystack, const char *needle)
} }
const char * 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) FindStringSuffix(const char *p, const char *suffix)
{ {
const size_t p_length = strlen(p); const size_t p_length = strlen(p);
......
...@@ -37,6 +37,15 @@ bool ...@@ -37,6 +37,15 @@ bool
StringEndsWith(const char *haystack, const char *needle); 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, * Check if the given string ends with the specified suffix. If yes,
* returns the position of the suffix, and nullptr otherwise. * returns the position of the suffix, and nullptr otherwise.
*/ */
......
...@@ -43,6 +43,21 @@ StringEndsWith(const wchar_t *haystack, const wchar_t *needle) ...@@ -43,6 +43,21 @@ StringEndsWith(const wchar_t *haystack, const wchar_t *needle)
} }
const wchar_t * 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) FindStringSuffix(const wchar_t *p, const wchar_t *suffix)
{ {
const size_t p_length = StringLength(p); const size_t p_length = StringLength(p);
......
...@@ -33,6 +33,15 @@ bool ...@@ -33,6 +33,15 @@ bool
StringEndsWith(const wchar_t *haystack, const wchar_t *needle); 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, * Check if the given string ends with the specified suffix. If yes,
* returns the position of the suffix, and nullptr otherwise. * returns the position of the suffix, and nullptr otherwise.
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment