Add support for using liblzma headers in MSVC, which has no

stdint.h or inttypes.h.
This commit is contained in:
Lasse Collin 2009-01-31 09:55:05 +02:00
parent b2172cf823
commit 4ab7601091
1 changed files with 46 additions and 24 deletions

View File

@ -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