From ae2709a72b748e1656b7067951e0532dfe45ae2d Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sat, 10 Oct 2015 17:15:49 +0200 Subject: add strstarts strends strcasestarts strcaseends wcsstarts wcsends wcscasestarts wcscaseends MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/wchar/wcsstr.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) (limited to 'src/wchar') diff --git a/src/wchar/wcsstr.c b/src/wchar/wcsstr.c index f54ff6e..bc2bbec 100644 --- a/src/wchar/wcsstr.c +++ b/src/wchar/wcsstr.c @@ -192,3 +192,87 @@ wchar_t* wmemcasemem(const wchar_t* haystack, size_t haystack_length, #undef CASE } + +/** + * Check whether a string starts with a specific string. + * This check is case sensitive. + * + * This is a slibc extension. + * + * @param string The string to inspect. + * @param desired The desired beginning of the string. + * @return `string` if `string` begins with + * `desired`, `NULL` otherwise. + */ +wchar_t* wcsstarts(const wchar_t* string, const wchar_t* desired) +{ + size_t n = wcslen(string); + size_t m = wcslen(desired); + if (n < m) + return NULL; + return wmemcmp(string, desired, m) ? NULL : string; +} + + +/** + * Check whether a string ends with a specific string. + * This check is case sensitive. + * + * This is a slibc extension. + * + * @param string The string to inspect. + * @param desired The desired ending of the string. + * @return The `string`, where `desired` beings if + * `string` ends with `desired`, `NULL` otherwise. + */ +wchar_t* wcsends(const wchar_t* string, const wchar_t* desired) +{ + size_t n = wcslen(string); + size_t m = wcslen(desired); + if (n < m) + return NULL; + return wmemcmp(string + (n - m), desired, m) ? NULL : (string + n); +} + + +/** + * Check whether a string starts with a specific string. + * This check is case insensitive. + * + * This is a slibc extension. + * + * @param string The string to inspect. + * @param desired The desired beginning of the string. + * @return `string` if `string` begins with + * `desired`, `NULL` otherwise. + */ +wchar_t* wcscasestarts(const wchar_t* string, const wchar_t* desired) +{ + size_t n = wcslen(string); + size_t m = wcslen(desired); + if (n < m) + return NULL; + return wmemcasecmp(string, desired, m) ? NULL : string; +} + + +/** + * Check whether a string ends with a specific string. + * This check is case insensitive. + * + * This is a slibc extension. + * + * @param string The string to inspect. + * @param desired The desired ending of the string. + * @return The `string`, where `desired` beings if + * `string` ends with `desired`, `NULL` otherwise. + */ +wchar_t* wcscaseends(const wchar_t* string, const wchar_t* desired) +{ + size_t n = wcslen(string); + size_t m = wcslen(desired); + if (n < m) + return NULL; + return wmemcasecmp(string + (n - m), desired, m) ? NULL : (string + n); +} + -- cgit v1.2.3-70-g09d2