From bcd9614380f726cb689f3bb618426e9554c096ac Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Wed, 16 Oct 2024 17:40:13 +0100 Subject: [PATCH] utils: Add a fallback version of xadd, xmul for ancient gcc bubblewrap is used in some surprisingly old environments, including version 1 of the Steam Runtime, which has gcc 4.6 or 4.8 as its default compiler (depending on exactly how you define "default"). These very old versions don't support the builtin used here. Signed-off-by: Simon McVittie --- utils.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/utils.c b/utils.c index 3f008df3..985173e7 100644 --- a/utils.c +++ b/utils.c @@ -959,10 +959,17 @@ mount_strerror (int errsv) static size_t xadd (size_t a, size_t b) { +#if defined(__GNUC__) && __GNUC__ >= 5 size_t result; if (__builtin_add_overflow (a, b, &result)) die_oom (); return result; +#else + if (a > SIZE_MAX - b) + die_oom (); + + return a + b; +#endif } /* @@ -972,10 +979,17 @@ xadd (size_t a, size_t b) static size_t xmul (size_t a, size_t b) { +#if defined(__GNUC__) && __GNUC__ >= 5 size_t result; if (__builtin_mul_overflow (a, b, &result)) die_oom (); return result; +#else + if (b != 0 && a > SIZE_MAX / b) + die_oom (); + + return a * b; +#endif } void