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>
This commit is contained in:
parent
b664b44869
commit
de0aed0543
29
Xext/sync.c
29
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)
|
||||
|
|
|
@ -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(); \
|
||||
|
|
Loading…
Reference in New Issue