static int write_u32(FILE *f, uint32_t v) { v = sys_htoll(v); if (1 != fwrite(&v, sizeof(v), 1, f)) return ferror(f); return 0; }
int test_sys_endian(void) { uint16_t s_le, s_ho; uint8_t *s = (uint8_t *)&s_le; uint32_t l_le, l_ho; uint8_t *l = (uint8_t *)&l_le; uint64_t ll0, ll1 = 0x0102030405060708ULL; /* Little endian: LSB first - 0x1234 * * 0x0000: 0x34 * 0x0001: 0x12 */ s[0] = 0x34; s[1] = 0x12; s_ho = sys_ltohs(s_le); if (0x1234 != s_ho) { DEBUG_WARNING("endian short: 0x%04x\n", s_ho); return EINVAL; } if (s_le != sys_htols(s_ho)) { DEBUG_WARNING("sys_htols failed: 0x%04x\n", sys_htols(s_ho)); return EINVAL; } /* 0x12345678 * * 0x0000: 0x78 * 0x0001: 0x56 * 0x0002: 0x34 * 0x0003: 0x12 */ l[0] = 0x78; l[1] = 0x56; l[2] = 0x34; l[3] = 0x12; l_ho = sys_ltohl(l_le); if (0x12345678 != l_ho) { DEBUG_WARNING("endian long: 0x%08x\n", l_ho); return EINVAL; } if (l_le != sys_htoll(l_ho)) { DEBUG_WARNING("sys_htoll failed: 0x%08x\n", sys_htoll(l_ho)); return EINVAL; } /* Test 64-bit */ ll0 = sys_ntohll(sys_htonll(ll1)); if (ll0 != ll1) { DEBUG_WARNING("endian long-long: 0x%llx\n", ll0); return EINVAL; } return 0; }