From e6a4feb763749ff0c63558db456e617915fd1386 Mon Sep 17 00:00:00 2001 From: hasso Date: Mon, 19 Sep 2005 09:53:21 +0000 Subject: * configure.ac: Test existance of strndup. * lib/str.[ch]: Add strndup() from glibc. --- ChangeLog | 4 ++++ configure.ac | 4 ++-- lib/ChangeLog | 4 ++++ lib/str.c | 18 ++++++++++++++++++ lib/str.h | 6 +++++- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e12339a9..c4f8950b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-09-19 Hasso Tepper + + * configure.ac: Test existance of strndup. + 2005-08-25 Paul Jakma * configure.ac: Add -fno-omit-frame-pointer after -Os in default diff --git a/configure.ac b/configure.ac index 15bd0751..7aa9844c 100755 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ ## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro ## Portions Copyright (c) 2003 Paul Jakma ## -## $Id: configure.ac,v 1.111 2005/08/25 14:50:05 paul Exp $ +## $Id: configure.ac,v 1.112 2005/09/19 09:53:21 hasso Exp $ AC_PREREQ(2.53) AC_INIT(Quagga, 0.99.1, [http://bugzilla.quagga.net]) @@ -497,7 +497,7 @@ dnl check existance of functions dnl ---------------------------- AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \ strlcat strlcpy if_nametoindex if_indextoname getifaddrs \ - fcntl strnlen) + fcntl strnlen strndup) AC_CHECK_FUNCS(setproctitle, , [AC_CHECK_LIB(util, setproctitle, [LIBS="$LIBS -lutil" diff --git a/lib/ChangeLog b/lib/ChangeLog index 08d6278f..53e1eb22 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2005-09-19 Hasso Tepper + + * str.[ch]: Add strndup() from glibc. + 2005-09-05 Paul Jakma * command.c: (install_element) be more robust. Eg, cmd_init diff --git a/lib/str.c b/lib/str.c index 00d03194..4ab71e19 100644 --- a/lib/str.c +++ b/lib/str.c @@ -11,6 +11,9 @@ Note that these are not terribly efficient, since they make more than one pass over the argument strings. At some point, they should be optimized. + + The implementation of strndup is copied from glibc-2.3.5: + Copyright (C) 1996, 1997, 1998, 2001, 2002 Free Software Foundation, Inc. */ @@ -89,3 +92,18 @@ strnlen(const char *s, size_t maxlen) return (p = (const char *)memchr(s, '\0', maxlen)) ? (size_t)(p-s) : maxlen; } #endif + +#ifndef HAVE_STRNDUP +char * +strndup (const char *s, size_t maxlen) +{ + size_t len = strnlen (s, maxlen); + char *new = (char *) malloc (len + 1); + + if (new == NULL) + return NULL; + + new[len] = '\0'; + return (char *) memcpy (new, s, len); +} +#endif diff --git a/lib/str.h b/lib/str.h index 145863d2..7b83fe1c 100644 --- a/lib/str.h +++ b/lib/str.h @@ -1,5 +1,5 @@ /* - * $Id: str.h,v 1.3 2005/05/06 21:25:49 paul Exp $ + * $Id: str.h,v 1.4 2005/09/19 09:53:21 hasso Exp $ */ #ifndef _ZEBRA_STR_H @@ -25,5 +25,9 @@ extern size_t strlcat(char *, const char *, size_t); extern size_t strnlen(const char *s, size_t maxlen); #endif +#ifndef HAVE_STRNDUP +extern char * strndup (const char *, size_t); +#endif + #endif /* _ZEBRA_STR_H */ -- cgit v1.2.1