[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-gnulib] strstr redefinition fix
From: |
Bruno Haible |
Subject: |
Re: [bug-gnulib] strstr redefinition fix |
Date: |
Thu, 15 Sep 2005 18:23:44 +0200 |
User-agent: |
KMail/1.5 |
Derek Price wrote:
> The new strstr module is causing a redefinition warnings from many files
> and then strstr.c fails to compile thus on an Alpha Linux 2.2.20 system
> running gcc 2.95.4:
>
> gcc -DHAVE_CONFIG_H -I. -I/home/users/d/de/derekrprice/cvs-nightly/lib -I..
> -Ino/include -g -O2 -c
> /home/users/d/de/derekrprice/cvs-nightly/lib/strstr.c In file included from
> /usr/include/string.h:360,
> from
> /home/users/d/de/derekrprice/cvs-nightly/lib/mbchar.h:149, from
> /home/users/d/de/derekrprice/cvs-nightly/lib/mbuiter.h:101, from
> /home/users/d/de/derekrprice/cvs-nightly/lib/strstr.c:29:
> /usr/include/bits/string2.h:1068: warning: `strstr' redefined
> ../config.h:1235: warning: this is the location of the previous definition
> /home/users/d/de/derekrprice/cvs-nightly/lib/strstr.c:34: parse error
> before `__extension__'
> /home/users/d/de/derekrprice/cvs-nightly/lib/strstr.c:46: parse error
> before `.'
>
>
> ...and so on. It looks like a pretty straightforward case of the strstr
> definintion in string.h overwriting the one required by the strstr
> module. The attached untested patch should fix this:
Thanks. I applied the appended patch, very similar to yours. (But move
the #include outside the extern "C" { ... }.)
Bruno
Index: m4/strstr.m4
===================================================================
RCS file: /cvsroot/gnulib/gnulib/m4/strstr.m4,v
retrieving revision 1.4
diff -c -3 -r1.4 strstr.m4
*** m4/strstr.m4 17 Aug 2005 14:05:33 -0000 1.4
--- m4/strstr.m4 15 Sep 2005 16:25:13 -0000
***************
*** 1,4 ****
! # strstr.m4 serial 3
dnl Copyright (C) 2002-2003, 2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # strstr.m4 serial 4
dnl Copyright (C) 2002-2003, 2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 9,15 ****
dnl No known system has a strstr() function that works correctly in
dnl multibyte locales. Therefore we use our version always.
AC_LIBOBJ(strstr)
- AC_DEFINE(strstr, rpl_strstr, [Define to rpl_strstr always.])
gl_PREREQ_STRSTR
])
--- 9,14 ----
Index: lib/strstr.h
===================================================================
RCS file: /cvsroot/gnulib/gnulib/lib/strstr.h,v
retrieving revision 1.5
diff -c -3 -r1.5 strstr.h
*** lib/strstr.h 17 Aug 2005 14:05:33 -0000 1.5
--- lib/strstr.h 15 Sep 2005 16:25:13 -0000
***************
*** 15,23 ****
--- 15,33 ----
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+ /* Include string.h: on glibc systems, it contains a macro definition of
+ strstr() that would collide with our definition if included afterwards. */
+ #include <string.h>
+
#ifdef __cplusplus
extern "C" {
#endif
+
+ /* No known system has a strstr() function that works correctly in
+ multibyte locales. Therefore we use our version always. */
+ #undef strstr
+ #define strstr rpl_strstr
/* Find the first occurrence of NEEDLE in HAYSTACK. */
extern char *strstr (const char *haystack, const char *needle);