diff options
Diffstat (limited to '')
| -rw-r--r-- | src/fs.zig | 15 | ||||
| -rw-r--r-- | src/gen.zig | 13 |
2 files changed, 14 insertions, 14 deletions
diff --git a/src/fs.zig b/src/fs.zig index adcd0c3..8eaf7c2 100644 --- a/src/fs.zig +++ b/src/fs.zig @@ -127,20 +127,19 @@ pub fn stripExtension(path: []const u8) ![]const u8 { } pub fn joinPathAndFilename(alloc: std.mem.Allocator, paths: []const []const u8, filename_parts: []const []const u8) ![]const u8 { - const filename = try std.mem.concat(alloc, u8, filename_parts); - defer alloc.free(filename); + var buf: [std.os.linux.PATH_MAX]u8 = undefined; + var fba = std.heap.FixedBufferAllocator.init(&buf); - var p = try std.ArrayList([]const u8).initCapacity(alloc, paths.len + 1); + const filename = try std.mem.concat(fba.allocator(), u8, filename_parts); + + var p = try std.ArrayList([]const u8).initCapacity(fba.allocator(), paths.len + 1); defer p.deinit(); p.appendSliceAssumeCapacity(paths); p.appendAssumeCapacity(filename); - const paths2 = try p.toOwnedSlice(); - defer alloc.free(paths2); - - std.debug.assert(paths.len + 1 == paths2.len); - return try std.fs.path.join(alloc, paths2); + std.debug.assert(paths.len + 1 == p.items.len); + return try std.fs.path.join(alloc, p.items); } pub fn getGitTime(path: []const u8) !std.posix.timespec { diff --git a/src/gen.zig b/src/gen.zig index 4b9735d..2a01590 100644 --- a/src/gen.zig +++ b/src/gen.zig @@ -6,6 +6,9 @@ const fs = @import("fs.zig"); const exe = @import("exe.zig"); pub fn fixMtimes(ctx: *Context) !void { + var buf: [2 * std.os.linux.PATH_MAX]u8 = undefined; + var fba = std.heap.FixedBufferAllocator.init(&buf); + ctx.progress_start("Fix mtimes"); defer ctx.progress_end(); @@ -14,13 +17,11 @@ pub fn fixMtimes(ctx: *Context) !void { ctx.progress_start(p); defer ctx.progress_end(); - const path = try fs.joinPathAndFilename(ctx.allocator(), &.{Context.params.PAGE_PATH}, &.{p}); - defer ctx.allocator().free(path); - - const mdpath = try fs.replaceExtension(ctx.allocator(), p, "md"); - defer ctx.allocator().free(mdpath); + const path = try fs.joinPathAndFilename(fba.allocator(), &.{Context.params.PAGE_PATH}, &.{p}); + const mdpath = try fs.replaceExtension(fba.allocator(), path, "md"); + defer fba.reset(); - std.fs.cwd().access(mdpath, .{ .mode = .read_only }) catch { + std.fs.cwd().access(mdpath, .{}) catch { // only set mtime from git if no markdown source is used const ts = fs.getGitTime(path) catch continue; try fs.setMtime(path, ts); |