Module: kamailio
Branch: master
Commit: 7772e14fc298956f57429a67ea4524818b22a158
URL:
https://github.com/kamailio/kamailio/commit/7772e14fc298956f57429a67ea45248…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)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/7772e14fc298956f57429a67ea45248…
Patch:
https://github.com/kamailio/kamailio/commit/7772e14fc298956f57429a67ea45248…
---
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(a)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