diff --git a/vlib/builtin/builtin.c.v b/vlib/builtin/builtin.c.v index 0164ca0bd1..e8d2c837e7 100644 --- a/vlib/builtin/builtin.c.v +++ b/vlib/builtin/builtin.c.v @@ -622,7 +622,6 @@ pub fn free(ptr voidptr) { // memdup dynamically allocates a `sz` bytes block of memory on the heap // memdup then copies the contents of `src` into the allocated space and // returns a pointer to the newly allocated space. - @[unsafe] pub fn memdup(src voidptr, sz isize) voidptr { $if trace_memdup ? { diff --git a/vlib/encoding/binary/little_endian.v b/vlib/encoding/binary/little_endian.v index b4e3979702..a12823bac0 100644 --- a/vlib/encoding/binary/little_endian.v +++ b/vlib/encoding/binary/little_endian.v @@ -151,3 +151,11 @@ pub fn little_endian_put_u64_at(mut b []u8, v u64, o int) { pub fn little_endian_put_u64_end(mut b []u8, v u64) { little_endian_put_u64_at(mut b, v, b.len - 8) } + +@[direct_array_access; inline] +pub fn little_endian_f32_at(b []u8, o int) f32 { + _ = b[o] // bounds check + _ = b[o + 3] // bounds check + u := u32(b[o]) | (u32(b[o + 1]) << u32(8)) | (u32(b[o + 2]) << u32(16)) | (u32(b[o + 3]) << u32(24)) + return *(&f32(&u)) +}