Skip to content
Snippets Groups Projects
Commit 6e4fdf70 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Merge branch 'endian' into 'master'

Add `endian.h`

See merge request !497
parents 933b447c 9e20c351
No related branches found
No related tags found
1 merge request!497Add `endian.h`
Pipeline #15986 passed
sys_includes = ["stdint.h"]
include_guard = "_RELIBC_ENDIAN_H"
trailer = "#include <machine/endian.h>"
language = "C"
style = "Tag"
no_includes = true
cpp_compat = true
//! endian.h implementation for Redox, following
//! https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/endian.h.html
use crate::platform::types::*;
#[no_mangle]
extern "C" fn be16toh(x: uint16_t) -> uint16_t {
uint16_t::from_be(x)
}
#[no_mangle]
extern "C" fn be32toh(x: uint32_t) -> uint32_t {
uint32_t::from_be(x)
}
#[no_mangle]
extern "C" fn be64toh(x: uint64_t) -> uint64_t {
uint64_t::from_be(x)
}
#[no_mangle]
extern "C" fn htobe16(x: uint16_t) -> uint16_t {
x.to_be()
}
#[no_mangle]
extern "C" fn htobe32(x: uint32_t) -> uint32_t {
x.to_be()
}
#[no_mangle]
extern "C" fn htobe64(x: uint64_t) -> uint64_t {
x.to_be()
}
#[no_mangle]
extern "C" fn htole16(x: uint16_t) -> uint16_t {
x.to_le()
}
#[no_mangle]
extern "C" fn htole32(x: uint32_t) -> uint32_t {
x.to_le()
}
#[no_mangle]
extern "C" fn htole64(x: uint64_t) -> uint64_t {
x.to_le()
}
#[no_mangle]
extern "C" fn le16toh(x: uint16_t) -> uint16_t {
uint16_t::from_le(x)
}
#[no_mangle]
extern "C" fn le32toh(x: uint32_t) -> uint32_t {
uint32_t::from_le(x)
}
#[no_mangle]
extern "C" fn le64toh(x: uint64_t) -> uint64_t {
uint64_t::from_le(x)
}
......@@ -11,6 +11,7 @@ pub mod dirent;
pub mod dl_tls;
pub mod dlfcn;
pub mod elf;
pub mod endian;
pub mod errno;
pub mod fcntl;
pub mod float;
......
......@@ -14,6 +14,7 @@ EXPECT_NAMES=\
crypt/sha512 \
destructor \
dirent/scandir \
endian \
errno \
error \
fcntl/create \
......
#include <assert.h>
#include <endian.h>
#include <stdint.h>
#include "test_helpers.h"
int main() {
uint16_t zero_u16 = 0;
assert(be16toh(zero_u16) == zero_u16);
assert(htobe16(zero_u16) == zero_u16);
assert(htole16(zero_u16) == zero_u16);
assert(le16toh(zero_u16) == zero_u16);
uint16_t value_be_u16 = 0x0123;
uint16_t value_le_u16 = 0x2301;
assert(be16toh(value_be_u16) == value_le_u16);
assert(htobe16(value_le_u16) == value_be_u16);
assert(htole16(value_le_u16) == value_le_u16);
assert(le16toh(value_le_u16) == value_le_u16);
uint32_t zero_u32 = 0;
assert(be32toh(zero_u32) == zero_u32);
assert(htobe32(zero_u32) == zero_u32);
assert(htole32(zero_u32) == zero_u32);
assert(le32toh(zero_u32) == zero_u32);
uint32_t value_be_u32 = 0x01234567;
uint32_t value_le_u32 = 0x67452301;
assert(be32toh(value_be_u32) == value_le_u32);
assert(htobe32(value_le_u32) == value_be_u32);
assert(htole32(value_le_u32) == value_le_u32);
assert(le32toh(value_le_u32) == value_le_u32);
uint64_t zero_u64 = 0;
assert(be64toh(zero_u64) == zero_u64);
assert(htobe64(zero_u64) == zero_u64);
assert(htole64(zero_u64) == zero_u64);
assert(le64toh(zero_u64) == zero_u64);
uint64_t value_be_u64 = 0x0123456789ABCDEF;
uint64_t value_le_u64 = 0xEFCDAB8967452301;
assert(be64toh(value_be_u64) == value_le_u64);
assert(htobe64(value_le_u64) == value_be_u64);
assert(htole64(value_le_u64) == value_le_u64);
assert(le64toh(value_le_u64) == value_le_u64);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment