about summary refs log tree commit diff
path: root/src/fs.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs.zig')
-rw-r--r--src/fs.zig9
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},