diff options
author | Guillem Jover <guillem@debian.org> | 2008-03-23 19:18:24 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2008-03-23 20:53:29 +0200 |
commit | e99aa8dce43e67f8e83b855a78ee9894c9038357 (patch) | |
tree | c0dced5e9c52c682dbc1cd10670e41362c2fd40a | |
parent | 75159aa48089b25f75a80464bdd198ce7f259c1a (diff) | |
download | dpkg-e99aa8dce43e67f8e83b855a78ee9894c9038357.tar.gz |
libcompat: Add strnlen
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | TODO | 1 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | lib/tarfn.c | 2 | ||||
-rw-r--r-- | libcompat/Makefile.am | 4 | ||||
-rw-r--r-- | libcompat/strnlen.c | 33 | ||||
-rw-r--r-- | libcompat/strnlen.h | 32 |
8 files changed, 82 insertions, 2 deletions
@@ -1,3 +1,12 @@ +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 @@ -36,7 +36,6 @@ lenny * 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. diff --git a/configure.ac b/configure.ac index 1f3972c10..beb38fc82 100644 --- a/configure.ac +++ b/configure.ac @@ -92,7 +92,7 @@ DPKG_C_ATTRIBUTE # 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]) diff --git a/debian/changelog b/debian/changelog index 31d6cac4f..1c421ea0e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,6 +14,7 @@ dpkg (1.14.17) UNRELEASED; urgency=low * 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 diff --git a/lib/tarfn.c b/lib/tarfn.c index 66b33f289..2aa8b9157 100644 --- a/lib/tarfn.c +++ b/lib/tarfn.c @@ -16,6 +16,8 @@ #include <tarfn.h> #include <dpkg.h> +#include "strnlen.h" + struct TarHeader { char Name[100]; char Mode[8]; diff --git a/libcompat/Makefile.am b/libcompat/Makefile.am index ecb89d0ba..ac0a656d2 100644 --- a/libcompat/Makefile.am +++ b/libcompat/Makefile.am @@ -20,3 +20,7 @@ if !HAVE_OBSTACK_FREE libcompat_a_SOURCES += obstack.c obstack.h endif +if !HAVE_STRNLEN +libcompat_a_SOURCES += strnlen.c strnlen.h +endif + diff --git a/libcompat/strnlen.c b/libcompat/strnlen.c new file mode 100644 index 000000000..09ba788ab --- /dev/null +++ b/libcompat/strnlen.c @@ -0,0 +1,33 @@ +/* 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; +} diff --git a/libcompat/strnlen.h b/libcompat/strnlen.h new file mode 100644 index 000000000..ba74dba7b --- /dev/null +++ b/libcompat/strnlen.h @@ -0,0 +1,32 @@ +/* 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 */ |