1c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/**
2c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * This file has no copyright assigned and is placed in the Public Domain.
3c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * This file was originally part of the w64 mingw-runtime package.
4c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */
5c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
6c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* ISO C9x  7.18  Integer types <stdint.h>
7c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
8c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *
9c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  THIS SOFTWARE IS NOT COPYRIGHTED
10c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *
11c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz>
12c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  Modified for libusb/MSVC: Pete Batard <pbatard@gmail.com>
13c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *
14c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  This source code is offered for use in the public domain. You may
15c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  use, modify or distribute it freely.
16c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *
17c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  This code is distributed in the hope that it will be useful but
18c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  DISCLAIMED. This includes but is not limited to warranties of
20c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *
22c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  Date: 2010-04-02
23c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */
24c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
25c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _MSC_VER
26c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#error This header should only be used with Microsoft compilers
27c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
28c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
29c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _STDINT_H
30c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _STDINT_H
31c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
32c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _INTPTR_T_DEFINED
33c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _INTPTR_T_DEFINED
34c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef __intptr_t_defined
35c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define __intptr_t_defined
36c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#undef intptr_t
37c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64
38c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef __int64 intptr_t;
39c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else
40c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef int intptr_t;
41c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WIN64 */
42c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* __intptr_t_defined */
43c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _INTPTR_T_DEFINED */
44c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
45c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _UINTPTR_T_DEFINED
46c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _UINTPTR_T_DEFINED
47c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef __uintptr_t_defined
48c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define __uintptr_t_defined
49c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#undef uintptr_t
50c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64
51c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef unsigned __int64 uintptr_t;
52c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else
53c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef unsigned int uintptr_t;
54c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WIN64 */
55c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* __uintptr_t_defined */
56c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _UINTPTR_T_DEFINED */
57c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
58c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _PTRDIFF_T_DEFINED
59c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _PTRDIFF_T_DEFINED
60c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _PTRDIFF_T_
61c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _PTRDIFF_T_
62c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#undef ptrdiff_t
63c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64
64c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef __int64 ptrdiff_t;
65c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else
66c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef int ptrdiff_t;
67c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WIN64 */
68c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _PTRDIFF_T_ */
69c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _PTRDIFF_T_DEFINED */
70c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
71c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _WCHAR_T_DEFINED
72c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _WCHAR_T_DEFINED
73c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef __cplusplus
74c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef unsigned short wchar_t;
75c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* C++ */
76c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WCHAR_T_DEFINED */
77c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
78c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _WCTYPE_T_DEFINED
79c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _WCTYPE_T_DEFINED
80c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _WINT_T
81c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _WINT_T
82c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef unsigned short wint_t;
83c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard  typedef unsigned short wctype_t;
84c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WINT_T */
85c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WCTYPE_T_DEFINED */
86c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
87c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.1  Exact-width integer types */
88c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int8 int8_t;
89c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int8   uint8_t;
90c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int16  int16_t;
91c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int16  uint16_t;
92c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int32  int32_t;
93c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int32  uint32_t;
94c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64  int64_t;
95c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64   uint64_t;
96c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
97c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.2  Minimum-width integer types */
98c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef signed char int_least8_t;
99c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned char   uint_least8_t;
100c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef short  int_least16_t;
101c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned short  uint_least16_t;
102c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef int  int_least32_t;
103c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned   uint_least32_t;
104c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64  int_least64_t;
105c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64   uint_least64_t;
106c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
107c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/*  7.18.1.3  Fastest minimum-width integer types
108c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  Not actually guaranteed to be fastest for all purposes
109c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *  Here we use the exact-width types for 8 and 16-bit ints.
110c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */
111c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int8 int_fast8_t;
112c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int8 uint_fast8_t;
113c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int16  int_fast16_t;
114c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int16  uint_fast16_t;
115c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int32  int_fast32_t;
116c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned  __int32  uint_fast32_t;
117c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64  int_fast64_t;
118c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64   uint_fast64_t;
119c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
120c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.5  Greatest-width integer types */
121c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64  intmax_t;
122c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64   uintmax_t;
123c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
124c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2  Limits of specified-width integer types */
125c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
126c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.1  Limits of exact-width integer types */
127c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT8_MIN (-128)
128c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT16_MIN (-32768)
129c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT32_MIN (-2147483647 - 1)
130c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT64_MIN  (-9223372036854775807LL - 1)
131c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
132c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT8_MAX 127
133c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT16_MAX 32767
134c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT32_MAX 2147483647
135c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT64_MAX 9223372036854775807LL
136c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
137c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT8_MAX 255
138c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT16_MAX 65535
139c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT32_MAX 0xffffffffU  /* 4294967295U */
140c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
141c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
142c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.2  Limits of minimum-width integer types */
143c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST8_MIN INT8_MIN
144c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST16_MIN INT16_MIN
145c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST32_MIN INT32_MIN
146c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST64_MIN INT64_MIN
147c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
148c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST8_MAX INT8_MAX
149c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST16_MAX INT16_MAX
150c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST32_MAX INT32_MAX
151c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST64_MAX INT64_MAX
152c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
153c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST8_MAX UINT8_MAX
154c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST16_MAX UINT16_MAX
155c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST32_MAX UINT32_MAX
156c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST64_MAX UINT64_MAX
157c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
158c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.3  Limits of fastest minimum-width integer types */
159c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST8_MIN INT8_MIN
160c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST16_MIN INT16_MIN
161c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST32_MIN INT32_MIN
162c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST64_MIN INT64_MIN
163c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
164c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST8_MAX INT8_MAX
165c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST16_MAX INT16_MAX
166c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST32_MAX INT32_MAX
167c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST64_MAX INT64_MAX
168c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
169c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST8_MAX UINT8_MAX
170c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST16_MAX UINT16_MAX
171c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST32_MAX UINT32_MAX
172c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST64_MAX UINT64_MAX
173c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
174c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.4  Limits of integer types capable of holding
175c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard    object pointers */
176c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64
177c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MIN INT64_MIN
178c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MAX INT64_MAX
179c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTPTR_MAX UINT64_MAX
180c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else
181c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MIN INT32_MIN
182c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MAX INT32_MAX
183c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTPTR_MAX UINT32_MAX
184c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
185c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
186c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.5  Limits of greatest-width integer types */
187c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTMAX_MIN INT64_MIN
188c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTMAX_MAX INT64_MAX
189c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTMAX_MAX UINT64_MAX
190c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
191c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.3  Limits of other integer types */
192c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64
193c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MIN INT64_MIN
194c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MAX INT64_MAX
195c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else
196c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MIN INT32_MIN
197c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MAX INT32_MAX
198c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
199c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
200c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIG_ATOMIC_MIN INT32_MIN
201c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIG_ATOMIC_MAX INT32_MAX
202c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
203c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef SIZE_MAX
204c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64
205c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIZE_MAX UINT64_MAX
206c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else
207c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIZE_MAX UINT32_MAX
208c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
209c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
210c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
211c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef WCHAR_MIN  /* also in wchar.h */
212c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WCHAR_MIN 0U
213c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WCHAR_MAX 0xffffU
214c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
215c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
216c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/*
217c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * wint_t is unsigned short for compatibility with MS runtime
218c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */
219c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WINT_MIN 0U
220c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WINT_MAX 0xffffU
221c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
222c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
223c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.4  Macros for integer constants */
224c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
225c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.4.1  Macros for minimum-width integer constants
226c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
227c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard    Accoding to Douglas Gwyn <gwyn@arl.mil>:
228c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	"This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
229c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	9899:1999 as initially published, the expansion was required
230c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	to be an integer constant of precisely matching type, which
231c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	is impossible to accomplish for the shorter types on most
232c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	platforms, because C99 provides no standard way to designate
233c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	an integer constant with width less than that of type int.
234c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	TC1 changed this to require just an integer constant
235c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	*expression* with *promoted* type."
236c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
237c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard	The trick used here is from Clive D W Feather.
238c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard*/
239c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
240c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
241c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
242c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
243c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/*  The 'trick' doesn't work in C89 for long long because, without
244c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard    suffix, (val) will be evaluated as int, not intmax_t */
245c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT64_C(val) val##i64
246c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
247c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT8_C(val) (val)
248c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT16_C(val) (val)
249c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT32_C(val) (val##i32)
250c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT64_C(val) val##ui64
251c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
252c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.4.2  Macros for greatest-width integer constants */
253c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTMAX_C(val) val##i64
254c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTMAX_C(val) val##ui64
255c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard
256c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif
257