jcs
/wallops
/amendments
/124
util: Add an implementation of strcasestr
jcs made amendment 124 2 months ago
--- util.c Fri Sep 20 20:58:32 2024
+++ util.c Fri Sep 20 21:00:58 2024
@@ -657,6 +657,43 @@ strncasecmp(const char *s1, const char *s2, size_t n)
return (0);
}
+char *
+strcasestr(const char *s, const char *find)
+{
+ const unsigned char *cm = strcasecmp_charmap;
+ const unsigned char *us = (const unsigned char *)s;
+ const unsigned char *ufind = (const unsigned char *)find;
+ const unsigned char *tus, *tufind;
+
+ if (find == NULL)
+ return NULL;
+ if (find[0] == '\0')
+ return (char *)s;
+
+ while (*us) {
+ if (cm[*us] == cm[*ufind]) {
+ tus = us;
+ tufind = ufind;
+
+ while (*tufind) {
+ if (*tus == '\0')
+ goto advance_us;
+ if (cm[*tus] != cm[*tufind])
+ goto advance_us;
+ tus++;
+ tufind++;
+ }
+
+ return (char *)us;
+ }
+
+advance_us:
+ us++;
+ }
+
+ return NULL;
+}
+
/*
* BSD warn(3) functions
*/
--- util.h Fri Sep 13 14:03:05 2024
+++ util.h Fri Sep 20 17:30:10 2024
@@ -153,6 +153,7 @@ long strpos_quoted(char *str, char c);
size_t hexify(unsigned char *input, size_t len, unsigned char *output);
size_t unhexify(unsigned char *input, size_t len, unsigned char *output);
char * OSTypeToString(OSType type);
+char * strcasestr(const char *s, const char *find);
short strcasecmp(const char *s1, const char *s2);
short strncasecmp(const char *s1, const char *s2, size_t n);