[sr-dev] git:master: Added own _strnstr method as strnstr is BSD only

Marius Zbihlei marius.zbihlei at 1and1.ro
Sat Feb 23 15:59:55 CET 2013


Module: sip-router
Branch: master
Commit: 402e44861c489d4246a0fe1f57bc2cc5fe7a70c9
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=402e44861c489d4246a0fe1f57bc2cc5fe7a70c9

Author: Marius Zbihlei <mzbihlei at mzbihlei-macbookpro.local>
Committer: Marius Zbihlei <mzbihlei at mzbihlei-macbookpro.local>
Date:   Sat Feb 23 14:58:07 2013 +0000

Added own _strnstr method as strnstr is BSD only

This cause the tm module to not be loaded on non-BSD (i.e. Linux) system
Problem reported by Joel Vandal.

---

 modules/tm/t_msgbuilder.c |   27 +++++++++++++++++++++++++--
 1 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/modules/tm/t_msgbuilder.c b/modules/tm/t_msgbuilder.c
index ffdcb7b..60328b3 100644
--- a/modules/tm/t_msgbuilder.c
+++ b/modules/tm/t_msgbuilder.c
@@ -1475,11 +1475,34 @@ static inline char* print_callid(char* w, dlg_t* dialog, struct cell* t)
 	memapp(w, CRLF, CRLF_LEN);
 	t->callid.s = w;
 	t->callid.len = CALLID_LEN + dialog->id.call_id.len + CRLF_LEN;
-
+	
 	w = print_callid_mini(w, dialog->id.call_id);
 	return w;
 }
 
+/*
+* Find the first occurrence of find in s, where the search is limited to the
+* first slen characters of s.
+*/
+static
+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);
+}
 
 /*
  * Create a request
@@ -1542,7 +1565,7 @@ char* build_uac_req(str* method, str* headers, str* body, dlg_t* dialog, int bra
 	w = print_routeset(w, dialog);                        /* Route set */
 
 	if(headers==NULL || headers->len<15
-			|| strnstr(headers->s, "Max-Forwards:", headers->len)==NULL)
+			|| _strnstr(headers->s, "Max-Forwards:", headers->len)==NULL)
 		memapp(w, MAXFWD_HEADER, MAXFWD_HEADER_LEN);      /* Max-forwards */
 
      /* Content-Length */




More information about the sr-dev mailing list