Module: kamailio Branch: master Commit: 7772e14fc298956f57429a67ea4524818b22a158 URL: https://github.com/kamailio/kamailio/commit/7772e14fc298956f57429a67ea452481...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2016-03-15T12:40:47+01:00
core: _strnstr() and _strnistr() defined in core
- alternative to strnstr() which is not in all OSes, pluse the insensitive option
---
Modified: str.c Modified: str.h
---
Diff: https://github.com/kamailio/kamailio/commit/7772e14fc298956f57429a67ea452481... Patch: https://github.com/kamailio/kamailio/commit/7772e14fc298956f57429a67ea452481...
---
diff --git a/str.c b/str.c index c9c4d33..fda76c9 100644 --- a/str.c +++ b/str.c @@ -1,5 +1,6 @@ /* * + * Copyright (C) 2015 kamailio.org * Copyright (C) 2014 Victor Seva vseva@sipwise.com * * This file is part of kamailio, a free SIP server. @@ -48,3 +49,53 @@ int str_append(str *orig, str *suffix, str *dest) memcpy(dest->s+orig->len, suffix->s, suffix->len); return 0; } + +/* +* Find the first occurrence of find in s, where the search is limited to the +* first slen characters of s. +*/ +char * _strnstr(const char* s, const char* find, size_t slen) +{ + char c, sc; + size_t len; + + if ((c = *find++) != '\0') { + len = strlen(find); + do { + do { + if (slen-- < 1 || (sc = *s++) == '\0') + return (NULL); + } while (sc != c); + if (len > slen) + return (NULL); + } while (strncmp(s, find, len) != 0); + s--; + } + return ((char *)s); +} + +/* + * Find the first case insensitive occurrence of find in s, where the + * search is limited to the first slen characters of s. + * Based on FreeBSD strnstr. + */ +char* _strnistr(const char *s, const char *find, size_t slen) +{ + char c, sc; + size_t len; + + if ((c = *find++) != '\0') { + len = strlen(find); + do { + do { + if ((sc = *s++) == '\0' || slen-- < 1) + return (NULL); + } while (sc != c); + if (len > slen) + return (NULL); + } while (strncasecmp(s, find, len) != 0); + s--; + } + return ((char *)s); +} + diff --git a/str.h b/str.h index 9ef8809..de226c7 100644 --- a/str.h +++ b/str.h @@ -21,6 +21,8 @@ #ifndef str_h #define str_h
+#include <string.h> + /** @defgroup str_string Counted-Length Strings * @{ * @@ -125,4 +127,7 @@ typedef struct _str str; */ int str_append(str *orig, str *suffix, str *dest);
+char* _strnstr(const char *s, const char *find, size_t slen); +char* _strnistr(const char *s, const char *find, size_t slen); + #endif