aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-06-21 11:44:49 +0200
committerHimbeer <himbeer@disroot.org>2024-06-21 11:44:49 +0200
commitabfebede93892980c62e4858fa419733792c52c6 (patch)
tree0953bd2bf562e03488ad5be25426beab5bc45d0b /src/lib
parent10fff7b7932dc50cbdfbed68a3bddd288dc537dc (diff)
Revert "mem: Fix resizing not accounting for alignment padding between Chunk header and data buffer"
This reverts commit 88ee047a24518161478dc1f79fb95f3343bc642a.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/mem.zig16
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;