From 1880dfc53f0ec7a809e3e3f36dcec12971081912 Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Sat, 5 Sep 2015 22:43:09 -0700 Subject: [PATCH] Rework the la_ssize_t and la_int64_t definitions to avoid redefining la_int64_t if both archive.h and archive_entry.h are included. (This avoids a warning from clang that redefining a typedef is a C11 feature.) --- libarchive/archive.h | 49 +++++++++++++++++++++++--------------- libarchive/archive_entry.h | 21 ++++++++-------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/libarchive/archive.h b/libarchive/archive.h index 8b7c32032..d3ff9b0d0 100644 --- a/libarchive/archive.h +++ b/libarchive/archive.h @@ -45,33 +45,44 @@ # include #endif -#if ARCHIVE_VERSION_NUMBER < 4000000 -// also defined in archive_entry.h, don't redefine -#if !defined(__LA_INT64_T) +/* Get appropriate definitions of 64-bit integer */ +#if !defined(__LA_INT64_T_DEFINED) +/* Older code relied on the __LA_INT64_T macro; after 4.0 we'll switch to the typedef exclusively. */ +# if ARCHIVE_VERSION_NUMBER < 4000000 #define __LA_INT64_T la_int64_t -#endif -#define __LA_SSIZE_T la_ssize_t -#endif - -/* Get appropriate definitions of standard POSIX-style types. */ -/* These should match the types used in 'struct stat' */ -#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) +# endif +#define __LA_INT64_T_DEFINED +# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) typedef __int64 la_int64_t; -# if defined(_SSIZE_T_DEFINED) || defined(_SSIZE_T_) -typedef ssize_t la_ssize_t; -# elif defined(_WIN64) -typedef __int64 la_ssize_t; # else -typedef long la_ssize_t; -# endif -#else # include /* ssize_t */ -# if defined(_SCO_DS) +# if defined(_SCO_DS) typedef long long la_int64_t; -# else +# else typedef int64_t la_int64_t; +# endif # endif +#endif + +/* The la_ssize_t should match the type used in 'struct stat' */ +#if !defined(__LA_SSIZE_T_DEFINED) +/* Older code relied on the __LA_SSIZE_T macro; after 4.0 we'll switch to the typedef exclusively. */ +# if ARCHIVE_VERSION_NUMBER < 4000000 +#define __LA_SSIZE_T la_ssize_t +# endif +#define __LA_SSIZE_T_DEFINED +# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) +# if defined(_SSIZE_T_DEFINED) || defined(_SSIZE_T_) typedef ssize_t la_ssize_t; +# elif defined(_WIN64) +typedef __int64 la_ssize_t; +# else +typedef long la_ssize_t; +# endif +# else +# include /* ssize_t */ +typedef ssize_t la_ssize_t; +# endif #endif /* diff --git a/libarchive/archive_entry.h b/libarchive/archive_entry.h index 21a0f30fd..996d60f4b 100644 --- a/libarchive/archive_entry.h +++ b/libarchive/archive_entry.h @@ -47,22 +47,21 @@ #include #endif -#if ARCHIVE_VERSION_NUMBER < 4000000 -// also defined in archive.h, don't redefine -#if !defined(__LA_INT64_T) -#define __LA_INT64_T la_int64_t -#endif -#endif - /* Get a suitable 64-bit integer type. */ -#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) +#if !defined(__LA_INT64_T_DEFINED) +# if ARCHIVE_VERSION_NUMBER < 4000000 +#define __LA_INT64_T la_int64_t +# endif +#define __LA_INT64_T_DEFINED +# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) typedef __int64 la_int64_t; -#else +# else #include -# if defined(_SCO_DS) +# if defined(_SCO_DS) typedef long long la_int64_t; -# else +# else typedef int64_t la_int64_t; +# endif # endif #endif -- 2.47.2