lib/tldr/src/formats/elf/byte.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2
3 pub fn copyInto(buffer: []u8, offset: usize, bytes: []const u8) void {
4 if (bytes.len == 0) return;
5 @memcpy(buffer[offset .. offset + bytes.len], bytes);
6 }
7
8 pub fn elfSymbolInfo(binding: anytype, kind: anytype) u8 {
9 return (@as(u8, binding) << 4) | @as(u8, kind);
10 }
11
12 pub fn hashU64(seed: u64, value: u64) u64 {
13 var bytes: [8]u8 = undefined;
14 std.mem.writeInt(u64, &bytes, value, .little);
15 return std.hash.Wyhash.hash(seed, &bytes);
16 }
17
18 pub fn readU16(bytes: []const u8, offset: usize) u16 {
19 return std.mem.readInt(u16, bytes[offset..][0..2], .little);
20 }
21
22 pub fn readU32(bytes: []const u8, offset: usize) u32 {
23 return std.mem.readInt(u32, bytes[offset..][0..4], .little);
24 }
25
26 pub fn readU64(bytes: []const u8, offset: usize) u64 {
27 return std.mem.readInt(u64, bytes[offset..][0..8], .little);
28 }
29
30 pub fn writeU16(bytes: []u8, offset: usize, value: u16) void {
31 std.mem.writeInt(u16, bytes[offset..][0..2], value, .little);
32 }
33
34 pub fn writeU32(bytes: []u8, offset: usize, value: u32) void {
35 std.mem.writeInt(u32, bytes[offset..][0..4], value, .little);
36 }
37
38 pub fn writeU64(bytes: []u8, offset: usize, value: u64) void {
39 std.mem.writeInt(u64, bytes[offset..][0..8], value, .little);
40 }