diff options
Diffstat (limited to '')
| -rw-r--r-- | src/fs.zig | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/fs.zig b/src/fs.zig index c009afd..8ae9d8e 100644 --- a/src/fs.zig +++ b/src/fs.zig @@ -47,6 +47,13 @@ pub const FileSwapper = struct { self.tmp.sync() catch @panic("sync tmp file"); + // check if target path exists + var found = true; + std.fs.cwd().access(self.target_path, .{}) catch |e| switch (e) { + error.FileNotFound => found = false, + else => @panic("unable to stat target path"), + }; + // swap file into final location std.fs.rename( std.fs.cwd(), @@ -60,7 +67,7 @@ pub const FileSwapper = struct { pub fn replace_extension(alloc: std.mem.Allocator, p: []const u8, new: []const u8) ![]const u8 { const dirname = std.fs.path.dirname(p) orelse "."; - const basename = try strip_extension(p); + const basename = try strip_extension(std.fs.path.basename(p)); return try join_path_and_filename( alloc, &.{dirname}, |