mirror of
https://git.tukaani.org/xz.git
synced 2024-04-04 12:36:23 +02:00
Add support for using liblzma headers in MSVC, which has no
stdint.h or inttypes.h.
This commit is contained in:
parent
b2172cf823
commit
4ab7601091
1 changed files with 46 additions and 24 deletions
|
@ -73,26 +73,40 @@
|
||||||
*/
|
*/
|
||||||
# if !defined(UINT32_C) || !defined(UINT64_C) \
|
# if !defined(UINT32_C) || !defined(UINT64_C) \
|
||||||
|| !defined(UINT32_MAX) || !defined(UINT64_MAX)
|
|| !defined(UINT32_MAX) || !defined(UINT64_MAX)
|
||||||
# ifdef __cplusplus
|
/*
|
||||||
/*
|
* MSVC has no C99 support, and thus it cannot be used to
|
||||||
* C99 sections 7.18.2 and 7.18.4 specify that in C++
|
* compile liblzma. The liblzma API has to still be usable
|
||||||
* implementations define the limit and constant
|
* from MSVC, so we need to define the required standard
|
||||||
* macros only if specifically requested. Note that
|
* integer types here.
|
||||||
* if you want the format macros (PRIu64 etc.) too,
|
*/
|
||||||
* you need to define __STDC_FORMAT_MACROS before
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
* including lzma.h, since re-including inttypes.h
|
typedef unsigned __int8 uint8_t;
|
||||||
* with __STDC_FORMAT_MACROS defined doesn't
|
typedef unsigned __int32 uint32_t;
|
||||||
* necessarily work.
|
typedef unsigned __int64 uint64_t;
|
||||||
*/
|
# else
|
||||||
# ifndef __STDC_LIMIT_MACROS
|
/* Use the standard inttypes.h. */
|
||||||
# define __STDC_LIMIT_MACROS 1
|
# ifdef __cplusplus
|
||||||
|
/*
|
||||||
|
* C99 sections 7.18.2 and 7.18.4 specify that
|
||||||
|
* in C++ implementations define the limit
|
||||||
|
* and constant macros only if specifically
|
||||||
|
* requested. Note that if you want the
|
||||||
|
* format macros (PRIu64 etc.) too, you need
|
||||||
|
* to define __STDC_FORMAT_MACROS before
|
||||||
|
* including lzma.h, since re-including
|
||||||
|
* inttypes.h with __STDC_FORMAT_MACROS
|
||||||
|
* defined doesn't necessarily work.
|
||||||
|
*/
|
||||||
|
# ifndef __STDC_LIMIT_MACROS
|
||||||
|
# define __STDC_LIMIT_MACROS 1
|
||||||
|
# endif
|
||||||
|
# ifndef __STDC_CONSTANT_MACROS
|
||||||
|
# define __STDC_CONSTANT_MACROS 1
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# ifndef __STDC_CONSTANT_MACROS
|
|
||||||
# define __STDC_CONSTANT_MACROS 1
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# include <inttypes.h>
|
# include <inttypes.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some old systems have only the typedefs in inttypes.h, and
|
* Some old systems have only the typedefs in inttypes.h, and
|
||||||
|
@ -103,16 +117,24 @@
|
||||||
* before including lzma.h.
|
* before including lzma.h.
|
||||||
*/
|
*/
|
||||||
# ifndef UINT32_C
|
# ifndef UINT32_C
|
||||||
# define UINT32_C(n) n ## U
|
# if defined(_WIN32) && defined(_MSC_VER)
|
||||||
|
# define UINT32_C(n) n ## UI32
|
||||||
|
# else
|
||||||
|
# define UINT32_C(n) n ## U
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifndef UINT64_C
|
# ifndef UINT64_C
|
||||||
/* Get ULONG_MAX. */
|
# if defined(_WIN32) && defined(_MSC_VER)
|
||||||
# include <limits.h>
|
# define UINT64_C(n) n ## UI64
|
||||||
# if ULONG_MAX == 4294967295UL
|
|
||||||
# define UINT64_C(n) n ## ULL
|
|
||||||
# else
|
# else
|
||||||
# define UINT64_C(n) n ## UL
|
/* Get ULONG_MAX. */
|
||||||
|
# include <limits.h>
|
||||||
|
# if ULONG_MAX == 4294967295UL
|
||||||
|
# define UINT64_C(n) n ## ULL
|
||||||
|
# else
|
||||||
|
# define UINT64_C(n) n ## UL
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue