diff options
author | Enrico Weigelt, metux IT consult <info@metux.net> | 2025-02-17 18:54:04 +0100 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2025-02-23 18:08:45 +0000 |
commit | de0aed054395513498fb8b0acee778f48ff18242 (patch) | |
tree | d56ecc56bdd0e5b7aa0acc69f425bf2d9613c2ac | |
parent | b664b448695601d28da1f3d74fe327b3901ab28c (diff) |
misc.h: move out checked_int64_(add|subtract)
These inline functions are used only in exactly one place,
so no need to keep them in a public header.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1808>
-rw-r--r-- | Xext/sync.c | 29 | ||||
-rw-r--r-- | include/misc.h | 29 |
2 files changed, 29 insertions, 29 deletions
diff --git a/Xext/sync.c b/Xext/sync.c index b0eae0488..ee0010e65 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -312,6 +312,35 @@ SyncCheckTriggerFence(SyncTrigger * pTrigger, int64_t unused) return (pFence == NULL || pFence->funcs.CheckTriggered(pFence)); } +static inline Bool +checked_int64_add(int64_t *out, int64_t a, int64_t b) +{ + /* Do the potentially overflowing math as uint64_t, as signed + * integers in C are undefined on overflow (and the compiler may + * optimize out our overflow check below, otherwise) + */ + int64_t result = (uint64_t)a + (uint64_t)b; + /* signed addition overflows if operands have the same sign, and + * the sign of the result doesn't match the sign of the inputs. + */ + Bool overflow = (a < 0) == (b < 0) && (a < 0) != (result < 0); + + *out = result; + + return overflow; +} + +static inline Bool +checked_int64_subtract(int64_t *out, int64_t a, int64_t b) +{ + int64_t result = (uint64_t)a - (uint64_t)b; + Bool overflow = (a < 0) != (b < 0) && (a < 0) != (result < 0); + + *out = result; + + return overflow; +} + static int SyncInitTrigger(ClientPtr client, SyncTrigger * pTrigger, XID syncObject, RESTYPE resType, Mask changes) diff --git a/include/misc.h b/include/misc.h index a6b54389e..36554fa3c 100644 --- a/include/misc.h +++ b/include/misc.h @@ -285,35 +285,6 @@ bswap_32(uint32_t x) ((x & 0x000000FF) << 24)); } -static inline Bool -checked_int64_add(int64_t *out, int64_t a, int64_t b) -{ - /* Do the potentially overflowing math as uint64_t, as signed - * integers in C are undefined on overflow (and the compiler may - * optimize out our overflow check below, otherwise) - */ - int64_t result = (uint64_t)a + (uint64_t)b; - /* signed addition overflows if operands have the same sign, and - * the sign of the result doesn't match the sign of the inputs. - */ - Bool overflow = (a < 0) == (b < 0) && (a < 0) != (result < 0); - - *out = result; - - return overflow; -} - -static inline Bool -checked_int64_subtract(int64_t *out, int64_t a, int64_t b) -{ - int64_t result = (uint64_t)a - (uint64_t)b; - Bool overflow = (a < 0) != (b < 0) && (a < 0) != (result < 0); - - *out = result; - - return overflow; -} - #define swapl(x) do { \ if (sizeof(*(x)) != 4) \ wrong_size(); \ |