diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-06-21 12:29:34 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-06-21 13:14:14 -0400 |
commit | 49d7c9ce53daa13daae59eedceb07d28e06e4395 (patch) | |
tree | eac0dbdc746340a5d4c5d4619800006a3b779af5 /src/lib/cc | |
parent | 68bbe915d909ba56a50a6d595eb6271967126a0e (diff) | |
download | tor-49d7c9ce53daa13daae59eedceb07d28e06e4395.tar.gz tor-49d7c9ce53daa13daae59eedceb07d28e06e4395.zip |
Move more compiler-compatibility stuff into compat_compiler.h
Diffstat (limited to 'src/lib/cc')
-rw-r--r-- | src/lib/cc/compat_compiler.h | 48 |
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) */ |