summaryrefslogtreecommitdiffstats
path: root/src/structs.h
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-22 14:27:04 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-22 14:27:04 +0100
commitf9706e9df0e37d214fb08eda30ba29627e97a607 (patch)
tree9d90ad2977ed759664a2c2d0776901f34a8e0350 /src/structs.h
parentc036e87bd7001238ab7cc5d9e30e59bbf989a5fd (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.h52
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;