mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-03-08 01:04:43 +01:00
compiler: update to new createFileAtomic API
This commit is contained in:
parent
1b6cee8e82
commit
c1e9d87b1f
4 changed files with 28 additions and 22 deletions
|
|
@ -7545,7 +7545,6 @@ fn dirOpenDirWasi(
|
|||
.NOMEM => return error.SystemResources,
|
||||
.NOTDIR => return error.NotDir,
|
||||
.PERM => return error.PermissionDenied,
|
||||
.BUSY => return error.DeviceBusy,
|
||||
.NOTCAPABLE => return error.AccessDenied,
|
||||
.ILSEQ => return error.BadPathName,
|
||||
else => |err| return posix.unexpectedErrno(err),
|
||||
|
|
@ -14012,7 +14011,6 @@ fn windowsCreateProcessPathExt(
|
|||
error.NetworkNotFound,
|
||||
error.NameTooLong,
|
||||
error.BadPathName,
|
||||
error.DeviceBusy,
|
||||
=> return error.FileNotFound,
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -343,10 +343,10 @@ pub fn updateFileOnDisk(file: *File, comp: *Compilation) !void {
|
|||
}
|
||||
|
||||
// `make_path` matters because the dir hasn't actually been created yet.
|
||||
var af = try root_dir.atomicFile(io, sub_path, .{ .make_path = true, .write_buffer = &.{} });
|
||||
defer af.deinit();
|
||||
try af.file_writer.interface.writeAll(file.source.?);
|
||||
af.finish() catch |err| switch (err) {
|
||||
var af = try root_dir.createFileAtomic(io, sub_path, .{ .make_path = true, .replace = true });
|
||||
defer af.deinit(io);
|
||||
try af.file.writeStreamingAll(io, file.source.?);
|
||||
af.replace(io) catch |err| switch (err) {
|
||||
error.AccessDenied => switch (builtin.os.tag) {
|
||||
.windows => {
|
||||
// Very likely happened due to another process or thread
|
||||
|
|
|
|||
|
|
@ -3916,11 +3916,14 @@ pub fn saveState(comp: *Compilation) !void {
|
|||
|
||||
// Using an atomic file prevents a crash or power failure from corrupting
|
||||
// the previous incremental compilation state.
|
||||
var af = try lf.emit.root_dir.handle.createFileAtomic(io, basename, .{ .replace = true });
|
||||
defer af.deinit(io);
|
||||
|
||||
var write_buffer: [1024]u8 = undefined;
|
||||
var af = try lf.emit.root_dir.handle.atomicFile(io, basename, .{ .write_buffer = &write_buffer });
|
||||
defer af.deinit();
|
||||
try af.file_writer.interface.writeVecAll(bufs.items);
|
||||
try af.finish();
|
||||
var file_writer = af.file.writer(io, &write_buffer);
|
||||
try file_writer.interface.writeVecAll(bufs.items);
|
||||
try file_writer.interface.flush();
|
||||
try af.replace(io);
|
||||
}
|
||||
|
||||
fn addBuf(list: *std.array_list.Managed([]const u8), buf: []const u8) void {
|
||||
|
|
@ -5244,26 +5247,31 @@ fn processOneJob(
|
|||
}
|
||||
}
|
||||
|
||||
fn createDepFile(comp: *Compilation, depfile: []const u8, binfile: Cache.Path) anyerror!void {
|
||||
fn createDepFile(comp: *Compilation, dep_file: []const u8, bin_file: Cache.Path) anyerror!void {
|
||||
const io = comp.io;
|
||||
|
||||
var af = try Io.Dir.cwd().createFileAtomic(io, dep_file, .{ .replace = true });
|
||||
defer af.deinit(io);
|
||||
|
||||
var buf: [4096]u8 = undefined;
|
||||
var af = try Io.Dir.cwd().atomicFile(io, depfile, .{ .write_buffer = &buf });
|
||||
defer af.deinit();
|
||||
var file_writer = af.file.writer(io, &buf);
|
||||
|
||||
comp.writeDepFile(binfile, &af.file_writer.interface) catch return af.file_writer.err.?;
|
||||
|
||||
try af.finish();
|
||||
comp.writeDepFile(bin_file, &file_writer.interface) catch |err| switch (err) {
|
||||
error.WriteFailed => return file_writer.err.?,
|
||||
};
|
||||
try file_writer.flush();
|
||||
try af.replace(io);
|
||||
}
|
||||
|
||||
fn writeDepFile(
|
||||
comp: *Compilation,
|
||||
binfile: Cache.Path,
|
||||
bin_file: Cache.Path,
|
||||
w: *std.Io.Writer,
|
||||
) std.Io.Writer.Error!void {
|
||||
const prefixes = comp.cache_parent.prefixes();
|
||||
const fsi = comp.file_system_inputs.?.items;
|
||||
|
||||
try w.print("{f}:", .{binfile});
|
||||
try w.print("{f}:", .{bin_file});
|
||||
|
||||
{
|
||||
var it = std.mem.splitScalar(u8, fsi, 0);
|
||||
|
|
|
|||
|
|
@ -355,11 +355,11 @@ fn fmtPathFile(
|
|||
try fmt.stdout_writer.interface.print("{s}\n", .{file_path});
|
||||
fmt.any_error = true;
|
||||
} else {
|
||||
var af = try dir.atomicFile(io, sub_path, .{ .permissions = stat.permissions, .write_buffer = &.{} });
|
||||
defer af.deinit();
|
||||
var af = try dir.createFileAtomic(io, sub_path, .{ .permissions = stat.permissions, .replace = true });
|
||||
defer af.deinit(io);
|
||||
|
||||
try af.file_writer.interface.writeAll(fmt.out_buffer.written());
|
||||
try af.finish();
|
||||
try af.file.writeStreamingAll(io, fmt.out_buffer.written());
|
||||
try af.replace(io);
|
||||
try fmt.stdout_writer.interface.print("{s}\n", .{file_path});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue