123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /*
- * string_nocasestr.c
- *
- * Find a string within another string in a case insensitive manner
- */
- #include "private.h"
- #include "lub/ctype.h"
- /*--------------------------------------------------------- */
- const char *lub_string_nocasestr(const char *cs, const char *ct)
- {
- const char *p = NULL;
- const char *result = NULL;
- while (*cs) {
- const char *q = cs;
- p = ct;
- /*lint -e155 Ignoring { }'ed sequence within an expression, 0 assumed
- * MACRO implementation uses braces to prevent multiple increments
- * when called.
- */
- /*lint -e506 Constant value Boolean
- * not the case because of tolower() evaluating to 0 under lint
- * (see above)
- */
- while (*p && *q
- && (lub_ctype_tolower(*p) == lub_ctype_tolower(*q))) {
- p++, q++;
- }
- if (0 == *p) {
- break;
- }
- cs++;
- }
- if (p && !*p) {
- /* we've found the first match of ct within cs */
- result = cs;
- }
- return result;
- }
- /*--------------------------------------------------------- */
- unsigned int lub_string_equal_part(const char *str1, const char *str2,
- bool_t utf8)
- {
- unsigned int cnt = 0;
- if (!str1 || !str2)
- return cnt;
- while (*str1 && *str2) {
- if (*str1 != *str2)
- break;
- cnt++;
- str1++;
- str2++;
- }
- if (!utf8)
- return cnt;
- /* UTF8 features */
- if (cnt && (UTF8_11 == (*(str1 - 1) & UTF8_MASK)))
- cnt--;
- return cnt;
- }
- /*--------------------------------------------------------- */
|