authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-15 10:44:44-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-15 14:18:21-08:00
log7ff6bcc1115b329cfb8ff1498f5d6cc74ae67dd3
treef19f3b6affcf1a5c6d7b137062156d2d476a5448
parentb2776d097d4407a8d76bea88e4289297eed65e3e

std.Io.Threaded: track unaligned mapping length on Windows


1 files changed, 13 insertions(+), 6 deletions(-)

lib/std/Io/Threaded.zig+13-6
...@@ -16259,6 +16259,7 @@ fn createFileMap(...@@ -16259,6 +16259,7 @@ fn createFileMap(
16259 .SUCCESS => {},16259 .SUCCESS => {},
16260 .FILE_LOCK_CONFLICT => return error.FileLockConflict,16260 .FILE_LOCK_CONFLICT => return error.FileLockConflict,
16261 .INVALID_FILE_FOR_SECTION => return error.OperationUnsupported,16261 .INVALID_FILE_FOR_SECTION => return error.OperationUnsupported,
16262 .ACCESS_DENIED => return error.AccessDenied,
16262 else => |status| return windows.unexpectedStatus(status),16263 else => |status| return windows.unexpectedStatus(status),
16263 }16264 }
16264 var contents_ptr: ?[*]align(std.heap.page_size_min) u8 = null;16265 var contents_ptr: ?[*]align(std.heap.page_size_min) u8 = null;
...@@ -16280,10 +16281,15 @@ fn createFileMap(...@@ -16280,10 +16281,15 @@ fn createFileMap(
16280 .SECTION_PROTECTION => return error.PermissionDenied,16281 .SECTION_PROTECTION => return error.PermissionDenied,
16281 else => |status| return windows.unexpectedStatus(status),16282 else => |status| return windows.unexpectedStatus(status),
16282 }16283 }
16284 if (builtin.mode == .Debug) {
16285 const page_size = std.heap.pageSize();
16286 const alignment: Alignment = .fromByteUnits(page_size);
16287 assert(contents_len == alignment.forward(len));
16288 }
16283 return .{16289 return .{
16284 .file = file,16290 .file = file,
16285 .offset = offset,16291 .offset = offset,
16286 .memory = contents_ptr.?[0..contents_len],16292 .memory = contents_ptr.?[0..len],
16287 .section = section,16293 .section = section,
16288 };16294 };
16289 } else if (have_mmap) {16295 } else if (have_mmap) {
...@@ -16410,7 +16416,8 @@ fn fileMemoryMapSetLength(...@@ -16410,7 +16416,8 @@ fn fileMemoryMapSetLength(
16410 .SECTION_PROTECTION => return error.PermissionDenied,16416 .SECTION_PROTECTION => return error.PermissionDenied,
16411 else => |status| return windows.unexpectedStatus(status),16417 else => |status| return windows.unexpectedStatus(status),
16412 }16418 }
16413 mm.memory = contents_ptr.?[0..contents_len];16419 assert(contents_len == alignment.forward(new_len));
16420 mm.memory = contents_ptr.?[0..new_len];
16414 },16421 },
16415 .wasi => unreachable,16422 .wasi => unreachable,
16416 .linux => {16423 .linux => {
...@@ -16483,15 +16490,15 @@ fn fileMemoryMapSetLength(...@@ -16483,15 +16490,15 @@ fn fileMemoryMapSetLength(
16483fn fileMemoryMapRead(userdata: ?*anyopaque, mm: *File.MemoryMap) File.ReadPositionalError!void {16490fn fileMemoryMapRead(userdata: ?*anyopaque, mm: *File.MemoryMap) File.ReadPositionalError!void {
16484 const t: *Threaded = @ptrCast(@alignCast(userdata));16491 const t: *Threaded = @ptrCast(@alignCast(userdata));
16485 _ = t;16492 _ = t;
16486 if (mm.section != null) return;16493 const section = mm.section orelse return mmSyncRead(mm.file, mm.memory, mm.offset);
16487 return mmSyncRead(mm.file, mm.memory, mm.offset);16494 _ = section;
16488}16495}
1648916496
16490fn fileMemoryMapWrite(userdata: ?*anyopaque, mm: *File.MemoryMap) File.WritePositionalError!void {16497fn fileMemoryMapWrite(userdata: ?*anyopaque, mm: *File.MemoryMap) File.WritePositionalError!void {
16491 const t: *Threaded = @ptrCast(@alignCast(userdata));16498 const t: *Threaded = @ptrCast(@alignCast(userdata));
16492 _ = t;16499 _ = t;
16493 if (mm.section != null) return;16500 const section = mm.section orelse return mmSyncWrite(mm.file, mm.memory, mm.offset);
16494 return mmSyncWrite(mm.file, mm.memory, mm.offset);16501 _ = section;
16495}16502}
1649616503
16497fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!void {16504fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!void {