]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
first phase of proper fix for portable string function problems (bug #4669)
authorKevin P. Fleming <kpfleming@digium.com>
Fri, 15 Jul 2005 00:39:01 +0000 (00:39 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Fri, 15 Jul 2005 00:39:01 +0000 (00:39 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6133 65c4cc65-6c06-0410-ace0-fbb531ad65f3

Makefile
channel.c
include/asterisk/strings.h
utils.c

index afdbcafbc156521dd3e6117c0b9da29d862142fe..ba0912feb5d5395d52aee999af37ecb3e19a250b 100755 (executable)
--- a/Makefile
+++ b/Makefile
@@ -249,7 +249,7 @@ LIBS+=-lresolv
 CFLAGS+=-D__Darwin__
 endif
 ifeq (${OSARCH},FreeBSD)
-LIBS+=-lcrypto -lstrfunc
+LIBS+=-lcrypto
 endif
 ifeq (${OSARCH},NetBSD)
 LIBS+=-lpthread -lcrypto -lm -L$(CROSS_COMPILE_TARGET)/usr/local/lib -L$(CROSS_COMPILE_TARGET)/usr/pkg/lib -lncurses
index 2bfe485e226b89d43aa16f5018b021f968b814d0..ae9d98f6b4cb56df75c818f3b66335e5ce40c12f 100755 (executable)
--- a/channel.c
+++ b/channel.c
 #error "You need newer zaptel!  Please cvs update zaptel"
 #endif
 #endif
-#ifdef __FreeBSD__
-#include <strfunc.h>
-#if (!defined(__STRFUNC_H__) && (!defined(STRFUNC_H)))
-#error "Please install the strfunc library located in the ports collection at /usr/ports/devel/libstrfunc"
-#endif
-#endif
 
 #include "asterisk.h"
 
@@ -1759,8 +1753,8 @@ char *ast_recvtext(struct ast_channel *chan, int timeout)
                        break; /* no frame */
                if (f->frametype == AST_FRAME_CONTROL && f->subclass == AST_CONTROL_HANGUP)
                        done = 1;       /* force a break */
-               else if (f->frametype == AST_FRAME_TEXT) {      /* what we want */
-                       buf = strndup((char *)f->data, f->datalen);     /* dup and break */
+               else if (f->frametype == AST_FRAME_TEXT) {                      /* what we want */
+                       buf = ast_strndup((char *) f->data, f->datalen);        /* dup and break */
                        done = 1;
                }
                ast_frfree(f);
index 2b845a8374bc90ed2a771d5180538e7fa07b9a8c..f6902ef1b3fbb27b9baaff795a3d67fcd859a555 100755 (executable)
@@ -199,8 +199,12 @@ struct ast_realloca {
 
 #ifdef __linux__
 #define ast_strcasestr strcasestr
-#else
-extern char *ast_strcasestr(const char *, const char *);
-#endif /* __linux__ */
+#define ast_strndup    strndup
+#define ast_strnlen    strnlen
+#else /* !__linux__ */
+char *ast_strcasestr(const char *, const char *);
+char *ast_strndup(const char *, size_t);
+size_t ast_strnlen(const char *, size_t);
+#endif /* !__linux__ */
 
 #endif /* _ASTERISK_STRINGS_H */
diff --git a/utils.c b/utils.c
index 1319f71b92d1a44db97a64941cdb816e6dfd9101..72b7f9be61910e6a3388255afbac0461c5b46241 100755 (executable)
--- a/utils.c
+++ b/utils.c
@@ -535,4 +535,28 @@ char *ast_strcasestr(const char *haystack, const char *needle)
                return NULL;
        }
 }
-#endif /* LINUX */
+
+size_t ast_strnlen(const char *s, size_t n)
+{
+       size_t len;
+
+       for (len=0; len < n; len++)
+               if (s[len] == '\0')
+                       break;
+
+       return len;
+}
+
+char *ast_strndup(const char *s, size_t n)
+{
+       size_t len = ast_strnlen(s, n);
+       char *new = malloc(len + 1);
+
+       if (!new)
+               return NULL;
+
+       new[len] = '\0';
+       return memcpy(new, s, len);
+}
+
+#endif /* !LINUX */