summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnrico Weigelt, metux IT consult <info@metux.net>2025-02-17 18:54:04 +0100
committerMarge Bot <emma+marge@anholt.net>2025-02-23 18:08:45 +0000
commitde0aed054395513498fb8b0acee778f48ff18242 (patch)
treed56ecc56bdd0e5b7aa0acc69f425bf2d9613c2ac
parentb664b448695601d28da1f3d74fe327b3901ab28c (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.c29
-rw-r--r--include/misc.h29
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(); \