bug-gnulib
[Top][All Lists]
Advanced

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

Re: [PATCH] mbsrtowcs-state.c, wcsrtombs-state.c: avoid compilation fail


From: Bruno Haible
Subject: Re: [PATCH] mbsrtowcs-state.c, wcsrtombs-state.c: avoid compilation failure
Date: Wed, 29 Apr 2009 00:53:44 +0200
User-agent: KMail/1.9.9

Thank you for all contributions to this thread.

Yes, mbstate_t is
a struct on:  Cygwin, FreeBSD, glibc, Haiku, HP-UX, Interix, OSF/1, Solaris
a union on:   MacOS X, NetBSD, OpenBSD
scalar on:    AIX, IRIX, mingw
missing on:   BeOS, HP-UX 11.00

So a portable initializer is {0} (not {0,} - that is not "a single expression,
enclosed in braces). But in order to avoid warnings, it's best to use the BSS
segment when we know that it works. I'm applying this:


2009-04-28  Bruno Haible  <address@hidden>

        Fix a compilation error.
        * lib/mbsrtowcs-state.c (_gl_mbsrtowcs_state): Fix initializer.
        * lib/wcsrtombs-state.c (_gl_wcsrtombs_state): Likewise.
        Reported by Jim Meyering.

*** lib/mbsrtowcs-state.c.orig  2009-04-29 00:43:46.000000000 +0200
--- lib/mbsrtowcs-state.c       2009-04-29 00:43:16.000000000 +0200
***************
*** 20,23 ****
  #include <wchar.h>
  
  /* Internal state used by the functions mbsrtowcs() and mbsnrtowcs().  */
! mbstate_t _gl_mbsrtowcs_state = 0;
--- 20,37 ----
  #include <wchar.h>
  
  /* Internal state used by the functions mbsrtowcs() and mbsnrtowcs().  */
! mbstate_t _gl_mbsrtowcs_state
! /* The state must initially be in the "initial state"; so, zero-initialize it.
!    On most systems, putting it into BSS is sufficient.  Not so on MacOS X 
10.3,
!    see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>.
!    When it needs an initializer, use 0 or {0} as initializer? 0 only works
!    when mbstate_t is a scalar type (such as when gnulib defines it, or on
!    AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct
!    or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)).  */
! #if defined __ELF__
!   /* On ELF systems, variables in BSS behave well.  */
! #else
!   /* Use braces, to be on the safe side.  */
!   = { 0 }
! #endif
!   ;
*** lib/wcsrtombs-state.c.orig  2009-04-29 00:43:46.000000000 +0200
--- lib/wcsrtombs-state.c       2009-04-29 00:43:07.000000000 +0200
***************
*** 20,23 ****
  #include <wchar.h>
  
  /* Internal state used by the functions wcsrtombs() and wcsnrtombs().  */
! mbstate_t _gl_wcsrtombs_state = 0;
--- 20,37 ----
  #include <wchar.h>
  
  /* Internal state used by the functions wcsrtombs() and wcsnrtombs().  */
! mbstate_t _gl_wcsrtombs_state
! /* The state must initially be in the "initial state"; so, zero-initialize it.
!    On most systems, putting it into BSS is sufficient.  Not so on MacOS X 
10.3,
!    see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>.
!    When it needs an initializer, use 0 or {0} as initializer? 0 only works
!    when mbstate_t is a scalar type (such as when gnulib defines it, or on
!    AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct
!    or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)).  */
! #if defined __ELF__
!   /* On ELF systems, variables in BSS behave well.  */
! #else
!   /* Use braces, to be on the safe side.  */
!   = { 0 }
! #endif
!   ;




reply via email to

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