Loading...
include/inttypes.h Libc-825.25 Libc-583
--- Libc/Libc-825.25/include/inttypes.h
+++ Libc/Libc-583/include/inttypes.h
@@ -28,12 +28,29 @@
  * and their ilk.
  */
 
-#if !defined(_INTTYPES_H_)
-#define _INTTYPES_H_
-
-#  define __PRI_8_LENGTH_MODIFIER__ "hh"
-#  define __PRI_64_LENGTH_MODIFIER__ "ll"
-#  define __SCN_64_LENGTH_MODIFIER__ "ll"
+/* "C++ implementations should define these macros only when
+ *  __STDC_FORMAT_MACROS is defined before <inttypes.h> is included."
+ */
+#if (!defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)) && !defined(__STDC_FORMAT_MACROS_DEFINED)
+#define __STDC_FORMAT_MACROS_DEFINED
+
+#  undef __PRI_8_LENGTH_MODIFIER__
+#  undef __PRI_64_LENGTH_MODIFIER__
+#  undef __SCN_64_LENGTH_MODIFIER__
+
+#  if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 > 1020
+#    define __PRI_8_LENGTH_MODIFIER__ "hh"
+#    define __PRI_64_LENGTH_MODIFIER__ "ll"
+#    define __SCN_64_LENGTH_MODIFIER__ "ll"
+#  else
+/* These could be "hh", "ll", and "ll" respectively, but that doesn't work on
+   10.2, and these do.  Note that there's no way to use scanf to scan a
+   decimal into a 'char' argument on 10.2, so "hh" is used unconditionally
+   and programs that use it won't work on Jaguar.  */
+#    define __PRI_8_LENGTH_MODIFIER__ ""  /* none */
+#    define __PRI_64_LENGTH_MODIFIER__ "q"
+#    define __SCN_64_LENGTH_MODIFIER__ "q"
+#  endif
 #  define __PRI_MAX_LENGTH_MODIFIER__ "j"
 #  define __SCN_MAX_LENGTH_MODIFIER__ "j"
 
@@ -136,11 +153,19 @@
 #  define PRIxMAX        __PRI_MAX_LENGTH_MODIFIER__ "x"
 #  define PRIXMAX        __PRI_MAX_LENGTH_MODIFIER__ "X"
 
-#  define SCNd8         __PRI_8_LENGTH_MODIFIER__ "d"
-#  define SCNi8         __PRI_8_LENGTH_MODIFIER__ "i"
-#  define SCNo8         __PRI_8_LENGTH_MODIFIER__ "o"
-#  define SCNu8         __PRI_8_LENGTH_MODIFIER__ "u"
-#  define SCNx8         __PRI_8_LENGTH_MODIFIER__ "x"
+#  if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 > 1020
+#    define SCNd8         __PRI_8_LENGTH_MODIFIER__ "d"
+#    define SCNi8         __PRI_8_LENGTH_MODIFIER__ "i"
+#    define SCNo8         __PRI_8_LENGTH_MODIFIER__ "o"
+#    define SCNu8         __PRI_8_LENGTH_MODIFIER__ "u"
+#    define SCNx8         __PRI_8_LENGTH_MODIFIER__ "x"
+#  else
+#    define SCNd8         "hhd"
+#    define SCNi8         "hhi"
+#    define SCNo8         "hho"
+#    define SCNu8         "hhu"
+#    define SCNx8         "hhx"
+#  endif
 
 #  define SCNd16        "hd"
 #  define SCNi16        "hi"
@@ -219,6 +244,11 @@
 #  define SCNoMAX       __SCN_MAX_LENGTH_MODIFIER__ "o"
 #  define SCNuMAX       __SCN_MAX_LENGTH_MODIFIER__ "u"
 #  define SCNxMAX       __SCN_MAX_LENGTH_MODIFIER__ "x"
+
+#endif /* if C++, then __STDC_FORMAT_MACROS enables the above macros */
+
+#if !defined(_INTTYPES_H_)
+#define _INTTYPES_H_
 
 #include <sys/cdefs.h>		/* For __BEGIN_DECLS and __END_DECLS */
 #include <_types.h>		/* For __darwin_wchar_t */