From b4bb90ec5b82b156e9a3b445bb89388c5346e258 Mon Sep 17 00:00:00 2001 From: updatede Date: Mon, 25 Apr 2022 18:16:50 +0800 Subject: [PATCH] Fix udp acceleration unusable on big endian system On big endian system, while store 32 bits and 16bits number in memory of UINT64 variable "tmp", first 4 bytes of it always be zero makes "cookie" and "size" always be zero, lead to udpaccel unusable. --- src/Cedar/UdpAccel.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Cedar/UdpAccel.c b/src/Cedar/UdpAccel.c index e19de467..1fcf3cc8 100644 --- a/src/Cedar/UdpAccel.c +++ b/src/Cedar/UdpAccel.c @@ -338,6 +338,8 @@ void UdpAccelSend(UDP_ACCEL *a, UCHAR *data, UINT data_size, UCHAR flag, UINT ma UINT size = 0; UINT64 tmp; UINT ret; + UINT u32; + USHORT u16; // Validate arguments if (a == NULL || (data_size != 0 && data == NULL)) { @@ -367,8 +369,8 @@ void UdpAccelSend(UDP_ACCEL *a, UCHAR *data, UINT data_size, UCHAR flag, UINT ma } // Cookie - tmp = Endian32(a->YourCookie); - Copy(buf, &tmp, sizeof(UINT)); + u32 = Endian32(a->YourCookie); + Copy(buf, &u32, sizeof(UINT)); buf += sizeof(UINT); size += sizeof(UINT); @@ -385,8 +387,8 @@ void UdpAccelSend(UDP_ACCEL *a, UCHAR *data, UINT data_size, UCHAR flag, UINT ma size += sizeof(UINT64); // Size - tmp = Endian16(data_size); - Copy(buf, &tmp, sizeof(USHORT)); + u16 = Endian16(data_size); + Copy(buf, &u16, sizeof(USHORT)); buf += sizeof(USHORT); size += sizeof(USHORT);