Bug 10456 - missing include in string.h
Summary: missing include in string.h
Status: RESOLVED INVALID
Alias: None
Product: glibc
Classification: Unclassified
Component: libc (show other bugs)
Version: 2.10
: P2 normal
Target Milestone: ---
Assignee: Ulrich Drepper
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-07-28 22:57 IST by Alex J. van Hout
Modified: 2014-07-01 07:30 IST (History)
2 users (show)

See Also:
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alex J. van Hout 2009-07-28 22:57:55 IST
In string.h in version 2.10.1 on line 546 & 550 there is a referance to __locale_t. 
__locale_t is defined in xlocale.h.

xlocale.h is only included when __USE_XOPEN2K8 is true.

Lines 544-552 thus including line 546 are only used when __USE_GNU is true.
Given that xlocale.h is only included when __USE_XOPEN2K8 is true this lead to
an error when __USE_XOPEN2K8 is false and __USE-GNU is false.

Fix:
Afther line 544 add:
#include <xlocale.h>
To have __locale_t defined when referenced.

Regards,
Alex

Regards,
Alex

========Dump form build GCC 4.4.1=================================
In file included from ../../src/gcc-4.4.1/gcc/system.h:198,
                 from ../../src/gcc-4.4.1/gcc/genmodes.c:22:
/usr/include/string.h:546: error: expected declaration specifiers or '...'
before '__locale_t'
/usr/include/string.h:547: error: nonnull argument with out-of-range operand
number (argument 1, operand 3)
/usr/include/string.h:550: error: expected declaration specifiers or '...'
before '__locale_t'
/usr/include/string.h:551: error: nonnull argument with out-of-range operand
number (argument 1, operand 4)
In file included from /usr/include/sys/resource.h:25,
                 from /usr/include/sys/wait.h:32,
                 from ../../src/gcc-4.4.1/gcc/system.h:327,
                 from ../../src/gcc-4.4.1/gcc/genmodes.c:22:
/usr/include/bits/resource.h:127: error: two or more data types in declaration
specifiers
In file included from ../../src/gcc-4.4.1/gcc/genmodes.c:22:
../../src/gcc-4.4.1/gcc/system.h:426: error: conflicting types for 'getrlimit'
/usr/include/sys/resource.h:51: note: previous declaration of 'getrlimit' was here
../../src/gcc-4.4.1/gcc/system.h:435: error: conflicting types for 'setrlimit'
/usr/include/sys/resource.h:70: note: previous declaration of 'setrlimit' was here
make[3]: *** [build/genmodes.o] Error 1
make[3]: Leaving directory `/bouwplek/gcc441/gcc'
make[2]: *** [all-stage1-gcc] Error 2
make[2]: Leaving directory `/bouwplek/gcc441'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/bouwplek/gcc441'
make: *** [all] Error 2
=================================================================
Comment 1 Alex J. van Hout 2009-07-28 23:06:12 IST
Sorry,

Taken my time to create a complete bug report, Typing error. :-(


It should read: 
Given that xlocale.h is only included when __USE_XOPEN2K8 is true this lead to
an error when __USE_XOPEN2K8 is false and __USE_GNU is TRUE.

Regards,
Alex
Comment 2 Jakub Jelinek 2009-07-29 05:43:08 IST
When __USE_GNU is defined, __USE_XOPEN2K8 is always defined as well, unless you
are expplicitly defining or undefining these macros, which you must not do.
Use _GNU_SOURCE, _XOPEN_SOURCE {500,600,700,...}, etc. macros before including
first header instead.  See
info libc 'Feature Test Macros'
Comment 3 Alex J. van Hout 2009-08-19 12:21:46 IST
(In reply to comment #2)
> When __USE_GNU is defined, __USE_XOPEN2K8 is always defined as well, unless you
> are expplicitly defining or undefining these macros, which you must not do.
> Use _GNU_SOURCE, _XOPEN_SOURCE {500,600,700,...}, etc. macros before including
> first header instead.  See
> info libc 'Feature Test Macros'

This was a dump form building GCC 4.4.1. I am knowledgeable enough to provide a
simple solution, but can not tell if this is an error in GCC 4.4.1 or glibc. If
was not something I put together myself that I can easily fix.

Comment 4 Poor Yorick 2014-05-10 00:07:28 IST
running a gcc-4.4.1 on Red Hat Enterprise Linux 6 that was compiled on Red-Hat
Enterprise Linux 5 resulted in a situation where gcc used its own modified
versin of the RHEL5 features.h, resulting in the following error:

   #/usr/include/time.h:226: error: expected declaration specifiers or '...'    
   #before '__locale_t 

In this situation, __USE_XOPEN2K8 indeed was unset while __USE_GNU was set.
Comment 5 Poor Yorick 2014-05-10 00:13:36 IST
Just noticed that http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52922 contains a good explanation of this.