diff options
author | Benny Prijono <bennylp@teluu.com> | 2011-09-21 04:27:58 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2011-09-21 04:27:58 +0000 |
commit | 48634cf50fd2cfefd7ddec0c661588af74fa229f (patch) | |
tree | ee66502d1ba87146debf456391d3e9ada06b8869 /pjlib/src | |
parent | 5759f019b6e1fde8201506d4e57248e15ca3ed31 (diff) |
Added endianness test in pjlib-test (Misc, re #1252)
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/1.x@3759 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src')
-rw-r--r-- | pjlib/src/pjlib-test/os.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/pjlib/src/pjlib-test/os.c b/pjlib/src/pjlib-test/os.c index ad630245..d5b1879c 100644 --- a/pjlib/src/pjlib-test/os.c +++ b/pjlib/src/pjlib-test/os.c @@ -22,11 +22,81 @@ #include <pj/os.h> #if INCLUDE_OS_TEST +static int endianness_test32(void) +{ + union t + { + pj_uint32_t u32; + pj_uint16_t u16[2]; + pj_uint8_t u8[4]; + } t; + + PJ_LOG(3,("", " Testing endianness..")); + + t.u32 = 0x11223344; + +#if defined(PJ_IS_LITTLE_ENDIAN) && PJ_IS_LITTLE_ENDIAN + PJ_LOG(3,("", " Library is set to little endian")); + +# if defined(PJ_IS_BIG_ENDIAN) && PJ_IS_BIG_ENDIAN +# error Error: Both PJ_IS_LITTLE_ENDIAN and PJ_IS_BIG_ENDIAN are set! +# endif + + if ((t.u16[0] & 0xFFFF) != 0x3344 || + (t.u16[1] & 0xFFFF) != 0x1122) + { + PJ_LOG(3,("", " Error: wrong 16bit values 0x%x and 0x%x", + (t.u16[0] & 0xFFFF), (t.u16[1] & 0xFFFF))); + return 10; + } + + if ((t.u8[0] & 0xFF) != 0x44 || + (t.u8[1] & 0xFF) != 0x33 || + (t.u8[2] & 0xFF) != 0x22 || + (t.u8[3] & 0xFF) != 0x11) + { + PJ_LOG(3,("", " Error: wrong 8bit values")); + return 12; + } + +#elif defined(PJ_IS_BIG_ENDIAN) && PJ_IS_BIG_ENDIAN + PJ_LOG(3,("", " Library is set to big endian")); + + if ((t.u16[0] & 0xFFFF) != 0x1122 || + (t.u16[1] & 0xFFFF) != 0x3344) + { + PJ_LOG(3,("", " Error: wrong 16bit values 0x%x and 0x%x", + (t.u16[0] & 0xFFFF), (t.u16[1] & 0xFFFF))); + return 20; + } + + if ((t.u8[0] & 0xFF) != 0x11 || + (t.u8[1] & 0xFF) != 0x22 || + (t.u8[2] & 0xFF) != 0x33 || + (t.u8[3] & 0xFF) != 0x44) + { + PJ_LOG(3,("", " Error: wrong 8bit values")); + return 22; + } + +# if defined(PJ_IS_LITTLE_ENDIAN) && PJ_IS_LITTLE_ENDIAN +# error Error: Both PJ_IS_LITTLE_ENDIAN and PJ_IS_BIG_ENDIAN are set! +# endif + + +#else +# error Error: Endianness is not set properly! +#endif + + return 0; +} + int os_test(void) { const pj_sys_info *si; int rc = 0; + PJ_LOG(3,("", " Sys info:")); si = pj_get_sys_info(); PJ_LOG(3,("", " machine: %s", si->machine.ptr)); PJ_LOG(3,("", " os_name: %s", si->os_name.ptr)); @@ -35,6 +105,8 @@ int os_test(void) PJ_LOG(3,("", " sdk_ver: 0x%x", si->sdk_ver)); PJ_LOG(3,("", " info: %s", si->info.ptr)); + rc = endianness_test32(); + return rc; } |