From 181edb851ee929ee4628fc8c053eb0c89d869bd0 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Thu, 11 Aug 2016 15:46:06 -0400 Subject: [PATCH] util.h: add int_add for 32-bit platforms --- src/util.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/util.h b/src/util.h index 80f5fab..a519ac2 100644 --- a/src/util.h +++ b/src/util.h @@ -38,12 +38,23 @@ */ #if defined(__GNUC__) && defined(__GNUC_MINOR__) #if __GNUC__ >= 5 && __GNUC_MINOR__ >= 1 +#define int_add(a, b, c) __builtin_add_overflow(a, b, c) #define long_add(a, b, c) __builtin_add_overflow(a, b, c) #define long_mult(a, b, c) __builtin_mul_overflow(a, b, c) #define ulong_add(a, b, c) __builtin_add_overflow(a, b, c) #define ulong_mult(a, b, c) __builtin_mul_overflow(a, b, c) #endif #endif +#ifndef int_add +#define int_add(a, b, c) ({ \ + const int _limit = INT_MAX; \ + int _ret; \ + _ret = _limit - (a) > (b); \ + if (!_ret) \ + *(c) = ((a) + (b)); \ + _ret; \ + }) +#endif #ifndef long_add #define long_add(a, b, c) ({ \ const long _limit = LONG_MAX; \ @@ -92,6 +103,7 @@ #endif #define add(a, b, c) _Generic((c), \ + int *: int_add(a,b,c), \ long *: long_add(a,b,c), \ unsigned long *: ulong_add(a,b,c)) -- 2.11.0