summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-01-29 09:01:50 +0000
committerUlrich Drepper <drepper@redhat.com>1999-01-29 09:01:50 +0000
commitb7398be5f8ce235f78cf92b21c39f00c150ffe68 (patch)
treea73514b50603e2de3e567f47677e9fc514cc1c43
parent8163845fdab02ba1943b608b635873cee50df676 (diff)
downloadglibc-b7398be5f8ce235f78cf92b21c39f00c150ffe68.tar.gz
glibc-b7398be5f8ce235f78cf92b21c39f00c150ffe68.tar.xz
glibc-b7398be5f8ce235f78cf92b21c39f00c150ffe68.zip
Update.
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.
-rw-r--r--ChangeLog25
-rw-r--r--FAQ16
-rw-r--r--FAQ.in14
-rw-r--r--locale/broken_cur_max.c16
-rw-r--r--locale/mb_cur_max.c4
-rw-r--r--stdlib/stdlib.h4
-rw-r--r--sysdeps/unix/sysv/linux/arm/vfork.S46
-rw-r--r--sysdeps/wordsize-32/stdint.h40
-rw-r--r--sysdeps/wordsize-64/stdint.h72
9 files changed, 123 insertions, 114 deletions
diff --git a/ChangeLog b/ChangeLog
index 266fa6c559..2f1a26755a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
 	* sysdeps/sparc/sparc32/__longjmp.S: Rewrite without bogus sanity
diff --git a/FAQ b/FAQ
index bbc2b1b81c..d2048cd67f 100644
--- a/FAQ
+++ b/FAQ
@@ -99,6 +99,7 @@ please let me know.
 	/etc/group as I have with libc5 ?
 2.27.	What needs to be recompiled when upgrading from glibc 2.0 to glibc
 	2.1?
+2.28.	Why is extracting files via tar so slow?
 
 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>
 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.
+
 
 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
 
diff --git a/FAQ.in b/FAQ.in
index 6112aa02bb..32678a2f0a 100644
--- a/FAQ.in
+++ b/FAQ.in
@@ -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>
 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
 
 ??	I expect GNU libc to be 100% source code compatible with
diff --git a/locale/broken_cur_max.c b/locale/broken_cur_max.c
index 0374f84a57..68aec7fd93 100644
--- a/locale/broken_cur_max.c
+++ b/locale/broken_cur_max.c
@@ -1,6 +1,6 @@
 /* Return number of characters in multibyte representation for current
    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.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -25,26 +25,26 @@
 #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
    character representation really uses.  But it defines MB_CUR_LEN to
    return the information for the multi-byte character representation.
    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.
-   Instead the maximal number of character used for the conversion is
-   MB_CURLEN.
+   Instead the maximum number of characters used for the conversion is
+   MB_CUR_LEN.
 
    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
    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
    of the dynamic linker.  */
-int
+size_t
 __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];
 }
diff --git a/locale/mb_cur_max.c b/locale/mb_cur_max.c
index cfb93ffba8..5de9114c23 100644
--- a/locale/mb_cur_max.c
+++ b/locale/mb_cur_max.c
@@ -1,6 +1,6 @@
 /* Return number of characters in multibyte representation for current
    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.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -25,7 +25,7 @@
 #include "localeinfo.h"
 
 
-int
+size_t
 weak_function
 __ctype_get_mb_cur_max (void)
 {
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 355c649652..3b9539e329 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -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.
 
    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.  */
 #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.  */
diff --git a/sysdeps/unix/sysv/linux/arm/vfork.S b/sysdeps/unix/sysv/linux/arm/vfork.S
deleted file mode 100644
index 4c2f1a2982..0000000000
--- a/sysdeps/unix/sysv/linux/arm/vfork.S
+++ /dev/null
@@ -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)
diff --git a/sysdeps/wordsize-32/stdint.h b/sysdeps/wordsize-32/stdint.h
index ef3de98620..a96e79e709 100644
--- a/sysdeps/wordsize-32/stdint.h
+++ b/sysdeps/wordsize-32/stdint.h
@@ -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.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +17,7 @@
    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
@@ -96,8 +96,8 @@ __extension__ typedef long long int           intmax_t;
 __extension__ typedef unsigned long long int uintmax_t;
 
 
-/* The ISO C 9X standard specifies that these macros must only be
-   defined if explicitly requested.  */
+/* The ISO C 9X standard specifies that in C++ implementations these
+   macros should only be defined if explicitly requested.  */
 #if !defined __cplusplus || defined __STDC_LIMIT_MACROS
 
 /* Limits of integral types.  */
@@ -117,7 +117,7 @@ __extension__ typedef unsigned long long int uintmax_t;
 # define UINT8_MAX		(255U)
 # define UINT16_MAX		(65535U)
 # define UINT32_MAX		(4294967295U)
-# define UINT64_MAX		(18446744073709551615uLL)
+# define UINT64_MAX		(18446744073709551615ULL)
 
 
 /* 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_LEAST16_MAX	(65535U)
 # 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.  */
@@ -153,7 +153,7 @@ __extension__ typedef unsigned long long int uintmax_t;
 # define UINT_FAST8_MAX		(255U)
 # define UINT_FAST16_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.  */
@@ -168,7 +168,7 @@ __extension__ typedef unsigned long long int uintmax_t;
 # define INTMAX_MAX		(9223372036854775807LL)
 
 /* Maximum for largest unsigned integral type.  */
-# define UINTMAX_MAX		(18446744073709551615uLL)
+# define UINTMAX_MAX		(18446744073709551615ULL)
 
 
 /* Limits of other integer types.  */
@@ -198,25 +198,25 @@ __extension__ typedef unsigned long long int uintmax_t;
 #endif	/* C++ && limit macros */
 
 
-/* The ISO C 9X standard specifies that these macros must only be
-   defined if explicitly requested.  */
+/* The ISO C 9X standard specifies that in C++ implementations these
+   should only be defined if explicitly requested.  */
 #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
 
 /* Signed.  */
-# define INT8_C(c)	((int8_t) c)
-# define INT16_C(c)	((int16_t) c)
-# define INT32_C(c)	((int32_t) c)
-# define INT64_C(c)	((int64_t) __CONCAT (c,ll))
+# define INT8_C(c)	c
+# define INT16_C(c)	c
+# define INT32_C(c)	c
+# define INT64_C(c)	c ## LL
 
 /* Unsigned.  */
-# define UINT8_C(c)	((uint8_t) __CONCAT (c,u))
-# define UINT16_C(c)	((uint16_t) __CONCAT (c,u))
-# define UINT32_C(c)	((uint32_t) __CONCAT (c,u))
-# define UINT64_C(c)	((uint64_t) __CONCAT (c,ull))
+# define UINT8_C(c)	c ## U
+# define UINT16_C(c)	c ## U
+# define UINT32_C(c)	c ## U
+# define UINT64_C(c)	c ## ULL
 
 /* Maximal type.  */
-# define INTMAX_C(c)	((intmax_t) __CONCAT (c,ll))
-# define UINTMAX_C(c)	((uintmax_t) __CONCAT (c,ull))
+# define INTMAX_C(c)	c ## LL
+# define UINTMAX_C(c)	c ## ULL
 
 #endif	/* C++ && constant macros */
 
diff --git a/sysdeps/wordsize-64/stdint.h b/sysdeps/wordsize-64/stdint.h
index 743fb434bf..2f7cd49154 100644
--- a/sysdeps/wordsize-64/stdint.h
+++ b/sysdeps/wordsize-64/stdint.h
@@ -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.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +17,7 @@
    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
@@ -90,8 +90,8 @@ typedef long int           intmax_t;
 typedef unsigned long int uintmax_t;
 
 
-/* The ISO C 9X standard specifies that these macros must only be
-   defined if explicitly requested.  */
+/* The ISO C 9X standard specifies that in C++ implementations these
+   macros should only be defined if explicitly requested.  */
 #if !defined __cplusplus || defined __STDC_LIMIT_MACROS
 
 /* Limits of integral types.  */
@@ -100,69 +100,69 @@ typedef unsigned long int uintmax_t;
 # define INT8_MIN		(-128)
 # define INT16_MIN		(-32767-1)
 # define INT32_MIN		(-2147483647-1)
-# define INT64_MIN		(-9223372036854775807LL-1)
+# define INT64_MIN		(-9223372036854775807L-1)
 /* Maximum of signed integral types.  */
 # define INT8_MAX		(127)
 # define INT16_MAX		(32767)
 # define INT32_MAX		(2147483647)
-# define INT64_MAX		(9223372036854775807LL)
+# define INT64_MAX		(9223372036854775807L)
 
 /* Maximum of unsigned integral types.  */
 # define UINT8_MAX		(255U)
 # define UINT16_MAX		(65535U)
 # define UINT32_MAX		(4294967295U)
-# define UINT64_MAX		(18446744073709551615uLL)
+# define UINT64_MAX		(18446744073709551615UL)
 
 
 /* Minimum of signed integral types having a minimum size.  */
 # define INT_LEAST8_MIN		(-128)
 # define INT_LEAST16_MIN	(-32767-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.  */
 # define INT_LEAST8_MAX		(127)
 # define INT_LEAST16_MAX	(32767)
 # define INT_LEAST32_MAX	(2147483647)
-# define INT_LEAST64_MAX	(9223372036854775807LL)
+# define INT_LEAST64_MAX	(9223372036854775807L)
 
 /* Maximum of unsigned integral types having a minimum size.  */
 # define UINT_LEAST8_MAX	(255U)
 # define UINT_LEAST16_MAX	(65535U)
 # 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.  */
 # define INT_FAST8_MIN		(-128)
-# define INT_FAST16_MIN		(-9223372036854775807LL-1)
-# define INT_FAST32_MIN		(-9223372036854775807LL-1)
-# define INT_FAST64_MIN		(-9223372036854775807LL-1)
+# define INT_FAST16_MIN		(-9223372036854775807L-1)
+# define INT_FAST32_MIN		(-9223372036854775807L-1)
+# define INT_FAST64_MIN		(-9223372036854775807L-1)
 /* Maximum of fast signed integral types having a minimum size.  */
 # define INT_FAST8_MAX		(127)
-# define INT_FAST16_MAX		(9223372036854775807LL)
-# define INT_FAST32_MAX		(9223372036854775807LL)
-# define INT_FAST64_MAX		(9223372036854775807LL)
+# define INT_FAST16_MAX		(9223372036854775807L)
+# define INT_FAST32_MAX		(9223372036854775807L)
+# define INT_FAST64_MAX		(9223372036854775807L)
 
 /* Maximum of fast unsigned integral types having a minimum size.  */
 # define UINT_FAST8_MAX		(255U)
-# define UINT_FAST16_MAX	(18446744073709551615uLL)
-# define UINT_FAST32_MAX	(18446744073709551615uLL)
-# define UINT_FAST64_MAX	(18446744073709551615uLL)
+# define UINT_FAST16_MAX	(18446744073709551615UL)
+# define UINT_FAST32_MAX	(18446744073709551615UL)
+# define UINT_FAST64_MAX	(18446744073709551615UL)
 
 
 /* Values to test for integral types holding `void *' pointer.  */
 # define INTPTR_MIN		(-9223372036854775807L-1)
 # define INTPTR_MAX		(9223372036854775807L
-# define UINTPTR_MAX		(18446744073709551615uL)
+# define UINTPTR_MAX		(18446744073709551615UL)
 
 
 /* Minimum for largest signed integral type.  */
-# define INTMAX_MIN		(-9223372036854775807LL-1)
+# define INTMAX_MIN		(-9223372036854775807L-1)
 /* Maximum for largest signed integral type.  */
-# define INTMAX_MAX		(9223372036854775807LL)
+# define INTMAX_MAX		(9223372036854775807L)
 
 /* Maximum for largest unsigned integral type.  */
-# define UINTMAX_MAX		(18446744073709551615uLL)
+# define UINTMAX_MAX		(18446744073709551615UL)
 
 
 /* Limits of other integer types.  */
@@ -176,7 +176,7 @@ typedef unsigned long int uintmax_t;
 # define SIG_ATOMIC_MAX	(2147483647)
 
 /* Limit of `size_t' type.  */
-# define SIZE_MAX	(18446744073709551615uL)
+# define SIZE_MAX	(18446744073709551615UL)
 
 /* Limits of `wchar_t'.  */
 # ifndef WCHAR_MIN
@@ -192,25 +192,25 @@ typedef unsigned long int uintmax_t;
 #endif	/* C++ && limit macros */
 
 
-/* The ISO C 9X standard specifies that these macros must only be
-   defined if explicitly requested.  */
+/* The ISO C 9X standard specifies that in C++ implementations these
+   should only be defined if explicitly requested.  */
 #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
 
 /* Signed.  */
-# define INT8_C(c)	((int8_t) c)
-# define INT16_C(c)	((int16_t) c)
-# define INT32_C(c)	((int32_t) c)
-# define INT64_C(c)	((int64_t) __CONCAT (c,l))
+# define INT8_C(c)	c
+# define INT16_C(c)	c
+# define INT32_C(c)	c
+# define INT64_C(c)	c ## L
 
 /* Unsigned.  */
-# define UINT8_C(c)	((uint8_t) __CONCAT (c,u))
-# define UINT16_C(c)	((uint16_t) __CONCAT (c,u))
-# define UINT32_C(c)	((uint32_t) __CONCAT (c,u))
-# define UINT64_C(c)	((uint64_t) __CONCAT (c,ul))
+# define UINT8_C(c)	c ## U
+# define UINT16_C(c)	c ## U
+# define UINT32_C(c)	c ## U
+# define UINT64_C(c)	c ## UL
 
 /* Maximal type.  */
-# define INTMAX_C(c)	((intmax_t) __CONCAT (c,l))
-# define UINTMAX_C(c)	((uintmax_t) __CONCAT (c,ul))
+# define INTMAX_C(c)	c ## L
+# define UINTMAX_C(c)	c ## UL
 
 #endif	/* C++ && constant macros */