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(
1625916259 .SUCCESS => {},
1626016260 .FILE_LOCK_CONFLICT => return error.FileLockConflict,
1626116261 .INVALID_FILE_FOR_SECTION => return error.OperationUnsupported,
16262 .ACCESS_DENIED => return error.AccessDenied,
1626216263 else => |status| return windows.unexpectedStatus(status),
1626316264 }
1626416265 var contents_ptr: ?[*]align(std.heap.page_size_min) u8 = null;
......@@ -16280,10 +16281,15 @@ fn createFileMap(
1628016281 .SECTION_PROTECTION => return error.PermissionDenied,
1628116282 else => |status| return windows.unexpectedStatus(status),
1628216283 }
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 }
1628316289 return .{
1628416290 .file = file,
1628516291 .offset = offset,
16286 .memory = contents_ptr.?[0..contents_len],
16292 .memory = contents_ptr.?[0..len],
1628716293 .section = section,
1628816294 };
1628916295 } else if (have_mmap) {
......@@ -16410,7 +16416,8 @@ fn fileMemoryMapSetLength(
1641016416 .SECTION_PROTECTION => return error.PermissionDenied,
1641116417 else => |status| return windows.unexpectedStatus(status),
1641216418 }
16413 mm.memory = contents_ptr.?[0..contents_len];
16419 assert(contents_len == alignment.forward(new_len));
16420 mm.memory = contents_ptr.?[0..new_len];
1641416421 },
1641516422 .wasi => unreachable,
1641616423 .linux => {
......@@ -16483,15 +16490,15 @@ fn fileMemoryMapSetLength(
1648316490fn fileMemoryMapRead(userdata: ?*anyopaque, mm: *File.MemoryMap) File.ReadPositionalError!void {
1648416491 const t: *Threaded = @ptrCast(@alignCast(userdata));
1648516492 _ = t;
16486 if (mm.section != null) return;
16487 return mmSyncRead(mm.file, mm.memory, mm.offset);
16493 const section = mm.section orelse return mmSyncRead(mm.file, mm.memory, mm.offset);
16494 _ = section;
1648816495}
1648916496
1649016497fn fileMemoryMapWrite(userdata: ?*anyopaque, mm: *File.MemoryMap) File.WritePositionalError!void {
1649116498 const t: *Threaded = @ptrCast(@alignCast(userdata));
1649216499 _ = t;
16493 if (mm.section != null) return;
16494 return mmSyncWrite(mm.file, mm.memory, mm.offset);
16500 const section = mm.section orelse return mmSyncWrite(mm.file, mm.memory, mm.offset);
16501 _ = section;
1649516502}
1649616503
1649716504fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!void {