diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-02-22 14:27:04 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-02-22 14:27:04 +0100 |
commit | f9706e9df0e37d214fb08eda30ba29627e97a607 (patch) | |
tree | 9d90ad2977ed759664a2c2d0776901f34a8e0350 /src/structs.h | |
parent | c036e87bd7001238ab7cc5d9e30e59bbf989a5fd (diff) |
patch 8.2.0296: mixing up "long long" and __int64 may cause problemsv8.2.0296
Problem: Mixing up "long long" and __int64 may cause problems. (John
Marriott)
Solution: Pass varnumber_T to vim_snprintf(). Add v:numbersize.
Diffstat (limited to 'src/structs.h')
-rw-r--r-- | src/structs.h | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/src/structs.h b/src/structs.h index 823dfda3ca..4b70641711 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1248,30 +1248,40 @@ typedef long_u hash_T; // Type for hi_hash // Use 64-bit Number. #ifdef MSWIN # ifdef PROTO -typedef long varnumber_T; -typedef unsigned long uvarnumber_T; -# define VARNUM_MIN LONG_MIN -# define VARNUM_MAX LONG_MAX -# define UVARNUM_MAX ULONG_MAX + // workaround for cproto that doesn't recognize __int64 + typedef long varnumber_T; + typedef unsigned long uvarnumber_T; +# define VARNUM_MIN LONG_MIN +# define VARNUM_MAX LONG_MAX +# define UVARNUM_MAX ULONG_MAX # else -typedef __int64 varnumber_T; -typedef unsigned __int64 uvarnumber_T; -# define VARNUM_MIN _I64_MIN -# define VARNUM_MAX _I64_MAX -# define UVARNUM_MAX _UI64_MAX + typedef __int64 varnumber_T; + typedef unsigned __int64 uvarnumber_T; +# define VARNUM_MIN _I64_MIN +# define VARNUM_MAX _I64_MAX +# define UVARNUM_MAX _UI64_MAX +# endif +#elif defined(HAVE_NO_LONG_LONG) +# if defined(HAVE_STDINT_H) + typedef int64_t varnumber_T; + typedef uint64_t uvarnumber_T; +# define VARNUM_MIN INT64_MIN +# define VARNUM_MAX INT64_MAX +# define UVARNUM_MAX UINT64_MAX +# else + // this may cause trouble for code that depends on 64 bit ints + typedef long varnumber_T; + typedef unsigned long uvarnumber_T; +# define VARNUM_MIN LONG_MIN +# define VARNUM_MAX LONG_MAX +# define UVARNUM_MAX ULONG_MAX # endif -#elif defined(HAVE_STDINT_H) -typedef int64_t varnumber_T; -typedef uint64_t uvarnumber_T; -# define VARNUM_MIN INT64_MIN -# define VARNUM_MAX INT64_MAX -# define UVARNUM_MAX UINT64_MAX #else -typedef long varnumber_T; -typedef unsigned long uvarnumber_T; -# define VARNUM_MIN LONG_MIN -# define VARNUM_MAX LONG_MAX -# define UVARNUM_MAX ULONG_MAX + typedef long long varnumber_T; + typedef unsigned long long uvarnumber_T; +# define VARNUM_MIN LLONG_MIN +# define VARNUM_MAX LLONG_MAX +# define UVARNUM_MAX ULLONG_MAX #endif typedef double float_T; |