engine: operate on a local copy of dspriteframe_t to avoid unaligned access on ARMv7

This commit is contained in:
Alibek Omarov
2026-05-07 11:56:08 +05:00
parent e6a44b70e0
commit c2df265de7
2 changed files with 10 additions and 10 deletions

View File

@@ -51,20 +51,23 @@ le_struct_end();
static byte *Mod_SwapSpriteFrame( byte *p, byte *end, int bytes )
{
dspriteframe_t *frame;
dspriteframe_t frame;
if( p + sizeof( *frame ) > end )
if( p + sizeof( frame ) > end )
return NULL;
frame = (dspriteframe_t *)p;
le_struct_swap( dspriteframe_swap, frame );
p += sizeof( *frame );
memcpy( &frame, p, sizeof( frame ));
le_struct_swap( dspriteframe_swap, &frame );
#if XASH_BIG_ENDIAN
memcpy( p, &frame, sizeof( frame ));
#endif
p += sizeof( frame );
// skip pixel data
if( p + frame->width * frame->height * bytes > end )
if( p + frame.width * frame.height * bytes > end )
return NULL;
p += frame->width * frame->height * bytes;
p += frame.width * frame.height * bytes;
return p;
}