Implement minimalistic strcasestr (#5411)
[betaflight.git] / src / main / common / string_light.c
blob731fca621a1251f231df903317b42b777448ca33
1 /*
2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
18 #include <limits.h>
19 #include <ctype.h>
20 #include <string.h>
22 #include "typeconversion.h"
24 int isalnum(int c)
26 return isdigit(c) || isupper(c) || islower(c);
29 int isdigit(int c)
31 return (c >= '0' && c <= '9');
34 int isupper(int c)
36 return (c >= 'A' && c <= 'Z');
39 int islower(int c)
41 return (c >= 'a' && c <= 'z');
44 int isspace(int c)
46 return (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v');
49 int tolower(int c)
51 return isupper(c) ? (c) - 'A' + 'a' : c;
54 int toupper(int c)
56 return islower(c) ? (c) - 'a' + 'A' : c;
59 int strcasecmp(const char * s1, const char * s2)
61 return strncasecmp(s1, s2, (size_t)-1);
64 int strncasecmp(const char * s1, const char * s2, size_t n)
66 const unsigned char * ucs1 = (const unsigned char *) s1;
67 const unsigned char * ucs2 = (const unsigned char *) s2;
69 int d = 0;
71 for ( ; n != 0; n--) {
72 const int c1 = tolower(*ucs1++);
73 const int c2 = tolower(*ucs2++);
74 if (((d = c1 - c2) != 0) || (c2 == '\0')) {
75 break;
79 return d;
82 char *strcasestr(const char *haystack, const char *needle)
84 int nLen = strlen(needle);
85 do {
86 if (!strncasecmp(haystack, needle, nLen)) {
87 return (char *)haystack;
89 haystack++;
90 } while (*haystack);
91 return NULL;