Bug 10456 - missing include in string.h
: missing include in string.h
Status: RESOLVED INVALID
Product: glibc
Classification: Unclassified
Component: libc
: 2.10
: P2 normal
: ---
Assigned To: Ulrich Drepper
:
:
:
:
  Show dependency treegraph
 
Reported: 2009-07-28 22:57 UTC by Alex J. van Hout
Modified: 2009-08-19 12:21 UTC (History)
1 user (show)

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


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 UTC
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 UTC
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 UTC
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 UTC
(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.