Add C89 stdint compatibility
This commit is contained in:
parent
7c0333124b
commit
27224cdd4c
4 changed files with 100 additions and 9 deletions
66
sj_stdint.h
Normal file
66
sj_stdint.h
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Small fixed-width integer compatibility layer for SJ3.
|
||||
*
|
||||
* In C99 or newer translation units, use <stdint.h>. In C89 translation
|
||||
* units, provide the fixed-width names that SJ3 needs when the host integer
|
||||
* model has matching types.
|
||||
*/
|
||||
|
||||
#ifndef SJ_STDINT_H_
|
||||
#define SJ_STDINT_H_
|
||||
|
||||
#if defined(HAVE_C99_STDINT) && HAVE_C99_STDINT && \
|
||||
defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
#include <stdint.h>
|
||||
#else
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#if !defined(UINT8_MAX)
|
||||
# if UCHAR_MAX == 255
|
||||
typedef signed char int8_t;
|
||||
typedef unsigned char uint8_t;
|
||||
# define UINT8_MAX UCHAR_MAX
|
||||
# else
|
||||
# error "SJ3 requires an 8-bit unsigned char"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(UINT16_MAX)
|
||||
# if USHRT_MAX == 65535
|
||||
typedef short int16_t;
|
||||
typedef unsigned short uint16_t;
|
||||
# define UINT16_MAX USHRT_MAX
|
||||
# else
|
||||
# error "SJ3 requires a 16-bit unsigned short"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(UINT32_MAX)
|
||||
# if UINT_MAX == 4294967295U
|
||||
typedef int int32_t;
|
||||
typedef unsigned int uint32_t;
|
||||
# define UINT32_MAX UINT_MAX
|
||||
# elif ULONG_MAX == 4294967295UL
|
||||
typedef long int32_t;
|
||||
typedef unsigned long uint32_t;
|
||||
# define UINT32_MAX ULONG_MAX
|
||||
# else
|
||||
# error "SJ3 requires a 32-bit integer type"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(UINT64_MAX) && (ULONG_MAX > 4294967295UL)
|
||||
typedef long int64_t;
|
||||
typedef unsigned long uint64_t;
|
||||
# define UINT64_MAX ULONG_MAX
|
||||
#elif !defined(UINT64_MAX) && (defined(_MSC_VER) || defined(_WIN32))
|
||||
typedef __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* SJ_STDINT_H_ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue