summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ChangeLog11
-rw-r--r--lib/strndup.c41
-rw-r--r--lib/strndup.h17
-rw-r--r--m4/ChangeLog4
-rw-r--r--m4/strndup.m46
5 files changed, 35 insertions, 44 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 2844e7c370..429b19087e 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,14 @@
+2006-09-27 Jim Meyering <jim@meyering.net>
+
+ This function could end up with a definition for a function
+ named __strndup, rather than rpl_strndup on a system with
+ incomplete weak_alias support.
+ * strndup.c (strndup): Rename from __strndup.
+ Remove #defines that used to map __strndup to strndup.
+ Don't use K&R prototypes.
+ Remove LIBC-related code, since this file is not sync'd with glibc.
+ * strndup.h: Revamp, accordingly.
+
2006-09-27 Paul Eggert <eggert@cs.ucla.edu>
* canon-host.c (canon_host_r): Work around bug in Darwin 7.9.0
diff --git a/lib/strndup.c b/lib/strndup.c
index 55cb560361..290f494f4e 100644
--- a/lib/strndup.c
+++ b/lib/strndup.c
@@ -1,8 +1,7 @@
-/* Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006 Free
- Software Foundation, Inc.
+/* A replacement function, for systems that lack strndup.
- NOTE: The canonical source of this file is maintained with the GNU C Library.
- Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+ Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006 Free
+ Software Foundation, Inc.
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
@@ -18,36 +17,18 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-#if !_LIBC
-# include <config.h>
-# include "strndup.h"
-#endif
+#include <config.h>
+#include "strndup.h"
#include <stdlib.h>
#include <string.h>
-#if !_LIBC
-# include "strnlen.h"
-# ifndef __strnlen
-# define __strnlen strnlen
-# endif
-#endif
-
-#undef __strndup
-#if _LIBC
-# undef strndup
-#endif
-
-#ifndef weak_alias
-# define __strndup strndup
-#endif
+#include "strnlen.h"
char *
-__strndup (s, n)
- const char *s;
- size_t n;
+strndup (char const *s, size_t n)
{
- size_t len = __strnlen (s, n);
+ size_t len = strnlen (s, n);
char *new = malloc (len + 1);
if (new == NULL)
@@ -56,9 +37,3 @@ __strndup (s, n)
new[len] = '\0';
return memcpy (new, s, len);
}
-#ifdef libc_hidden_def
-libc_hidden_def (__strndup)
-#endif
-#ifdef weak_alias
-weak_alias (__strndup, strndup)
-#endif
diff --git a/lib/strndup.h b/lib/strndup.h
index 8eae493adc..b8fb3cb317 100644
--- a/lib/strndup.h
+++ b/lib/strndup.h
@@ -1,5 +1,5 @@
/* Duplicate a size-bounded string.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006 Free Software Foundation, Inc.
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
@@ -15,16 +15,17 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-#if HAVE_STRNDUP
-
-/* Get strndup() declaration. */
#include <string.h>
-
-#else
-
#include <stddef.h>
+#ifdef __STRNDUP_PREFIX
+# define _GL_CONCAT(x, y) x ## y
+# define _GL_XCONCAT(x, y) _GL_CONCAT (x, y)
+# define __STRNDUP_ID(y) _GL_XCONCAT (__STRNDUP_PREFIX, y)
+# undef strndup
+# define strndup __STRNDUP_ID (strndup)
+# if !HAVE_DECL_STRNDUP
/* Return a newly allocated copy of at most N bytes of STRING. */
extern char *strndup (const char *string, size_t n);
-
+# endif
#endif
diff --git a/m4/ChangeLog b/m4/ChangeLog
index c50eb3d3d5..292c68d661 100644
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,7 @@
+2006-09-27 Jim Meyering <jim@meyering.net>
+
+ * strndup.m4: Modernize.
+
2006-09-27 Paul Eggert <eggert@cs.ucla.edu>
* fpending.m4 (gl_FUNC_FPENDING): Check for stdio_ext at most once.
diff --git a/m4/strndup.m4 b/m4/strndup.m4
index 75d301b082..65a50e8214 100644
--- a/m4/strndup.m4
+++ b/m4/strndup.m4
@@ -1,4 +1,4 @@
-# strndup.m4 serial 9
+# strndup.m4 serial 10
dnl Copyright (C) 2002-2003, 2005-2006 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -39,9 +39,9 @@ AC_DEFUN([gl_FUNC_STRNDUP],
AC_DEFINE([HAVE_STRNDUP], 1,
[Define if you have the strndup() function and it works.])
else
+ AC_DEFINE([__STRNDUP_PREFIX], [[rpl_]],
+ [Define to rpl_ if the strndup replacement function should be used.])
AC_LIBOBJ([strndup])
- AC_DEFINE(strndup, rpl_strndup,
- [Define to rpl_strndup if the replacement function should be used,])
gl_PREREQ_STRNDUP
fi
])