From 381a4d6efec42db823cbd5946514c275bca7d2d1 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 3 Feb 2010 06:49:27 +0000 Subject: Fix portability issue related with unaligned memory access --- tests/libtest/lib571.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'tests/libtest/lib571.c') diff --git a/tests/libtest/lib571.c b/tests/libtest/lib571.c index f69151467..a1cd032ab 100644 --- a/tests/libtest/lib571.c +++ b/tests/libtest/lib571.c @@ -33,6 +33,11 @@ #include "memdebug.h" +#define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1]))) + +#define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \ + ((int)((unsigned char)((p)[3])))) + #define RTP_DATA_SIZE 12 static const char *RTP_DATA = "$_1234\n\0asdf"; @@ -40,16 +45,18 @@ static int rtp_packet_count = 0; static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) { char *data = (char *)ptr; - int channel = (int)data[1]; - int message_size = (int)(size * nmemb - 4); - unsigned short coded_size = ntohs(*((unsigned short*)(&data[2]))); + int channel = RTP_PKT_CHANNEL(data); + int message_size = (int)(size * nmemb) - 4; + int coded_size = RTP_PKT_LENGTH(data); + size_t failure = (size * nmemb) ? 0 : 1; int i; (void)stream; printf("RTP: message size %d, channel %d\n", message_size, channel); - if((unsigned short) message_size != coded_size) { - printf("RTP embedded size (%hu) does not match the write size (%d).\n", - coded_size, message_size); + if(message_size != coded_size) { + printf("RTP embedded size (%d) does not match the write size (%d).\n", + coded_size, message_size); + return failure; } data += 4; @@ -57,11 +64,13 @@ static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) { if(message_size - i > RTP_DATA_SIZE) { if(memcmp(RTP_DATA, data + i, RTP_DATA_SIZE) != 0) { printf("RTP PAYLOAD CORRUPTED [%s]\n", data + i); + return failure; } } else { if (memcmp(RTP_DATA, data + i, message_size - i) != 0) { printf("RTP PAYLOAD END CORRUPTED (%d), [%s]\n", message_size - i, data + i); + return failure; } } } -- cgit v1.2.3