+2008-03-23 Guillem Jover <guillem@debian.org>
+
+ * configure.ac (DPKG_CHECK_COMPAT_FUNCS): Add 'strnlen'.
+ * libcompat/Makefile.am [!HAVE_STRNLEN] (libcompat_a_SOURCES): Add
+ 'strnlen.c' and 'strnlen.h'.
+ * libcompat/strnlen.c: New file (import from Simon Josefsson).
+ * libcompat/strnlen.h: Likewise.
+ * lib/tarfn.c: Include "strnlen.h".
+
2008-03-22 Raphael Hertzog <hertzog@debian.org>
* scripts/t/200_Dpkg_Shlibs.t: Fix test suite to handle the
* Cleanup libcompat:
- Add fnmatch, IRIX5 doesn't have it.
- - Add strnlen (GNU extension).
- Cut lib/compat.c into little pieces and move them here.
* Add Wig&Pen source package generation support.
# Checks for library functions.
DPKG_FUNC_VA_COPY
-DPKG_CHECK_COMPAT_FUNCS([getopt getopt_long obstack_free])
+DPKG_CHECK_COMPAT_FUNCS([getopt getopt_long strnlen obstack_free])
AC_CHECK_FUNCS([vsnprintf snprintf strtoul strerror strsignal alphasort \
isascii bcopy memcpy scandir unsetenv lchown setsid \
getdtablesize])
* Add Raphael Hertzog to Uploaders, and remove Brendan O'Dea and
Christian Perrier with their permission.
* Use functions from libcompat when those are not provided by the system.
+ - Add strnlen to libcompat.
* Change dpkg-gencontrol to not output the Homapage field on udeb.
* Reintroduce 'no-debsig' back in dpkg.cfg to avoid failing to install any
package when debsig-verify is installed. Closes: #311843
#include <tarfn.h>
#include <dpkg.h>
+#include "strnlen.h"
+
struct TarHeader {
char Name[100];
char Mode[8];
libcompat_a_SOURCES += obstack.c obstack.h
endif
+if !HAVE_STRNLEN
+libcompat_a_SOURCES += strnlen.c strnlen.h
+endif
+
--- /dev/null
+/* Find the length of STRING, but scan at most MAXLEN characters.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+ Written by Simon Josefsson.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "strnlen.h"
+
+/* Find the length of STRING, but scan at most MAXLEN characters.
+ If no '\0' terminator is found in that many characters, return MAXLEN. */
+
+size_t
+strnlen (const char *string, size_t maxlen)
+{
+ const char *end = memchr (string, '\0', maxlen);
+ return end ? (size_t) (end - string) : maxlen;
+}
--- /dev/null
+/* Find the length of STRING, but scan at most MAXLEN characters.
+ Copyright (C) 2005 Free Software Foundation, Inc.
+ Written by Simon Josefsson.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef STRNLEN_H
+#define STRNLEN_H
+
+/* Get strnlen declaration, if available. */
+#include <string.h>
+
+#if defined HAVE_DECL_STRNLEN && !HAVE_DECL_STRNLEN
+/* Find the length (number of bytes) of STRING, but scan at most
+ MAXLEN bytes. If no '\0' terminator is found in that many bytes,
+ return MAXLEN. */
+extern size_t strnlen(const char *string, size_t maxlen);
+#endif
+
+#endif /* STRNLEN_H */