1+ /* 
2+  * Copyright (c) 2019 BayLibre SAS 
3+  * 
4+  * SPDX-License-Identifier: Apache-2.0 
5+  */ 
6+ 
7+ #ifndef  ZEPHYR_INCLUDE_TOOLCHAIN_STDINT_H_ 
8+ #define  ZEPHYR_INCLUDE_TOOLCHAIN_STDINT_H_ 
9+ 
10+ /* 
11+  * Some gcc versions and/or configurations as found in the Zephyr SDK 
12+  * (questionably) define __INT32_TYPE__ and derivatives as a long int 
13+  * which makes the printf format checker to complain about long vs int 
14+  * mismatch when %u is given a uint32_t argument, and uint32_t pointers not 
15+  * being compatible with int pointers. Let's redefine them to follow 
16+  * common expectations and usage. 
17+  */ 
18+ 
19+ #if  __SIZEOF_INT__  !=  4 
20+ #error  "unexpected int width"
21+ #endif 
22+ 
23+ #undef  __INT32_TYPE__
24+ #undef  __UINT32_TYPE__
25+ #undef  __INT_FAST32_TYPE__
26+ #undef  __UINT_FAST32_TYPE__
27+ #undef  __INT_LEAST32_TYPE__
28+ #undef  __UINT_LEAST32_TYPE__
29+ #undef  __INT64_TYPE__
30+ #undef  __UINT64_TYPE__
31+ #undef  __INT_FAST64_TYPE__
32+ #undef  __UINT_FAST64_TYPE__
33+ #undef  __INT_LEAST64_TYPE__
34+ #undef  __UINT_LEAST64_TYPE__
35+ 
36+ #define  __INT32_TYPE__  int
37+ #define  __UINT32_TYPE__  unsigned int
38+ #define  __INT_FAST32_TYPE__  __INT32_TYPE__
39+ #define  __UINT_FAST32_TYPE__  __UINT32_TYPE__
40+ #define  __INT_LEAST32_TYPE__  __INT32_TYPE__
41+ #define  __UINT_LEAST32_TYPE__  __UINT32_TYPE__
42+ #define  __INT64_TYPE__  long long int
43+ #define  __UINT64_TYPE__  unsigned long long int
44+ #define  __INT_FAST64_TYPE__  __INT64_TYPE__
45+ #define  __UINT_FAST64_TYPE__  __UINT64_TYPE__
46+ #define  __INT_LEAST64_TYPE__  __INT64_TYPE__
47+ #define  __UINT_LEAST64_TYPE__  __UINT64_TYPE__
48+ 
49+ /* 
50+  * The confusion also exists with __INTPTR_TYPE__ which is either an int 
51+  * (even when __INT32_TYPE__ is a long int) or a long int. Let's redefine 
52+  * it to a long int to get some uniformity. Doing so also makes it compatible 
53+  * with LP64 (64-bit) targets where a long is always 64-bit wide. 
54+  */ 
55+ 
56+ #if  __SIZEOF_POINTER__  !=  __SIZEOF_LONG__ 
57+ #error  "unexpected size difference between pointers and long ints"
58+ #endif 
59+ 
60+ #undef  __INTPTR_TYPE__
61+ #undef  __UINTPTR_TYPE__
62+ #define  __INTPTR_TYPE__  long int
63+ #define  __UINTPTR_TYPE__  long unsigned int
64+ 
65+ /* 
66+  * Re-define the INTN_C(value) integer constant expression macros to match the 
67+  * integer types re-defined above. 
68+  */ 
69+ 
70+ #undef  __INT32_C
71+ #undef  __UINT32_C
72+ #undef  __INT64_C
73+ #undef  __UINT64_C
74+ #define  __INT32_C (c ) c
75+ #define  __UINT32_C (c ) c ## U
76+ #define  __INT64_C (c ) c ## LL
77+ #define  __UINT64_C (c ) c ## ULL
78+ 
79+ #endif  /* ZEPHYR_INCLUDE_TOOLCHAIN_STDINT_H_ */ 
0 commit comments