* lib/str.[ch]: Add strndup() from glibc.
+2005-09-19 Hasso Tepper <hasso at quagga.net>
+
+ * configure.ac: Test existance of strndup.
+
2005-08-25 Paul Jakma <paul@jakma.org>
* configure.ac: Add -fno-omit-frame-pointer after -Os in default
## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
##
-## $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])
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"
+2005-09-19 Hasso Tepper <hasso at quagga.net>
+
+ * str.[ch]: Add strndup() from glibc.
+
2005-09-05 Paul Jakma <paul.jakma@sun.com>
* command.c: (install_element) be more robust. Eg, cmd_init
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.
*/
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
/*
- * $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
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 */