aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2009-01-31 09:55:05 +0200
committerLasse Collin <lasse.collin@tukaani.org>2009-01-31 09:55:05 +0200
commit4ab760109106dc04f39dd81c97d50f528d1b51c1 (patch)
tree6e56d9ce8683fb80a190833e92de6468c0794c0c /src
parentFix # -> ## in a macro in lzma.h. (diff)
downloadxz-4ab760109106dc04f39dd81c97d50f528d1b51c1.tar.xz
Add support for using liblzma headers in MSVC, which has no
stdint.h or inttypes.h.
Diffstat (limited to 'src')
-rw-r--r--src/liblzma/api/lzma.h70
1 files changed, 46 insertions, 24 deletions
diff --git a/src/liblzma/api/lzma.h b/src/liblzma/api/lzma.h
index 632e824a..f5222a53 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
-# endif
-# ifndef __STDC_CONSTANT_MACROS
-# define __STDC_CONSTANT_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
-# endif
-# include <inttypes.h>
+# include <inttypes.h>
+# 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 <limits.h>
-# 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 <limits.h>
+# if ULONG_MAX == 4294967295UL
+# define UINT64_C(n) n ## ULL
+# else
+# define UINT64_C(n) n ## UL
+# endif
# endif
# endif