bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

stpncpy: allow stpncpy to be defined as a macro


From: Bruno Haible
Subject: stpncpy: allow stpncpy to be defined as a macro
Date: Mon, 16 Aug 2010 02:10:00 +0200
User-agent: KMail/1.9.9

Hi,

Jeremy Huddleston recently reported a build failure of gettext on some
not-yet-released FreeBSD based system, due to the gnulib stpncpy module.
On that system, stpncpy is defined as a "complex macro", causing
  1) the gl_FUNC_STPNCPY macro to think that stpncpy does not work,
  2) the string.h replacement to redeclare it, leading to a build failure.

I'm committing this patch which will fix problem 2 and likely also fix
problem 1.


2010-08-15  Bruno Haible  <address@hidden>

        stpncpy: Allow stpncpy to be defined as a macro.
        * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Don't attempt to redeclare stpncpy
        if it's already correctly declared.
        * lib/string.in.h (stpncpy): Undefine before redefining.
        Reported by Jeremy Huddleston <address@hidden>.

--- lib/string.in.h.orig        Mon Aug 16 01:56:33 2010
+++ lib/string.in.h     Mon Aug 16 01:56:10 2010
@@ -233,6 +233,7 @@
 #if @GNULIB_STPNCPY@
 # if @REPLACE_STPNCPY@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef stpncpy
 #   define stpncpy rpl_stpncpy
 #  endif
 _GL_FUNCDECL_RPL (stpncpy, char *,
--- m4/stpncpy.m4.orig  Mon Aug 16 01:56:33 2010
+++ m4/stpncpy.m4       Sun Aug 15 13:30:28 2010
@@ -1,4 +1,4 @@
-# stpncpy.m4 serial 11
+# stpncpy.m4 serial 12
 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2010 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
@@ -25,6 +25,7 @@
   dnl   in AIX:     dest + max(0,n-1)
   dnl Only the glibc return value is useful in practice.
 
+  AC_CHECK_DECLS_ONCE([stpncpy])
   AC_CHECK_FUNCS_ONCE([stpncpy])
   if test $ac_cv_func_stpncpy = yes; then
     AC_CACHE_CHECK([for working stpncpy], [gl_cv_func_stpncpy], [
@@ -32,7 +33,9 @@
 #include <stdlib.h>
 #include <string.h> /* for strcpy */
 /* The stpncpy prototype is missing in <string.h> on AIX 4.  */
+#if !HAVE_DECL_STPNCPY
 extern char *stpncpy (char *dest, const char *src, size_t n);
+#endif
 int main () {
   const char *src = "Hello";
   char dest[10];



reply via email to

[Prev in Thread] Current Thread [Next in Thread]