From ea7deae11b488c4d4b6a15f8e6272bd7a5550866 Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Fri, 3 Oct 2025 17:38:27 +0200 Subject: split formatting out of get_mtime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this allows changing how the time value should be formatted to prepare for using this to make pandoc renders reproducable Signed-off-by: Robert Günzler --- src/fs.zig | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/fs.zig') diff --git a/src/fs.zig b/src/fs.zig index 8ae9d8e..49041e2 100644 --- a/src/fs.zig +++ b/src/fs.zig @@ -100,7 +100,7 @@ pub fn join_path_and_filename(alloc: std.mem.Allocator, paths: []const []const u return try std.fs.path.join(alloc, paths2); } -pub fn get_mtime(alloc: std.mem.Allocator, path: []const u8) ![]const u8 { +pub fn get_mtime(alloc: std.mem.Allocator, path: []const u8) !std.os.linux.timespec { const attr = try alloc.create(std.os.linux.Stat); defer alloc.destroy(attr); @@ -108,16 +108,22 @@ pub fn get_mtime(alloc: std.mem.Allocator, path: []const u8) ![]const u8 { defer alloc.free(pathZ); // use stat to get mtime - _ = std.os.linux.stat(pathZ, attr); + const rc = std.os.linux.stat(pathZ, attr); + if (rc < 0) return error.UnknownStatError; - // use libc strftime to format time string - const mtime = attr.mtime(); - const mtime_str = try alloc.alloc(u8, 512); + return attr.mtime(); +} + +// use libc strftime to format time string +pub fn format_mtime(alloc: std.mem.Allocator, mtime: std.os.linux.timespec, fmt: [*c]const u8) ![]const u8 { + const mtime_str = try alloc.alloc(u8, std.os.linux.PATH_MAX); + const tm = c.localtime(&mtime.sec); const n = c.strftime( mtime_str.ptr, mtime_str.len, - "%F", - c.localtime(&mtime.sec), + fmt, + tm, ); + if (n < 0) return error.UnknownStrftimeError; return try alloc.realloc(mtime_str, n); } -- cgit 1.4.1