1999-01-28  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* sysdeps/wordsize-32/stdint.h (INT8_C, INT16_C, INT32_C, INT64_C,
	UINT8_C, UINT16_C, UINT32_C, UINT64_C): Remove casts, they must be
	integer constants.  Use ## directly instead of __CONCAT so that
	the suffix string is not expanded as a macro.
	* sysdeps/wordsize-64/stdint.h (INT8_C, INT16_C, INT32_C, INT64_C,
	UINT8_C, UINT16_C, UINT32_C, UINT64_C): Likewise.
	(INT64_MIN, INT64_MAX, UINT64_MAX, INT_LEAST64_MIN,
	INT_LEAST64_MAX, UINT_LEAST64_MAX, INT_FAST16_MIN, INT_FAST32_MIN,
	INT_FAST64_MIN, INT_FAST16_MAX, INT_FAST32_MAX, INT_FAST64_MAX,
	UINT_FAST16_MAX, UINT_FAST32_MAX, UINT_FAST64_MAX, INTMAX_MIN,
	INTMAX_MAX, UINTMAX_MAX): Define as long constants, not long long.

1999-01-28  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* locale/mb_cur_max.c (__ctype_get_mb_cur_max): Correct return
	type to size_t.
	* locale/broken_cur_max.c (__ctype_get_mb_cur_max): Likewise.
	* stdlib/stdlib.h (__ctype_get_mb_cur_max): Likewise.

1999-01-27  Philip Blundell  <pb@nexus.co.uk>

	* sysdeps/unix/sysv/linux/arm/vfork.S: Deleted.
This commit is contained in:
Ulrich Drepper 1999-01-29 09:01:50 +00:00
parent 8163845fda
commit b7398be5f8
9 changed files with 123 additions and 114 deletions

View File

@ -1,3 +1,28 @@
1999-01-28 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* sysdeps/wordsize-32/stdint.h (INT8_C, INT16_C, INT32_C, INT64_C,
UINT8_C, UINT16_C, UINT32_C, UINT64_C): Remove casts, they must be
integer constants. Use ## directly instead of __CONCAT so that
the suffix string is not expanded as a macro.
* sysdeps/wordsize-64/stdint.h (INT8_C, INT16_C, INT32_C, INT64_C,
UINT8_C, UINT16_C, UINT32_C, UINT64_C): Likewise.
(INT64_MIN, INT64_MAX, UINT64_MAX, INT_LEAST64_MIN,
INT_LEAST64_MAX, UINT_LEAST64_MAX, INT_FAST16_MIN, INT_FAST32_MIN,
INT_FAST64_MIN, INT_FAST16_MAX, INT_FAST32_MAX, INT_FAST64_MAX,
UINT_FAST16_MAX, UINT_FAST32_MAX, UINT_FAST64_MAX, INTMAX_MIN,
INTMAX_MAX, UINTMAX_MAX): Define as long constants, not long long.
1999-01-28 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* locale/mb_cur_max.c (__ctype_get_mb_cur_max): Correct return
type to size_t.
* locale/broken_cur_max.c (__ctype_get_mb_cur_max): Likewise.
* stdlib/stdlib.h (__ctype_get_mb_cur_max): Likewise.
1999-01-27 Philip Blundell <pb@nexus.co.uk>
* sysdeps/unix/sysv/linux/arm/vfork.S: Deleted.
1999-01-28 David S. Miller <davem@redhat.com> 1999-01-28 David S. Miller <davem@redhat.com>
* sysdeps/sparc/sparc32/__longjmp.S: Rewrite without bogus sanity * sysdeps/sparc/sparc32/__longjmp.S: Rewrite without bogus sanity

16
FAQ
View File

@ -99,6 +99,7 @@ please let me know.
/etc/group as I have with libc5 ? /etc/group as I have with libc5 ?
2.27. What needs to be recompiled when upgrading from glibc 2.0 to glibc 2.27. What needs to be recompiled when upgrading from glibc 2.0 to glibc
2.1? 2.1?
2.28. Why is extracting files via tar so slow?
3. Source and binary incompatibilities, and what to do about them 3. Source and binary incompatibilities, and what to do about them
@ -1043,6 +1044,21 @@ possible to do development with old static libraries on a glibc 2.1
system. This add-on is still in development. You can get it from <URL> system. This add-on is still in development. You can get it from <URL>
but please keep in mind that it is experimental. but please keep in mind that it is experimental.
2.28. Why is extracting files via tar so slow?
{AJ} Extracting of tar archives might be quite slow since tar has to look up
userid and groupids and doesn't cache negative results. If you have nis or
nisplus in your /etc/nsswitch.conf for the passwd and/or group database,
each file extractions needs a network connection. There are two possible
solutions:
- do you really need NIS/NIS+ (some Linux distributions add by default
nis/nisplus even if it's not needed)? If not, just remove the entries.
- if you need NIS/NIS+, use the Name Service Cache Daemon nscd that comes
with glibc 2.1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14
FAQ.in
View File

@ -860,6 +860,20 @@ possible to do development with old static libraries on a glibc 2.1
system. This add-on is still in development. You can get it from <URL> system. This add-on is still in development. You can get it from <URL>
but please keep in mind that it is experimental. but please keep in mind that it is experimental.
?? Why is extracting files via tar so slow?
{AJ} Extracting of tar archives might be quite slow since tar has to look up
userid and groupids and doesn't cache negative results. If you have nis or
nisplus in your /etc/nsswitch.conf for the passwd and/or group database,
each file extractions needs a network connection. There are two possible
solutions:
- do you really need NIS/NIS+ (some Linux distributions add by default
nis/nisplus even if it's not needed)? If not, just remove the entries.
- if you need NIS/NIS+, use the Name Service Cache Daemon nscd that comes
with glibc 2.1.
? Source and binary incompatibilities, and what to do about them ? Source and binary incompatibilities, and what to do about them
?? I expect GNU libc to be 100% source code compatible with ?? I expect GNU libc to be 100% source code compatible with

View File

@ -1,6 +1,6 @@
/* Return number of characters in multibyte representation for current /* Return number of characters in multibyte representation for current
character set. character set.
Copyright (C) 1996 Free Software Foundation, Inc. Copyright (C) 1996, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -25,26 +25,26 @@
#include "localeinfo.h" #include "localeinfo.h"
/* This is a gross hack to get borken programs running. /* This is a gross hack to get broken programs running.
ISO C provides no mean to find out how many bytes the wide ISO C provides no mean to find out how many bytes the wide
character representation really uses. But it defines MB_CUR_LEN to character representation really uses. But it defines MB_CUR_LEN to
return the information for the multi-byte character representation. return the information for the multi-byte character representation.
Many programmers don't know the difference between the two and Many programmers don't know the difference between the two and
thing this means the same. But assuming all characters have a size think this means the same. But assuming all characters have a size
of MB_CUR_LEN after they have been processed by `mbrtowc' is wrong. of MB_CUR_LEN after they have been processed by `mbrtowc' is wrong.
Instead the maximal number of character used for the conversion is Instead the maximum number of characters used for the conversion is
MB_CURLEN. MB_CUR_LEN.
It is known that some Motif applications have this problem. To It is known that some Motif applications have this problem. To
cure this one has to make sure the glibc uses the function in this cure this one has to make sure the glibc uses the function in this
file instead of the one in locale/mb_cur_max.c. This can either be file instead of the one in locale/mb_cur_max.c. This can either be
done by linking with this file or by using the LD_PRELOAD feature done by linking with this file or by using the LD_PRELOAD feature
of the dynamic linker. */ of the dynamic linker. */
int size_t
__ctype_get_mb_cur_max (void) __ctype_get_mb_cur_max (void)
{ {
int correct_value = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MB_CUR_MAX); size_t correct_value = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MB_CUR_MAX);
return ((int []) { 1, 1, 1, 2, 2, 3, 4 })[correct_value]; return ((size_t []) { 1, 1, 1, 2, 2, 3, 4 })[correct_value];
} }

View File

@ -1,6 +1,6 @@
/* Return number of characters in multibyte representation for current /* Return number of characters in multibyte representation for current
character set. character set.
Copyright (C) 1996 Free Software Foundation, Inc. Copyright (C) 1996, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -25,7 +25,7 @@
#include "localeinfo.h" #include "localeinfo.h"
int size_t
weak_function weak_function
__ctype_get_mb_cur_max (void) __ctype_get_mb_cur_max (void)
{ {

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc. /* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -73,7 +73,7 @@ __extension__ typedef struct
/* Maximum length of a multibyte character in the current locale. */ /* Maximum length of a multibyte character in the current locale. */
#define MB_CUR_MAX (__ctype_get_mb_cur_max ()) #define MB_CUR_MAX (__ctype_get_mb_cur_max ())
extern int __ctype_get_mb_cur_max __P ((void)); extern size_t __ctype_get_mb_cur_max __P ((void));
/* Convert a string to a floating-point number. */ /* Convert a string to a floating-point number. */

View File

@ -1,46 +0,0 @@
/* Copyright (C) 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sysdep.h>
#define _ERRNO_H 1
#include <bits/errno.h>
#define _SIGNAL_H
#include <bits/signum.h>
#define CLONE_VM 0x00000100 /* Set if VM shared between processes. */
#define CLONE_VFORK 0x00004000 /* Set if the parent wants the child to
wake it up on mm_release. */
/* Clone the calling process, but without copying the whole address space.
The calling process is suspended until the new process exits or is
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
and the process ID of the new process to the old process. */
ENTRY (__vfork)
mov a1, $SIGCLD
orr a1, a1, $(CLONE_VM | CLONE_VFORK)
mov a2, $0
swi SYS_ify(clone)
cmn a1, $4096
bhs PLTJMP(C_SYMBOL_NAME(__syscall_error))
RETINSTR(mov, pc, lr)
PSEUDO_END (__vfork)
weak_alias (__vfork, vfork)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. /* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -17,7 +17,7 @@
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
/* /*
* ISO C 9X: 7.4 Integer types <stdint.h> * ISO C 9X: 7.18 Integer types <stdint.h>
*/ */
#ifndef _STDINT_H #ifndef _STDINT_H
@ -96,8 +96,8 @@ __extension__ typedef long long int intmax_t;
__extension__ typedef unsigned long long int uintmax_t; __extension__ typedef unsigned long long int uintmax_t;
/* The ISO C 9X standard specifies that these macros must only be /* The ISO C 9X standard specifies that in C++ implementations these
defined if explicitly requested. */ macros should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS #if !defined __cplusplus || defined __STDC_LIMIT_MACROS
/* Limits of integral types. */ /* Limits of integral types. */
@ -117,7 +117,7 @@ __extension__ typedef unsigned long long int uintmax_t;
# define UINT8_MAX (255U) # define UINT8_MAX (255U)
# define UINT16_MAX (65535U) # define UINT16_MAX (65535U)
# define UINT32_MAX (4294967295U) # define UINT32_MAX (4294967295U)
# define UINT64_MAX (18446744073709551615uLL) # define UINT64_MAX (18446744073709551615ULL)
/* Minimum of signed integral types having a minimum size. */ /* Minimum of signed integral types having a minimum size. */
@ -135,7 +135,7 @@ __extension__ typedef unsigned long long int uintmax_t;
# define UINT_LEAST8_MAX (255U) # define UINT_LEAST8_MAX (255U)
# define UINT_LEAST16_MAX (65535U) # define UINT_LEAST16_MAX (65535U)
# define UINT_LEAST32_MAX (4294967295U) # define UINT_LEAST32_MAX (4294967295U)
# define UINT_LEAST64_MAX (18446744073709551615uLL) # define UINT_LEAST64_MAX (18446744073709551615ULL)
/* Minimum of fast signed integral types having a minimum size. */ /* Minimum of fast signed integral types having a minimum size. */
@ -153,7 +153,7 @@ __extension__ typedef unsigned long long int uintmax_t;
# define UINT_FAST8_MAX (255U) # define UINT_FAST8_MAX (255U)
# define UINT_FAST16_MAX (4294967295U) # define UINT_FAST16_MAX (4294967295U)
# define UINT_FAST32_MAX (4294967295U) # define UINT_FAST32_MAX (4294967295U)
# define UINT_FAST64_MAX (18446744073709551615uLL) # define UINT_FAST64_MAX (18446744073709551615ULL)
/* Values to test for integral types holding `void *' pointer. */ /* Values to test for integral types holding `void *' pointer. */
@ -168,7 +168,7 @@ __extension__ typedef unsigned long long int uintmax_t;
# define INTMAX_MAX (9223372036854775807LL) # define INTMAX_MAX (9223372036854775807LL)
/* Maximum for largest unsigned integral type. */ /* Maximum for largest unsigned integral type. */
# define UINTMAX_MAX (18446744073709551615uLL) # define UINTMAX_MAX (18446744073709551615ULL)
/* Limits of other integer types. */ /* Limits of other integer types. */
@ -198,25 +198,25 @@ __extension__ typedef unsigned long long int uintmax_t;
#endif /* C++ && limit macros */ #endif /* C++ && limit macros */
/* The ISO C 9X standard specifies that these macros must only be /* The ISO C 9X standard specifies that in C++ implementations these
defined if explicitly requested. */ should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
/* Signed. */ /* Signed. */
# define INT8_C(c) ((int8_t) c) # define INT8_C(c) c
# define INT16_C(c) ((int16_t) c) # define INT16_C(c) c
# define INT32_C(c) ((int32_t) c) # define INT32_C(c) c
# define INT64_C(c) ((int64_t) __CONCAT (c,ll)) # define INT64_C(c) c ## LL
/* Unsigned. */ /* Unsigned. */
# define UINT8_C(c) ((uint8_t) __CONCAT (c,u)) # define UINT8_C(c) c ## U
# define UINT16_C(c) ((uint16_t) __CONCAT (c,u)) # define UINT16_C(c) c ## U
# define UINT32_C(c) ((uint32_t) __CONCAT (c,u)) # define UINT32_C(c) c ## U
# define UINT64_C(c) ((uint64_t) __CONCAT (c,ull)) # define UINT64_C(c) c ## ULL
/* Maximal type. */ /* Maximal type. */
# define INTMAX_C(c) ((intmax_t) __CONCAT (c,ll)) # define INTMAX_C(c) c ## LL
# define UINTMAX_C(c) ((uintmax_t) __CONCAT (c,ull)) # define UINTMAX_C(c) c ## ULL
#endif /* C++ && constant macros */ #endif /* C++ && constant macros */

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. /* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -17,7 +17,7 @@
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
/* /*
* ISO C 9X: 7.4 Integer types <stdint.h> * ISO C 9X: 7.18 Integer types <stdint.h>
*/ */
#ifndef _STDINT_H #ifndef _STDINT_H
@ -90,8 +90,8 @@ typedef long int intmax_t;
typedef unsigned long int uintmax_t; typedef unsigned long int uintmax_t;
/* The ISO C 9X standard specifies that these macros must only be /* The ISO C 9X standard specifies that in C++ implementations these
defined if explicitly requested. */ macros should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS #if !defined __cplusplus || defined __STDC_LIMIT_MACROS
/* Limits of integral types. */ /* Limits of integral types. */
@ -100,69 +100,69 @@ typedef unsigned long int uintmax_t;
# define INT8_MIN (-128) # define INT8_MIN (-128)
# define INT16_MIN (-32767-1) # define INT16_MIN (-32767-1)
# define INT32_MIN (-2147483647-1) # define INT32_MIN (-2147483647-1)
# define INT64_MIN (-9223372036854775807LL-1) # define INT64_MIN (-9223372036854775807L-1)
/* Maximum of signed integral types. */ /* Maximum of signed integral types. */
# define INT8_MAX (127) # define INT8_MAX (127)
# define INT16_MAX (32767) # define INT16_MAX (32767)
# define INT32_MAX (2147483647) # define INT32_MAX (2147483647)
# define INT64_MAX (9223372036854775807LL) # define INT64_MAX (9223372036854775807L)
/* Maximum of unsigned integral types. */ /* Maximum of unsigned integral types. */
# define UINT8_MAX (255U) # define UINT8_MAX (255U)
# define UINT16_MAX (65535U) # define UINT16_MAX (65535U)
# define UINT32_MAX (4294967295U) # define UINT32_MAX (4294967295U)
# define UINT64_MAX (18446744073709551615uLL) # define UINT64_MAX (18446744073709551615UL)
/* Minimum of signed integral types having a minimum size. */ /* Minimum of signed integral types having a minimum size. */
# define INT_LEAST8_MIN (-128) # define INT_LEAST8_MIN (-128)
# define INT_LEAST16_MIN (-32767-1) # define INT_LEAST16_MIN (-32767-1)
# define INT_LEAST32_MIN (-2147483647-1) # define INT_LEAST32_MIN (-2147483647-1)
# define INT_LEAST64_MIN (-9223372036854775807LL-1) # define INT_LEAST64_MIN (-9223372036854775807L-1)
/* Maximum of signed integral types having a minimum size. */ /* Maximum of signed integral types having a minimum size. */
# define INT_LEAST8_MAX (127) # define INT_LEAST8_MAX (127)
# define INT_LEAST16_MAX (32767) # define INT_LEAST16_MAX (32767)
# define INT_LEAST32_MAX (2147483647) # define INT_LEAST32_MAX (2147483647)
# define INT_LEAST64_MAX (9223372036854775807LL) # define INT_LEAST64_MAX (9223372036854775807L)
/* Maximum of unsigned integral types having a minimum size. */ /* Maximum of unsigned integral types having a minimum size. */
# define UINT_LEAST8_MAX (255U) # define UINT_LEAST8_MAX (255U)
# define UINT_LEAST16_MAX (65535U) # define UINT_LEAST16_MAX (65535U)
# define UINT_LEAST32_MAX (4294967295U) # define UINT_LEAST32_MAX (4294967295U)
# define UINT_LEAST64_MAX (18446744073709551615uLL) # define UINT_LEAST64_MAX (18446744073709551615UL)
/* Minimum of fast signed integral types having a minimum size. */ /* Minimum of fast signed integral types having a minimum size. */
# define INT_FAST8_MIN (-128) # define INT_FAST8_MIN (-128)
# define INT_FAST16_MIN (-9223372036854775807LL-1) # define INT_FAST16_MIN (-9223372036854775807L-1)
# define INT_FAST32_MIN (-9223372036854775807LL-1) # define INT_FAST32_MIN (-9223372036854775807L-1)
# define INT_FAST64_MIN (-9223372036854775807LL-1) # define INT_FAST64_MIN (-9223372036854775807L-1)
/* Maximum of fast signed integral types having a minimum size. */ /* Maximum of fast signed integral types having a minimum size. */
# define INT_FAST8_MAX (127) # define INT_FAST8_MAX (127)
# define INT_FAST16_MAX (9223372036854775807LL) # define INT_FAST16_MAX (9223372036854775807L)
# define INT_FAST32_MAX (9223372036854775807LL) # define INT_FAST32_MAX (9223372036854775807L)
# define INT_FAST64_MAX (9223372036854775807LL) # define INT_FAST64_MAX (9223372036854775807L)
/* Maximum of fast unsigned integral types having a minimum size. */ /* Maximum of fast unsigned integral types having a minimum size. */
# define UINT_FAST8_MAX (255U) # define UINT_FAST8_MAX (255U)
# define UINT_FAST16_MAX (18446744073709551615uLL) # define UINT_FAST16_MAX (18446744073709551615UL)
# define UINT_FAST32_MAX (18446744073709551615uLL) # define UINT_FAST32_MAX (18446744073709551615UL)
# define UINT_FAST64_MAX (18446744073709551615uLL) # define UINT_FAST64_MAX (18446744073709551615UL)
/* Values to test for integral types holding `void *' pointer. */ /* Values to test for integral types holding `void *' pointer. */
# define INTPTR_MIN (-9223372036854775807L-1) # define INTPTR_MIN (-9223372036854775807L-1)
# define INTPTR_MAX (9223372036854775807L # define INTPTR_MAX (9223372036854775807L
# define UINTPTR_MAX (18446744073709551615uL) # define UINTPTR_MAX (18446744073709551615UL)
/* Minimum for largest signed integral type. */ /* Minimum for largest signed integral type. */
# define INTMAX_MIN (-9223372036854775807LL-1) # define INTMAX_MIN (-9223372036854775807L-1)
/* Maximum for largest signed integral type. */ /* Maximum for largest signed integral type. */
# define INTMAX_MAX (9223372036854775807LL) # define INTMAX_MAX (9223372036854775807L)
/* Maximum for largest unsigned integral type. */ /* Maximum for largest unsigned integral type. */
# define UINTMAX_MAX (18446744073709551615uLL) # define UINTMAX_MAX (18446744073709551615UL)
/* Limits of other integer types. */ /* Limits of other integer types. */
@ -176,7 +176,7 @@ typedef unsigned long int uintmax_t;
# define SIG_ATOMIC_MAX (2147483647) # define SIG_ATOMIC_MAX (2147483647)
/* Limit of `size_t' type. */ /* Limit of `size_t' type. */
# define SIZE_MAX (18446744073709551615uL) # define SIZE_MAX (18446744073709551615UL)
/* Limits of `wchar_t'. */ /* Limits of `wchar_t'. */
# ifndef WCHAR_MIN # ifndef WCHAR_MIN
@ -192,25 +192,25 @@ typedef unsigned long int uintmax_t;
#endif /* C++ && limit macros */ #endif /* C++ && limit macros */
/* The ISO C 9X standard specifies that these macros must only be /* The ISO C 9X standard specifies that in C++ implementations these
defined if explicitly requested. */ should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
/* Signed. */ /* Signed. */
# define INT8_C(c) ((int8_t) c) # define INT8_C(c) c
# define INT16_C(c) ((int16_t) c) # define INT16_C(c) c
# define INT32_C(c) ((int32_t) c) # define INT32_C(c) c
# define INT64_C(c) ((int64_t) __CONCAT (c,l)) # define INT64_C(c) c ## L
/* Unsigned. */ /* Unsigned. */
# define UINT8_C(c) ((uint8_t) __CONCAT (c,u)) # define UINT8_C(c) c ## U
# define UINT16_C(c) ((uint16_t) __CONCAT (c,u)) # define UINT16_C(c) c ## U
# define UINT32_C(c) ((uint32_t) __CONCAT (c,u)) # define UINT32_C(c) c ## U
# define UINT64_C(c) ((uint64_t) __CONCAT (c,ul)) # define UINT64_C(c) c ## UL
/* Maximal type. */ /* Maximal type. */
# define INTMAX_C(c) ((intmax_t) __CONCAT (c,l)) # define INTMAX_C(c) c ## L
# define UINTMAX_C(c) ((uintmax_t) __CONCAT (c,ul)) # define UINTMAX_C(c) c ## UL
#endif /* C++ && constant macros */ #endif /* C++ && constant macros */