From 4ecf33614bead27801080442d9190e81aff78432 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Wed, 30 Oct 2013 14:52:55 -0400 Subject: fix inttypes.h PRI and SCN macros for [u]intptr_t types while using "l" unconditionally gave the right behavior due to matching sizes/representations, it was technically UB and produced compiler warnings with format string checking. --- include/inttypes.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'include/inttypes.h') diff --git a/include/inttypes.h b/include/inttypes.h index c51769fa..61dcb727 100644 --- a/include/inttypes.h +++ b/include/inttypes.h @@ -24,8 +24,10 @@ uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); #if UINTPTR_MAX == UINT64_MAX #define __PRI64 "l" +#define __PRIPTR "l" #else #define __PRI64 "ll" +#define __PRIPTR "" #endif #define PRId8 "d" @@ -125,12 +127,12 @@ uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); #define PRIxMAX __PRI64 "x" #define PRIXMAX __PRI64 "X" -#define PRIdPTR "ld" -#define PRIiPTR "li" -#define PRIoPTR "lo" -#define PRIuPTR "lu" -#define PRIxPTR "lx" -#define PRIXPTR "lX" +#define PRIdPTR __PRIPTR "d" +#define PRIiPTR __PRIPTR "i" +#define PRIoPTR __PRIPTR "o" +#define PRIuPTR __PRIPTR "u" +#define PRIxPTR __PRIPTR "x" +#define PRIXPTR __PRIPTR "X" #define SCNd8 "hhd" #define SCNd16 "hd" @@ -213,11 +215,11 @@ uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); #define SCNuMAX __PRI64 "u" #define SCNxMAX __PRI64 "x" -#define SCNdPTR "ld" -#define SCNiPTR "li" -#define SCNoPTR "lo" -#define SCNuPTR "lu" -#define SCNxPTR "lx" +#define SCNdPTR __PRIPTR "d" +#define SCNiPTR __PRIPTR "i" +#define SCNoPTR __PRIPTR "o" +#define SCNuPTR __PRIPTR "u" +#define SCNxPTR __PRIPTR "x" #ifdef __cplusplus } -- cgit v1.2.1