Guillem Jover лет назад: 18
Родитель
Сommit
e99aa8dce4
8 измененных файлов с 82 добавлено и 2 удалено
  1. 9 0
      ChangeLog
  2. 0 1
      TODO
  3. 1 1
      configure.ac
  4. 1 0
      debian/changelog
  5. 2 0
      lib/tarfn.c
  6. 4 0
      libcompat/Makefile.am
  7. 33 0
      libcompat/strnlen.c
  8. 32 0
      libcompat/strnlen.h

+ 9 - 0
ChangeLog

@@ -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

+ 0 - 1
TODO

@@ -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.

+ 1 - 1
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])

+ 1 - 0
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

+ 2 - 0
lib/tarfn.c

@@ -16,6 +16,8 @@
 #include <tarfn.h>
 #include <dpkg.h>
 
+#include "strnlen.h"
+
 struct TarHeader {
 	char Name[100];
 	char Mode[8];

+ 4 - 0
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
+

+ 33 - 0
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;
+}

+ 32 - 0
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 */