diff options
-rw-r--r-- | src/lib/mem.zig | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/src/lib/mem.zig b/src/lib/mem.zig index 9e77add..a9addf6 100644 --- a/src/lib/mem.zig +++ b/src/lib/mem.zig @@ -72,8 +72,6 @@ pub fn ChunkAllocator(comptime config: ChunkAllocatorConfig) type { pub fn alloc(ctx: *anyopaque, len: usize, log2_ptr_align: u8, ret_addr: usize) ?[*]u8 { _ = ret_addr; - if (len == 0) return null; - const self: *Self = @ptrCast(@alignCast(ctx)); const ptr_align = @as(usize, 1) << @as(std.mem.Allocator.Log2Align, @intCast(log2_ptr_align)); @@ -112,22 +110,18 @@ pub fn ChunkAllocator(comptime config: ChunkAllocatorConfig) type { pub fn resize(ctx: *anyopaque, buf: []u8, log2_buf_align: u8, new_len: usize, ret_addr: usize) bool { _ = ret_addr; - if (new_len == 0) return false; - const self: *Self = @ptrCast(@alignCast(ctx)); const ptr_align = @as(usize, 1) << @as(std.mem.Allocator.Log2Align, @intCast(log2_buf_align)); - const adjust_off = std.mem.alignPointerOffset(buf.ptr, ptr_align) orelse return false; - const aligned_new_len = new_len + adjust_off; - - const len_ptr: [*]const u8 = @ptrFromInt(buf.len); - const padding_len = std.mem.alignPointerOffset(len_ptr, ptr_align) orelse return false; - const head = self.head orelse return false; const bound = @intFromPtr(head) + (self.pages * paging.page_size); - const chunk = @as(*align(1) Chunk, @ptrCast(buf.ptr - padding_len - @sizeOf(Chunk))); + // fixme: Doesn't account for alignment between header and data. + const chunk = @as(*align(1) Chunk, @ptrCast(buf.ptr - @sizeOf(Chunk))); + + const adjust_off = std.mem.alignPointerOffset(buf.ptr, ptr_align) orelse return false; + const aligned_new_len = new_len + adjust_off; if (aligned_new_len < chunk.len) { const regained = chunk.len - aligned_new_len; |