]> err.no Git - dpkg/commitdiff
libcompat: Add strnlen
authorGuillem Jover <guillem@debian.org>
Sun, 23 Mar 2008 17:18:24 +0000 (19:18 +0200)
committerGuillem Jover <guillem@debian.org>
Sun, 23 Mar 2008 18:53:29 +0000 (20:53 +0200)
ChangeLog
TODO
configure.ac
debian/changelog
lib/tarfn.c
libcompat/Makefile.am
libcompat/strnlen.c [new file with mode: 0644]
libcompat/strnlen.h [new file with mode: 0644]

index db204d58cd9b5773589b24a0bcb08cbba7135ee1..1264c515251cc6dbb32aed9da7229f44be971580 100644 (file)
--- a/ChangeLog
+++ b/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
diff --git a/TODO b/TODO
index 024fa9da38384f8c4630fd2813e8ad10879637cc..4fb96932bbcd0ffa1209d09a7ed9e75d684ce00a 100644 (file)
--- a/TODO
+++ b/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.
index 1f3972c10034a7f8145bdcfabbad24a1227db558..beb38fc826b88574b907b9640041ac847d7c749a 100644 (file)
@@ -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])
index 31d6cac4f78c232027a280c7ac34ff369e0c501b..1c421ea0e010d7805ce6a7ec78ee039e554c8327 100644 (file)
@@ -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
index 66b33f289d7d6d83e5ba82b614dc80b70e53bd02..2aa8b9157038c5074f1411dc8e36eee97bc0068a 100644 (file)
@@ -16,6 +16,8 @@
 #include <tarfn.h>
 #include <dpkg.h>
 
+#include "strnlen.h"
+
 struct TarHeader {
        char Name[100];
        char Mode[8];
index ecb89d0ba94e0e33f141dcede2ae7c135ff04567..ac0a656d2f26eb7e89ab161af3d465648296d1f1 100644 (file)
@@ -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 (file)
index 0000000..09ba788
--- /dev/null
@@ -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 (file)
index 0000000..ba74dba
--- /dev/null
@@ -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 */