Blame msvc/stdint.h

Packit Service b0a153
/**
Packit Service b0a153
 * This file has no copyright assigned and is placed in the Public Domain.
Packit Service b0a153
 * This file was originally part of the w64 mingw-runtime package.
Packit Service b0a153
 */
Packit Service b0a153
Packit Service b0a153
/* ISO C9x  7.18  Integer types <stdint.h>
Packit Service b0a153
 * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
Packit Service b0a153
 *
Packit Service b0a153
 *  THIS SOFTWARE IS NOT COPYRIGHTED
Packit Service b0a153
 *
Packit Service b0a153
 *  Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz>
Packit Service b0a153
 *  Modified for libusb/MSVC: Pete Batard <pbatard@gmail.com>
Packit Service b0a153
 *
Packit Service b0a153
 *  This source code is offered for use in the public domain. You may
Packit Service b0a153
 *  use, modify or distribute it freely.
Packit Service b0a153
 *
Packit Service b0a153
 *  This code is distributed in the hope that it will be useful but
Packit Service b0a153
 *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
Packit Service b0a153
 *  DISCLAIMED. This includes but is not limited to warranties of
Packit Service b0a153
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Packit Service b0a153
 *
Packit Service b0a153
 *  Date: 2010-04-02
Packit Service b0a153
 */
Packit Service b0a153
Packit Service b0a153
#ifndef _MSC_VER
Packit Service b0a153
#error This header should only be used with Microsoft compilers
Packit Service b0a153
#endif
Packit Service b0a153
Packit Service b0a153
#ifndef _STDINT_H
Packit Service b0a153
#define _STDINT_H
Packit Service b0a153
Packit Service b0a153
#ifndef _INTPTR_T_DEFINED
Packit Service b0a153
#define _INTPTR_T_DEFINED
Packit Service b0a153
#ifndef __intptr_t_defined
Packit Service b0a153
#define __intptr_t_defined
Packit Service b0a153
#undef intptr_t
Packit Service b0a153
#ifdef _WIN64
Packit Service b0a153
  typedef __int64 intptr_t;
Packit Service b0a153
#else
Packit Service b0a153
  typedef int intptr_t;
Packit Service b0a153
#endif /* _WIN64 */
Packit Service b0a153
#endif /* __intptr_t_defined */
Packit Service b0a153
#endif /* _INTPTR_T_DEFINED */
Packit Service b0a153
Packit Service b0a153
#ifndef _UINTPTR_T_DEFINED
Packit Service b0a153
#define _UINTPTR_T_DEFINED
Packit Service b0a153
#ifndef __uintptr_t_defined
Packit Service b0a153
#define __uintptr_t_defined
Packit Service b0a153
#undef uintptr_t
Packit Service b0a153
#ifdef _WIN64
Packit Service b0a153
  typedef unsigned __int64 uintptr_t;
Packit Service b0a153
#else
Packit Service b0a153
  typedef unsigned int uintptr_t;
Packit Service b0a153
#endif /* _WIN64 */
Packit Service b0a153
#endif /* __uintptr_t_defined */
Packit Service b0a153
#endif /* _UINTPTR_T_DEFINED */
Packit Service b0a153
Packit Service b0a153
#ifndef _PTRDIFF_T_DEFINED
Packit Service b0a153
#define _PTRDIFF_T_DEFINED
Packit Service b0a153
#ifndef _PTRDIFF_T_
Packit Service b0a153
#define _PTRDIFF_T_
Packit Service b0a153
#undef ptrdiff_t
Packit Service b0a153
#ifdef _WIN64
Packit Service b0a153
  typedef __int64 ptrdiff_t;
Packit Service b0a153
#else
Packit Service b0a153
  typedef int ptrdiff_t;
Packit Service b0a153
#endif /* _WIN64 */
Packit Service b0a153
#endif /* _PTRDIFF_T_ */
Packit Service b0a153
#endif /* _PTRDIFF_T_DEFINED */
Packit Service b0a153
Packit Service b0a153
#ifndef _WCHAR_T_DEFINED
Packit Service b0a153
#define _WCHAR_T_DEFINED
Packit Service b0a153
#ifndef __cplusplus
Packit Service b0a153
  typedef unsigned short wchar_t;
Packit Service b0a153
#endif /* C++ */
Packit Service b0a153
#endif /* _WCHAR_T_DEFINED */
Packit Service b0a153
Packit Service b0a153
#ifndef _WCTYPE_T_DEFINED
Packit Service b0a153
#define _WCTYPE_T_DEFINED
Packit Service b0a153
#ifndef _WINT_T
Packit Service b0a153
#define _WINT_T
Packit Service b0a153
  typedef unsigned short wint_t;
Packit Service b0a153
  typedef unsigned short wctype_t;
Packit Service b0a153
#endif /* _WINT_T */
Packit Service b0a153
#endif /* _WCTYPE_T_DEFINED */
Packit Service b0a153
Packit Service b0a153
/* 7.18.1.1  Exact-width integer types */
Packit Service b0a153
typedef __int8 int8_t;
Packit Service b0a153
typedef unsigned __int8   uint8_t;
Packit Service b0a153
typedef __int16  int16_t;
Packit Service b0a153
typedef unsigned __int16  uint16_t;
Packit Service b0a153
typedef __int32  int32_t;
Packit Service b0a153
typedef unsigned __int32  uint32_t;
Packit Service b0a153
typedef __int64  int64_t;
Packit Service b0a153
typedef unsigned __int64   uint64_t;
Packit Service b0a153
Packit Service b0a153
/* 7.18.1.2  Minimum-width integer types */
Packit Service b0a153
typedef signed char int_least8_t;
Packit Service b0a153
typedef unsigned char   uint_least8_t;
Packit Service b0a153
typedef short  int_least16_t;
Packit Service b0a153
typedef unsigned short  uint_least16_t;
Packit Service b0a153
typedef int  int_least32_t;
Packit Service b0a153
typedef unsigned   uint_least32_t;
Packit Service b0a153
typedef __int64  int_least64_t;
Packit Service b0a153
typedef unsigned __int64   uint_least64_t;
Packit Service b0a153
Packit Service b0a153
/*  7.18.1.3  Fastest minimum-width integer types
Packit Service b0a153
 *  Not actually guaranteed to be fastest for all purposes
Packit Service b0a153
 *  Here we use the exact-width types for 8 and 16-bit ints.
Packit Service b0a153
 */
Packit Service b0a153
typedef __int8 int_fast8_t;
Packit Service b0a153
typedef unsigned __int8 uint_fast8_t;
Packit Service b0a153
typedef __int16  int_fast16_t;
Packit Service b0a153
typedef unsigned __int16  uint_fast16_t;
Packit Service b0a153
typedef __int32  int_fast32_t;
Packit Service b0a153
typedef unsigned  __int32  uint_fast32_t;
Packit Service b0a153
typedef __int64  int_fast64_t;
Packit Service b0a153
typedef unsigned __int64   uint_fast64_t;
Packit Service b0a153
Packit Service b0a153
/* 7.18.1.5  Greatest-width integer types */
Packit Service b0a153
typedef __int64  intmax_t;
Packit Service b0a153
typedef unsigned __int64   uintmax_t;
Packit Service b0a153
Packit Service b0a153
/* 7.18.2  Limits of specified-width integer types */
Packit Service b0a153
Packit Service b0a153
/* 7.18.2.1  Limits of exact-width integer types */
Packit Service b0a153
#define INT8_MIN (-128)
Packit Service b0a153
#define INT16_MIN (-32768)
Packit Service b0a153
#define INT32_MIN (-2147483647 - 1)
Packit Service b0a153
#define INT64_MIN  (-9223372036854775807LL - 1)
Packit Service b0a153
Packit Service b0a153
#define INT8_MAX 127
Packit Service b0a153
#define INT16_MAX 32767
Packit Service b0a153
#define INT32_MAX 2147483647
Packit Service b0a153
#define INT64_MAX 9223372036854775807LL
Packit Service b0a153
Packit Service b0a153
#define UINT8_MAX 255
Packit Service b0a153
#define UINT16_MAX 65535
Packit Service b0a153
#define UINT32_MAX 0xffffffffU  /* 4294967295U */
Packit Service b0a153
#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
Packit Service b0a153
Packit Service b0a153
/* 7.18.2.2  Limits of minimum-width integer types */
Packit Service b0a153
#define INT_LEAST8_MIN INT8_MIN
Packit Service b0a153
#define INT_LEAST16_MIN INT16_MIN
Packit Service b0a153
#define INT_LEAST32_MIN INT32_MIN
Packit Service b0a153
#define INT_LEAST64_MIN INT64_MIN
Packit Service b0a153
Packit Service b0a153
#define INT_LEAST8_MAX INT8_MAX
Packit Service b0a153
#define INT_LEAST16_MAX INT16_MAX
Packit Service b0a153
#define INT_LEAST32_MAX INT32_MAX
Packit Service b0a153
#define INT_LEAST64_MAX INT64_MAX
Packit Service b0a153
Packit Service b0a153
#define UINT_LEAST8_MAX UINT8_MAX
Packit Service b0a153
#define UINT_LEAST16_MAX UINT16_MAX
Packit Service b0a153
#define UINT_LEAST32_MAX UINT32_MAX
Packit Service b0a153
#define UINT_LEAST64_MAX UINT64_MAX
Packit Service b0a153
Packit Service b0a153
/* 7.18.2.3  Limits of fastest minimum-width integer types */
Packit Service b0a153
#define INT_FAST8_MIN INT8_MIN
Packit Service b0a153
#define INT_FAST16_MIN INT16_MIN
Packit Service b0a153
#define INT_FAST32_MIN INT32_MIN
Packit Service b0a153
#define INT_FAST64_MIN INT64_MIN
Packit Service b0a153
Packit Service b0a153
#define INT_FAST8_MAX INT8_MAX
Packit Service b0a153
#define INT_FAST16_MAX INT16_MAX
Packit Service b0a153
#define INT_FAST32_MAX INT32_MAX
Packit Service b0a153
#define INT_FAST64_MAX INT64_MAX
Packit Service b0a153
Packit Service b0a153
#define UINT_FAST8_MAX UINT8_MAX
Packit Service b0a153
#define UINT_FAST16_MAX UINT16_MAX
Packit Service b0a153
#define UINT_FAST32_MAX UINT32_MAX
Packit Service b0a153
#define UINT_FAST64_MAX UINT64_MAX
Packit Service b0a153
Packit Service b0a153
/* 7.18.2.4  Limits of integer types capable of holding
Packit Service b0a153
    object pointers */
Packit Service b0a153
#ifdef _WIN64
Packit Service b0a153
#define INTPTR_MIN INT64_MIN
Packit Service b0a153
#define INTPTR_MAX INT64_MAX
Packit Service b0a153
#define UINTPTR_MAX UINT64_MAX
Packit Service b0a153
#else
Packit Service b0a153
#define INTPTR_MIN INT32_MIN
Packit Service b0a153
#define INTPTR_MAX INT32_MAX
Packit Service b0a153
#define UINTPTR_MAX UINT32_MAX
Packit Service b0a153
#endif
Packit Service b0a153
Packit Service b0a153
/* 7.18.2.5  Limits of greatest-width integer types */
Packit Service b0a153
#define INTMAX_MIN INT64_MIN
Packit Service b0a153
#define INTMAX_MAX INT64_MAX
Packit Service b0a153
#define UINTMAX_MAX UINT64_MAX
Packit Service b0a153
Packit Service b0a153
/* 7.18.3  Limits of other integer types */
Packit Service b0a153
#ifdef _WIN64
Packit Service b0a153
#define PTRDIFF_MIN INT64_MIN
Packit Service b0a153
#define PTRDIFF_MAX INT64_MAX
Packit Service b0a153
#else
Packit Service b0a153
#define PTRDIFF_MIN INT32_MIN
Packit Service b0a153
#define PTRDIFF_MAX INT32_MAX
Packit Service b0a153
#endif
Packit Service b0a153
Packit Service b0a153
#define SIG_ATOMIC_MIN INT32_MIN
Packit Service b0a153
#define SIG_ATOMIC_MAX INT32_MAX
Packit Service b0a153
Packit Service b0a153
#ifndef SIZE_MAX
Packit Service b0a153
#ifdef _WIN64
Packit Service b0a153
#define SIZE_MAX UINT64_MAX
Packit Service b0a153
#else
Packit Service b0a153
#define SIZE_MAX UINT32_MAX
Packit Service b0a153
#endif
Packit Service b0a153
#endif
Packit Service b0a153
Packit Service b0a153
#ifndef WCHAR_MIN  /* also in wchar.h */
Packit Service b0a153
#define WCHAR_MIN 0U
Packit Service b0a153
#define WCHAR_MAX 0xffffU
Packit Service b0a153
#endif
Packit Service b0a153
Packit Service b0a153
/*
Packit Service b0a153
 * wint_t is unsigned short for compatibility with MS runtime
Packit Service b0a153
 */
Packit Service b0a153
#define WINT_MIN 0U
Packit Service b0a153
#define WINT_MAX 0xffffU
Packit Service b0a153
Packit Service b0a153
Packit Service b0a153
/* 7.18.4  Macros for integer constants */
Packit Service b0a153
Packit Service b0a153
/* 7.18.4.1  Macros for minimum-width integer constants
Packit Service b0a153
Packit Service b0a153
    Accoding to Douglas Gwyn <gwyn@arl.mil>:
Packit Service b0a153
	"This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
Packit Service b0a153
	9899:1999 as initially published, the expansion was required
Packit Service b0a153
	to be an integer constant of precisely matching type, which
Packit Service b0a153
	is impossible to accomplish for the shorter types on most
Packit Service b0a153
	platforms, because C99 provides no standard way to designate
Packit Service b0a153
	an integer constant with width less than that of type int.
Packit Service b0a153
	TC1 changed this to require just an integer constant
Packit Service b0a153
	*expression* with *promoted* type."
Packit Service b0a153
Packit Service b0a153
	The trick used here is from Clive D W Feather.
Packit Service b0a153
*/
Packit Service b0a153
Packit Service b0a153
#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
Packit Service b0a153
#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
Packit Service b0a153
#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
Packit Service b0a153
/*  The 'trick' doesn't work in C89 for long long because, without
Packit Service b0a153
    suffix, (val) will be evaluated as int, not intmax_t */
Packit Service b0a153
#define INT64_C(val) val##i64
Packit Service b0a153
Packit Service b0a153
#define UINT8_C(val) (val)
Packit Service b0a153
#define UINT16_C(val) (val)
Packit Service b0a153
#define UINT32_C(val) (val##i32)
Packit Service b0a153
#define UINT64_C(val) val##ui64
Packit Service b0a153
Packit Service b0a153
/* 7.18.4.2  Macros for greatest-width integer constants */
Packit Service b0a153
#define INTMAX_C(val) val##i64
Packit Service b0a153
#define UINTMAX_C(val) val##ui64
Packit Service b0a153
Packit Service b0a153
#endif