From 5b0c5344b7131f0812bcbf070194adaa2175d150 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sat, 10 Oct 2020 02:51:32 +0300 Subject: [PATCH] dix: Extract CopySprite() utility --- dix/inpututils.c | 26 ++++++++++++++++++++++++++ dix/touch.c | 17 +---------------- include/inpututils.h | 3 +++ 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/dix/inpututils.c b/dix/inpututils.c index a36d88503..e7e1ce815 100644 --- a/dix/inpututils.c +++ b/dix/inpututils.c @@ -1220,3 +1220,29 @@ xi2mask_get_one_mask(const XI2Mask *mask, int deviceid) return mask->masks[deviceid]; } + +/** + * Copies a sprite data from src to dst sprites. + * + * Returns FALSE on error. + */ +Bool +CopySprite(SpritePtr src, SpritePtr dst) +{ + WindowPtr *trace; + if (src->spriteTraceGood > dst->spriteTraceSize) { + trace = reallocarray(dst->spriteTrace, + src->spriteTraceSize, sizeof(*trace)); + if (!trace) { + dst->spriteTraceGood = 0; + return FALSE; + } + dst->spriteTrace = trace; + dst->spriteTraceSize = src->spriteTraceGood; + } + memcpy(dst->spriteTrace, src->spriteTrace, + src->spriteTraceGood * sizeof(*trace)); + dst->spriteTraceGood = src->spriteTraceGood; + return TRUE; +} + diff --git a/dix/touch.c b/dix/touch.c index 337674ddb..193931294 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -500,7 +500,6 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite) { int i; TouchClassPtr t = dev->touch; - WindowPtr *trace; SpritePtr srcsprite; /* All touches should have the same sprite trace, so find and reuse an @@ -516,21 +515,7 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite) else return FALSE; - if (srcsprite->spriteTraceGood > sprite->spriteTraceSize) { - trace = reallocarray(sprite->spriteTrace, - srcsprite->spriteTraceSize, sizeof(*trace)); - if (!trace) { - sprite->spriteTraceGood = 0; - return FALSE; - } - sprite->spriteTrace = trace; - sprite->spriteTraceSize = srcsprite->spriteTraceGood; - } - memcpy(sprite->spriteTrace, srcsprite->spriteTrace, - srcsprite->spriteTraceGood * sizeof(*trace)); - sprite->spriteTraceGood = srcsprite->spriteTraceGood; - - return TRUE; + return CopySprite(srcsprite, sprite); } /** diff --git a/include/inpututils.h b/include/inpututils.h index 48c95c4c1..2dfe122c9 100644 --- a/include/inpututils.h +++ b/include/inpututils.h @@ -70,4 +70,7 @@ size_t xi2mask_mask_size(const XI2Mask *mask); void xi2mask_set_one_mask(XI2Mask *xi2mask, int deviceid, const unsigned char *mask, size_t mask_size); const unsigned char *xi2mask_get_one_mask(const XI2Mask *xi2mask, int deviceid); + +Bool CopySprite(SpritePtr src, SpritePtr dst); + #endif