bug-gnulib
[Top][All Lists]
Advanced

[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);





reply via email to

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