Fix inttypes.h and stdint.h for 64-bit (and C++11).

Change-Id: I394630348413c9aafcac137ce1ca5f0a93d9ab6f
diff --git a/libc/include/inttypes.h b/libc/include/inttypes.h
index 760670f..7c9a2fc 100644
--- a/libc/include/inttypes.h
+++ b/libc/include/inttypes.h
@@ -22,7 +22,16 @@
 #include <stdint.h>
 #include <sys/cdefs.h>
 
-#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) || (__cplusplus >= 201103L)
+
+#ifdef __LP64__
+#define __PRI_64_prefix  "l"
+#define __PRI_PTR_prefix "l"
+#else
+#define __PRI_64_prefix "ll"
+#define __PRI_PTR_prefix
+#endif
+
 /*
  * 7.8.1 Macros for format specifiers
  *
@@ -43,203 +52,203 @@
 #define	PRId8			"d"		/* int8_t */
 #define	PRId16			"d"		/* int16_t */
 #define	PRId32			"d"		/* int32_t */
-#define	PRId64			"lld"		/* int64_t */
+#define	PRId64			__PRI_64_prefix"d"		/* int64_t */
 
 #define	PRIdLEAST8		"d"		/* int_least8_t */
 #define	PRIdLEAST16		"d"		/* int_least16_t */
 #define	PRIdLEAST32		"d"		/* int_least32_t */
-#define	PRIdLEAST64		"lld"		/* int_least64_t */
+#define	PRIdLEAST64		__PRI_64_prefix"d"		/* int_least64_t */
 
 #define	PRIdFAST8		"d"		/* int_fast8_t */
 #define	PRIdFAST16		"d"		/* int_fast16_t */
 #define	PRIdFAST32		"d"		/* int_fast32_t */
-#define	PRIdFAST64		"lld"		/* int_fast64_t */
+#define	PRIdFAST64		__PRI_64_prefix"d"		/* int_fast64_t */
 
 #define	PRIdMAX			"jd"		/* intmax_t */
-#define	PRIdPTR			"d"		/* intptr_t */
+#define	PRIdPTR			__PRI_PTR_prefix"d"		/* intptr_t */
 
 #define	PRIi8			"i"		/* int8_t */
 #define	PRIi16			"i"		/* int16_t */
 #define	PRIi32			"i"		/* int32_t */
-#define	PRIi64			"lli"		/* int64_t */
+#define	PRIi64			__PRI_64_prefix"i"		/* int64_t */
 
 #define	PRIiLEAST8		"i"		/* int_least8_t */
 #define	PRIiLEAST16		"i"		/* int_least16_t */
 #define	PRIiLEAST32		"i"		/* int_least32_t */
-#define	PRIiLEAST64		"lli"		/* int_least64_t */
+#define	PRIiLEAST64		__PRI_64_prefix"i"		/* int_least64_t */
 
 #define	PRIiFAST8		"i"		/* int_fast8_t */
 #define	PRIiFAST16		"i"		/* int_fast16_t */
 #define	PRIiFAST32		"i"		/* int_fast32_t */
-#define	PRIiFAST64		"lli"		/* int_fast64_t */
+#define	PRIiFAST64		__PRI_64_prefix"i"		/* int_fast64_t */
 
 #define	PRIiMAX			"ji"		/* intmax_t */
-#define	PRIiPTR			"i"		/* intptr_t */
+#define	PRIiPTR			__PRI_PTR_prefix"i"		/* intptr_t */
 
 /* fprintf macros for unsigned integers */
 #define	PRIo8			"o"		/* int8_t */
 #define	PRIo16			"o"		/* int16_t */
 #define	PRIo32			"o"		/* int32_t */
-#define	PRIo64			"llo"		/* int64_t */
+#define	PRIo64			__PRI_64_prefix"o"		/* int64_t */
 
 #define	PRIoLEAST8		"o"		/* int_least8_t */
 #define	PRIoLEAST16		"o"		/* int_least16_t */
 #define	PRIoLEAST32		"o"		/* int_least32_t */
-#define	PRIoLEAST64		"llo"		/* int_least64_t */
+#define	PRIoLEAST64		__PRI_64_prefix"o"		/* int_least64_t */
 
 #define	PRIoFAST8		"o"		/* int_fast8_t */
 #define	PRIoFAST16		"o"		/* int_fast16_t */
 #define	PRIoFAST32		"o"		/* int_fast32_t */
-#define	PRIoFAST64		"llo"		/* int_fast64_t */
+#define	PRIoFAST64		__PRI_64_prefix"o"		/* int_fast64_t */
 
 #define	PRIoMAX			"jo"		/* intmax_t */
-#define	PRIoPTR			"o"		/* intptr_t */
+#define	PRIoPTR			__PRI_PTR_prefix"o"		/* intptr_t */
 
 #define	PRIu8			"u"		/* uint8_t */
 #define	PRIu16			"u"		/* uint16_t */
 #define	PRIu32			"u"		/* uint32_t */
-#define	PRIu64			"llu"		/* uint64_t */
+#define	PRIu64			__PRI_64_prefix"u"		/* uint64_t */
 
 #define	PRIuLEAST8		"u"		/* uint_least8_t */
 #define	PRIuLEAST16		"u"		/* uint_least16_t */
 #define	PRIuLEAST32		"u"		/* uint_least32_t */
-#define	PRIuLEAST64		"llu"		/* uint_least64_t */
+#define	PRIuLEAST64		__PRI_64_prefix"u"		/* uint_least64_t */
 
 #define	PRIuFAST8		"u"		/* uint_fast8_t */
 #define	PRIuFAST16		"u"		/* uint_fast16_t */
 #define	PRIuFAST32		"u"		/* uint_fast32_t */
-#define	PRIuFAST64		"llu"		/* uint_fast64_t */
+#define	PRIuFAST64		__PRI_64_prefix"u"		/* uint_fast64_t */
 
 #define	PRIuMAX			"ju"		/* uintmax_t */
-#define	PRIuPTR			"u"		/* uintptr_t */
+#define	PRIuPTR			__PRI_PTR_prefix"u"		/* uintptr_t */
 
 #define	PRIx8			"x"		/* uint8_t */
 #define	PRIx16			"x"		/* uint16_t */
 #define	PRIx32			"x"		/* uint32_t */
-#define	PRIx64			"llx"		/* uint64_t */
+#define	PRIx64			__PRI_64_prefix"x"		/* uint64_t */
 
 #define	PRIxLEAST8		"x"		/* uint_least8_t */
 #define	PRIxLEAST16		"x"		/* uint_least16_t */
 #define	PRIxLEAST32		"x"		/* uint_least32_t */
-#define	PRIxLEAST64		"llx"		/* uint_least64_t */
+#define	PRIxLEAST64		__PRI_64_prefix"x"		/* uint_least64_t */
 
 #define	PRIxFAST8		"x"		/* uint_fast8_t */
 #define	PRIxFAST16		"x"		/* uint_fast16_t */
 #define	PRIxFAST32		"x"		/* uint_fast32_t */
-#define	PRIxFAST64		"llx"		/* uint_fast64_t */
+#define	PRIxFAST64		__PRI_64_prefix"x"		/* uint_fast64_t */
 
 #define	PRIxMAX			"jx"		/* uintmax_t */
-#define	PRIxPTR			"x"		/* uintptr_t */
+#define	PRIxPTR			__PRI_PTR_prefix"x"		/* uintptr_t */
 
 #define	PRIX8			"X"		/* uint8_t */
 #define	PRIX16			"X"		/* uint16_t */
 #define	PRIX32			"X"		/* uint32_t */
-#define	PRIX64			"llX"		/* uint64_t */
+#define	PRIX64			__PRI_64_prefix"X"		/* uint64_t */
 
 #define	PRIXLEAST8		"X"		/* uint_least8_t */
 #define	PRIXLEAST16		"X"		/* uint_least16_t */
 #define	PRIXLEAST32		"X"		/* uint_least32_t */
-#define	PRIXLEAST64		"llX"		/* uint_least64_t */
+#define	PRIXLEAST64		__PRI_64_prefix"X"		/* uint_least64_t */
 
 #define	PRIXFAST8		"X"		/* uint_fast8_t */
 #define	PRIXFAST16		"X"		/* uint_fast16_t */
 #define	PRIXFAST32		"X"		/* uint_fast32_t */
-#define	PRIXFAST64		"llX"		/* uint_fast64_t */
+#define	PRIXFAST64		__PRI_64_prefix"X"		/* uint_fast64_t */
 
 #define	PRIXMAX			"jX"		/* uintmax_t */
-#define	PRIXPTR			"X"		/* uintptr_t */
+#define	PRIXPTR			__PRI_PTR_prefix"X"		/* uintptr_t */
 
 /* fscanf macros for signed integers */
 #define	SCNd8			"hhd"		/* int8_t */
 #define	SCNd16			"hd"		/* int16_t */
 #define	SCNd32			"d"		/* int32_t */
-#define	SCNd64			"lld"		/* int64_t */
+#define	SCNd64			__PRI_64_prefix"d"		/* int64_t */
 
 #define	SCNdLEAST8		"hhd"		/* int_least8_t */
 #define	SCNdLEAST16		"hd"		/* int_least16_t */
 #define	SCNdLEAST32		"d"		/* int_least32_t */
-#define	SCNdLEAST64		"lld"		/* int_least64_t */
+#define	SCNdLEAST64		__PRI_64_prefix"d"		/* int_least64_t */
 
 #define	SCNdFAST8		"hhd"		/* int_fast8_t */
 #define	SCNdFAST16		"hd"		/* int_fast16_t */
 #define	SCNdFAST32		"d"		/* int_fast32_t */
-#define	SCNdFAST64		"lld"		/* int_fast64_t */
+#define	SCNdFAST64		__PRI_64_prefix"d"		/* int_fast64_t */
 
 #define	SCNdMAX			"jd"		/* intmax_t */
-#define	SCNdPTR			"d"		/* intptr_t */
+#define	SCNdPTR			__PRI_PTR_prefix"d"		/* intptr_t */
 
 #define	SCNi8			"hhi"		/* int8_t */
 #define	SCNi16			"hi"		/* int16_t */
 #define	SCNi32			"i"		/* int32_t */
-#define	SCNi64			"lli"		/* int64_t */
+#define	SCNi64			__PRI_64_prefix"i"		/* int64_t */
 
 #define	SCNiLEAST8		"hhi"		/* int_least8_t */
 #define	SCNiLEAST16		"hi"		/* int_least16_t */
 #define	SCNiLEAST32		"i"		/* int_least32_t */
-#define	SCNiLEAST64		"lli"		/* int_least64_t */
+#define	SCNiLEAST64		__PRI_64_prefix"i"		/* int_least64_t */
 
 #define	SCNiFAST8		"hhi"		/* int_fast8_t */
 #define	SCNiFAST16		"hi"		/* int_fast16_t */
 #define	SCNiFAST32		"i"		/* int_fast32_t */
-#define	SCNiFAST64		"lli"		/* int_fast64_t */
+#define	SCNiFAST64		__PRI_64_prefix"i"		/* int_fast64_t */
 
 #define	SCNiMAX			"ji"		/* intmax_t */
-#define	SCNiPTR			"i"		/* intptr_t */
+#define	SCNiPTR			__PRI_PTR_prefix"i"		/* intptr_t */
 
 /* fscanf macros for unsigned integers */
 #define	SCNo8			"hho"		/* uint8_t */
 #define	SCNo16			"ho"		/* uint16_t */
 #define	SCNo32			"o"		/* uint32_t */
-#define	SCNo64			"llo"		/* uint64_t */
+#define	SCNo64			__PRI_64_prefix"o"		/* uint64_t */
 
 #define	SCNoLEAST8		"hho"		/* uint_least8_t */
 #define	SCNoLEAST16		"ho"		/* uint_least16_t */
 #define	SCNoLEAST32		"o"		/* uint_least32_t */
-#define	SCNoLEAST64		"llo"		/* uint_least64_t */
+#define	SCNoLEAST64		__PRI_64_prefix"o"		/* uint_least64_t */
 
 #define	SCNoFAST8		"hho"		/* uint_fast8_t */
 #define	SCNoFAST16		"ho"		/* uint_fast16_t */
 #define	SCNoFAST32		"o"		/* uint_fast32_t */
-#define	SCNoFAST64		"llo"		/* uint_fast64_t */
+#define	SCNoFAST64		__PRI_64_prefix"o"		/* uint_fast64_t */
 
 #define	SCNoMAX			"jo"		/* uintmax_t */
-#define	SCNoPTR			"o"		/* uintptr_t */
+#define	SCNoPTR			__PRI_PTR_prefix"o"		/* uintptr_t */
 
 #define	SCNu8			"hhu"		/* uint8_t */
 #define	SCNu16			"hu"		/* uint16_t */
 #define	SCNu32			"u"		/* uint32_t */
-#define	SCNu64			"llu"		/* uint64_t */
+#define	SCNu64			__PRI_64_prefix"u"		/* uint64_t */
 
 #define	SCNuLEAST8		"hhu"		/* uint_least8_t */
 #define	SCNuLEAST16		"hu"		/* uint_least16_t */
 #define	SCNuLEAST32		"u"		/* uint_least32_t */
-#define	SCNuLEAST64		"llu"		/* uint_least64_t */
+#define	SCNuLEAST64		__PRI_64_prefix"u"		/* uint_least64_t */
 
 #define	SCNuFAST8		"hhu"		/* uint_fast8_t */
 #define	SCNuFAST16		"hu"		/* uint_fast16_t */
 #define	SCNuFAST32		"u"		/* uint_fast32_t */
-#define	SCNuFAST64		"llu"		/* uint_fast64_t */
+#define	SCNuFAST64		__PRI_64_prefix"u"		/* uint_fast64_t */
 
 #define	SCNuMAX			"ju"		/* uintmax_t */
-#define	SCNuPTR			"u"		/* uintptr_t */
+#define	SCNuPTR			__PRI_PTR_prefix"u"		/* uintptr_t */
 
 #define	SCNx8			"hhx"		/* uint8_t */
 #define	SCNx16			"hx"		/* uint16_t */
 #define	SCNx32			"x"		/* uint32_t */
-#define	SCNx64			"llx"		/* uint64_t */
+#define	SCNx64			__PRI_64_prefix"x"		/* uint64_t */
 
 #define	SCNxLEAST8		"hhx"		/* uint_least8_t */
 #define	SCNxLEAST16		"hx"		/* uint_least16_t */
 #define	SCNxLEAST32		"x"		/* uint_least32_t */
-#define	SCNxLEAST64		"llx"		/* uint_least64_t */
+#define	SCNxLEAST64		__PRI_64_prefix"x"		/* uint_least64_t */
 
 #define	SCNxFAST8		"hhx"		/* uint_fast8_t */
 #define	SCNxFAST16		"hx"		/* uint_fast16_t */
 #define	SCNxFAST32		"x"		/* uint_fast32_t */
-#define	SCNxFAST64		"llx"		/* uint_fast64_t */
+#define	SCNxFAST64		__PRI_64_prefix"x"		/* uint_fast64_t */
 
 #define	SCNxMAX			"jx"		/* uintmax_t */
-#define	SCNxPTR			"x"		/* uintptr_t */
+#define	SCNxPTR			__PRI_PTR_prefix"x"		/* uintptr_t */
 
 #endif /* __cplusplus || __STDC_FORMAT_MACROS */
 
diff --git a/libc/include/stdint.h b/libc/include/stdint.h
index b6b6444..c795893 100644
--- a/libc/include/stdint.h
+++ b/libc/include/stdint.h
@@ -25,17 +25,18 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
+
 #ifndef _STDINT_H
 #define _STDINT_H
 
 #include <stddef.h>
 #include <sys/_types.h>
 
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) || (__cplusplus >= 201103L)
 #  define __STDINT_LIMITS
 #endif
 
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) || (__cplusplus >= 201103L)
 #  define  __STDINT_MACROS
 #endif
 
@@ -157,6 +158,14 @@
 typedef uint64_t      uint_least64_t;
 typedef uint64_t      uint_fast64_t;
 
+#if __LP64__
+#  define __INT64_C(c)  c ## L
+#  define __UINT64_C(c) c ## UL
+#else
+#  define __INT64_C(c)  c ## LL
+#  define __UINT64_C(c) c ## ULL
+#endif
+
 #ifdef __STDINT_LIMITS
 #  define INT64_MIN        (__INT64_C(-9223372036854775807)-1)
 #  define INT64_MAX        (__INT64_C(9223372036854775807))
@@ -170,9 +179,6 @@
 #  define UINT_FAST64_MAX UINT64_MAX
 #endif
 
-#define __INT64_C(c)     c ## LL
-#define __UINT64_C(c)     c ## ULL
-
 #ifdef __STDINT_MACROS
 #  define INT64_C(c)       __INT64_C(c)
 #  define INT_LEAST64_C(c) INT64_C(c)