From 4ab760109106dc04f39dd81c97d50f528d1b51c1 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Sat, 31 Jan 2009 09:55:05 +0200 Subject: [PATCH] Add support for using liblzma headers in MSVC, which has no stdint.h or inttypes.h. --- src/liblzma/api/lzma.h | 70 +++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/src/liblzma/api/lzma.h b/src/liblzma/api/lzma.h index 632e824..f5222a5 100644 --- a/src/liblzma/api/lzma.h +++ b/src/liblzma/api/lzma.h @@ -73,26 +73,40 @@ */ # if !defined(UINT32_C) || !defined(UINT64_C) \ || !defined(UINT32_MAX) || !defined(UINT64_MAX) -# 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 + /* + * MSVC has no C99 support, and thus it cannot be used to + * compile liblzma. The liblzma API has to still be usable + * from MSVC, so we need to define the required standard + * integer types here. + */ + #if defined(_WIN32) && defined(_MSC_VER) + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; +# else + /* Use the standard inttypes.h. */ +# 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 -# ifndef __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS 1 -# endif -# endif -# include +# include +# endif /* * Some old systems have only the typedefs in inttypes.h, and @@ -103,16 +117,24 @@ * before including lzma.h. */ # 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 # ifndef UINT64_C - /* Get ULONG_MAX. */ -# include -# if ULONG_MAX == 4294967295UL -# define UINT64_C(n) n ## ULL +# if defined(_WIN32) && defined(_MSC_VER) +# define UINT64_C(n) n ## UI64 # else -# define UINT64_C(n) n ## UL + /* Get ULONG_MAX. */ +# include +# if ULONG_MAX == 4294967295UL +# define UINT64_C(n) n ## ULL +# else +# define UINT64_C(n) n ## UL +# endif # endif # endif