patch 8.2.0296: mixing up "long long" and __int64 may cause problems
Problem: Mixing up "long long" and __int64 may cause problems. (John
Marriott)
Solution: Pass varnumber_T to vim_snprintf(). Add v:numbersize.
diff --git a/src/structs.h b/src/structs.h
index 823dfda..4b70641 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1248,30 +1248,40 @@
// 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_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
+#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
#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;