1/*****
2*
3* Copyright (C) 2004-2015 CS-SI. All Rights Reserved.
4* Author: Yoann Vandoorselaere <yoann.v@prelude-ids.com>
5*
6* This file is part of the Prelude library.
7*
8* This program is free software; you can redistribute it and/or modify
9* it under the terms of the GNU General Public License as published by
10* the Free Software Foundation; either version 2, or (at your option)
11* any later version.
12*
13* This program is distributed in the hope that it will be useful,
14* but WITHOUT ANY WARRANTY; without even the implied warranty of
15* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16* GNU General Public License for more details.
17*
18* You should have received a copy of the GNU General Public License along
19* with this program; if not, write to the Free Software Foundation, Inc.,
20* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21*
22*****/
23
24#ifndef _LIBPRELUDE_INTTYPES_H
25#define _LIBPRELUDE_INTTYPES_H
26
27#ifdef __cplusplus
28 extern "C" {
29#endif
30
31/*
32 * Defined by ax_create_prelude_inttypes_h.m4
33 */
34@__PRELUDE_HAVE_STDINT_H@
35@__PRELUDE_HAVE_INTTYPES_H@
36@__PRELUDE_HAVE_64BIT_LONG@
37@__PRELUDE_STDINT_HAVE_UINT8@
38@__PRELUDE_STDINT_HAVE_UINT16@
39@__PRELUDE_STDINT_HAVE_UINT32@
40@__PRELUDE_STDINT_HAVE_UINT64@
41@__PRELUDE_64BIT_FORMAT_PREFIX@
42
43#ifdef __PRELUDE_HAVE_64BIT_LONG
44 #define __PRELUDE_INT64_SUFFIX(x) x ## L
45 #define __PRELUDE_UINT64_SUFFIX(x) x ## UL
46#else
47 #define __PRELUDE_INT64_SUFFIX(x) x ## LL
48 #define __PRELUDE_UINT64_SUFFIX(x) x ##ULL
49#endif
50
51#ifdef HAVE_CONFIG_H
52# include "config.h"
53#endif
54
55#ifdef __PRELUDE_HAVE_STDINT_H
56# include <stdint.h>
57#endif
58
59#ifdef __PRELUDE_HAVE_INTTYPES_H
60# include <inttypes.h>
61#endif
62
63#include <limits.h>
64
65#ifndef TRUE
66# define TRUE 1
67#endif
68
69#ifndef FALSE
70# define FALSE 0
71#endif
72
73
74
75/*
76 * Minimum of signed integral types.
77 */
78#define PRELUDE_INT8_MIN               (-128)
79#define PRELUDE_INT16_MIN              (-32767 - 1)
80#define PRELUDE_INT32_MIN              (-2147483647 - 1)
81#define PRELUDE_INT64_MIN              (-__PRELUDE_INT64_SUFFIX(9223372036854775807) - 1)
82
83
84
85/*
86 * Maximum of signed integral types.
87 */
88#define PRELUDE_INT8_MAX               (127)
89#define PRELUDE_INT16_MAX              (32767)
90#define PRELUDE_INT32_MAX              (2147483647)
91#define PRELUDE_INT64_MAX              (__PRELUDE_INT64_SUFFIX(9223372036854775807))
92
93
94/*
95 * Maximum of unsigned integral types.
96 */
97#define PRELUDE_UINT8_MAX              (255)
98#define PRELUDE_UINT16_MAX             (65535)
99#define PRELUDE_UINT32_MAX             (4294967295U)
100#define PRELUDE_UINT64_MAX             (__PRELUDE_UINT64_SUFFIX(18446744073709551615))
101
102
103/*
104 * Other
105 */
106#define PRELUDE_INTMAX_MIN             INT64_MIN
107#define PRELUDE_INTMAX_MAX             INT64_MAX
108#define PRELUDE_UINTMAX_MAX            UINT64_MAX
109
110
111/*
112 * Tandem NonStop R series and compatible platforms released before
113 * July 2005 support %Ld but not %lld.
114 */
115# if defined _TNS_R_TARGET
116#  define _LONG_LONG_FORMAT_PREFIX "L"
117# else
118#  define _LONG_LONG_FORMAT_PREFIX "ll"
119# endif
120
121#if PRELUDE_INT64_MAX == LONG_MAX
122# define __PRELUDE_64BIT_FORMAT_PREFIX "l"
123#elif defined _MSC_VER || defined __MINGW32__
124# define __PRELUDE_64BIT_FORMAT_PREFIX "I64"
125#elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
126# define __PRELUDE_64BIT_FORMAT_PREFIX _LONG_LONG_FORMAT_PREFIX
127#endif
128
129
130
131/*
132 * format specifier
133 */
134#define PRELUDE_PRId64      __PRELUDE_64BIT_FORMAT_PREFIX "d"
135#define PRELUDE_PRIi64      __PRELUDE_64BIT_FORMAT_PREFIX "i"
136#define PRELUDE_PRIo64      __PRELUDE_64BIT_FORMAT_PREFIX "o"
137#define PRELUDE_PRIx64      __PRELUDE_64BIT_FORMAT_PREFIX "x"
138#define PRELUDE_PRIX64      __PRELUDE_64BIT_FORMAT_PREFIX "X"
139#define PRELUDE_PRIu64      __PRELUDE_64BIT_FORMAT_PREFIX "u"
140
141#define PRELUDE_PRId32      "d"
142#define PRELUDE_PRIi32      "i"
143#define PRELUDE_PRIo32      "o"
144#define PRELUDE_PRIx32      "x"
145#define PRELUDE_PRIX32      "X"
146#define PRELUDE_PRIu32      "u"
147
148#define PRELUDE_PRId16      "d"
149#define PRELUDE_PRIi16      "i"
150#define PRELUDE_PRIo16      "o"
151#define PRELUDE_PRIx16      "x"
152#define PRELUDE_PRIX16      "X"
153#define PRELUDE_PRIu16      "u"
154
155#define PRELUDE_PRId8       "d"
156#define PRELUDE_PRIi8       "i"
157#define PRELUDE_PRIo8       "o"
158#define PRELUDE_PRIx8       "x"
159#define PRELUDE_PRIX8       "X"
160#define PRELUDE_PRIu8       "u"
161
162#define PRELUDE_SCNd64      __PRELUDE_64BIT_FORMAT_PREFIX "d"
163#define PRELUDE_SCNi64      __PRELUDE_64BIT_FORMAT_PREFIX "i"
164#define PRELUDE_SCNo64      __PRELUDE_64BIT_FORMAT_PREFIX "o"
165#define PRELUDE_SCNx64      __PRELUDE_64BIT_FORMAT_PREFIX "x"
166#define PRELUDE_SCNu64      __PRELUDE_64BIT_FORMAT_PREFIX "u"
167
168#define PRELUDE_SCNd32      "d"
169#define PRELUDE_SCNi32      "i"
170#define PRELUDE_SCNo32      "o"
171#define PRELUDE_SCNx32      "x"
172#define PRELUDE_SCNu32      "u"
173
174#define PRELUDE_SCNd16      "hd"
175#define PRELUDE_SCNi16      "hi"
176#define PRELUDE_SCNo16      "ho"
177#define PRELUDE_SCNx16      "hx"
178#define PRELUDE_SCNu16      "hu"
179
180#define PRELUDE_SCNd8       "hhd"
181#define PRELUDE_SCNi8       "hhi"
182#define PRELUDE_SCNo8       "hho"
183#define PRELUDE_SCNx8       "hhx"
184#define PRELUDE_SCNu8       "hhu"
185
186
187/*
188 * Type definition
189 */
190typedef enum {
191        PRELUDE_BOOL_TRUE = TRUE,
192        PRELUDE_BOOL_FALSE = FALSE
193} prelude_bool_t;
194
195
196#ifndef __PRELUDE_STDINT_HAVE_UINT8
197 typedef signed char int8_t;
198 typedef unsigned char uint8_t;
199#endif
200
201
202#ifndef __PRELUDE_STDINT_HAVE_UINT16
203 typedef short int16_t;
204 typedef unsigned short uint16_t;
205#endif
206
207#ifndef __PRELUDE_STDINT_HAVE_UINT32
208 typedef int int32_t;
209 typedef unsigned int uint32_t;
210#endif
211
212#ifndef __PRELUDE_STDINT_HAVE_UINT64
213# ifdef __PRELUDE_HAVE_64BIT_LONG
214
215  typedef long int64_t;
216  typedef unsigned long uint64_t;
217
218# else
219
220  typedef long long int64_t;
221  typedef unsigned long long uint64_t;
222
223# endif
224#endif
225
226#ifdef __cplusplus
227 }
228#endif
229
230#endif /* _LIBPRELUDE_INTTYPES_H */
231