aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/cc/compat_compiler.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/lib/cc/compat_compiler.h b/src/lib/cc/compat_compiler.h
index a9a3266165..31e84bcc5b 100644
--- a/src/lib/cc/compat_compiler.h
+++ b/src/lib/cc/compat_compiler.h
@@ -194,4 +194,52 @@
#define OP_EQ ==
#define OP_NE !=
+#ifdef _MSC_VER
+/** Casts the uint64_t value in <b>a</b> to the right type for an argument
+ * to printf. */
+#define U64_PRINTF_ARG(a) (a)
+/** Casts the uint64_t* value in <b>a</b> to the right type for an argument
+ * to scanf. */
+#define U64_SCANF_ARG(a) (a)
+/** Expands to a literal uint64_t-typed constant for the value <b>n</b>. */
+#define U64_LITERAL(n) (n ## ui64)
+#define I64_PRINTF_ARG(a) (a)
+#define I64_SCANF_ARG(a) (a)
+#define I64_LITERAL(n) (n ## i64)
+#else /* !(defined(_MSC_VER)) */
+#define U64_PRINTF_ARG(a) ((long long unsigned int)(a))
+#define U64_SCANF_ARG(a) ((long long unsigned int*)(a))
+#define U64_LITERAL(n) (n ## llu)
+#define I64_PRINTF_ARG(a) ((long long signed int)(a))
+#define I64_SCANF_ARG(a) ((long long signed int*)(a))
+#define I64_LITERAL(n) (n ## ll)
+#endif /* defined(_MSC_VER) */
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#define MINGW_ANY
+#endif
+
+#if defined(_MSC_VER) || defined(MINGW_ANY)
+/** The formatting string used to put a uint64_t value in a printf() or
+ * scanf() function. See also U64_PRINTF_ARG and U64_SCANF_ARG. */
+#define U64_FORMAT "%I64u"
+#define I64_FORMAT "%I64d"
+#else /* !(defined(_MSC_VER) || defined(MINGW_ANY)) */
+#define U64_FORMAT "%llu"
+#define I64_FORMAT "%lld"
+#endif /* defined(_MSC_VER) || defined(MINGW_ANY) */
+
+#if (SIZEOF_INTPTR_T == SIZEOF_INT)
+#define INTPTR_T_FORMAT "%d"
+#define INTPTR_PRINTF_ARG(x) ((int)(x))
+#elif (SIZEOF_INTPTR_T == SIZEOF_LONG)
+#define INTPTR_T_FORMAT "%ld"
+#define INTPTR_PRINTF_ARG(x) ((long)(x))
+#elif (SIZEOF_INTPTR_T == 8)
+#define INTPTR_T_FORMAT I64_FORMAT
+#define INTPTR_PRINTF_ARG(x) I64_PRINTF_ARG(x)
+#else
+#error Unknown: SIZEOF_INTPTR_T
+#endif /* (SIZEOF_INTPTR_T == SIZEOF_INT) || ... */
+
#endif /* !defined(TOR_COMPAT_H) */