diff options
| author | LemonBoy <thatlemon@gmail.com> | 2019-10-12 12:21:20 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-10-16 18:10:32 -0400 |
| commit | 6a549a7f0cc337634c5dca6abf20eca53b572f21 (patch) | |
| tree | ecb52dd0688ee0abf6089013095a7d21e66b97be | |
| parent | 518197080748b3804d76030ad9f02969b01a679a (diff) | |
| download | zig-6a549a7f0cc337634c5dca6abf20eca53b572f21.tar.gz zig-6a549a7f0cc337634c5dca6abf20eca53b572f21.zip | |
Fix compilation of updateTimes on 32bit platforms
Add a test to avoid regressions.
Fixes #3412
| -rw-r--r-- | lib/std/fs/file.zig | 8 | ||||
| -rw-r--r-- | lib/std/io/test.zig | 18 |
2 files changed, 22 insertions, 4 deletions
diff --git a/lib/std/fs/file.zig b/lib/std/fs/file.zig index 5ecad01026..53ba3e8d15 100644 --- a/lib/std/fs/file.zig +++ b/lib/std/fs/file.zig @@ -279,12 +279,12 @@ pub const File = struct { } const times = [2]os.timespec{ os.timespec{ - .tv_sec = @divFloor(atime, std.time.ns_per_s), - .tv_nsec = @mod(atime, std.time.ns_per_s), + .tv_sec = math.cast(isize, @divFloor(atime, std.time.ns_per_s)) catch maxInt(isize), + .tv_nsec = math.cast(isize, @mod(atime, std.time.ns_per_s)) catch maxInt(isize), }, os.timespec{ - .tv_sec = @divFloor(mtime, std.time.ns_per_s), - .tv_nsec = @mod(mtime, std.time.ns_per_s), + .tv_sec = math.cast(isize, @divFloor(mtime, std.time.ns_per_s)) catch maxInt(isize), + .tv_nsec = math.cast(isize, @mod(mtime, std.time.ns_per_s)) catch maxInt(isize), }, }; try os.futimens(self.handle, ×); diff --git a/lib/std/io/test.zig b/lib/std/io/test.zig index 8b2dc9e894..e93b74169b 100644 --- a/lib/std/io/test.zig +++ b/lib/std/io/test.zig @@ -629,3 +629,21 @@ test "File seek ops" { try file.seekTo(1234); std.testing.expect((try file.getPos()) == 1234); } + +test "updateTimes" { + const tmp_file_name = "just_a_temporary_file.txt"; + var file = try File.openWrite(tmp_file_name); + defer { + file.close(); + std.fs.deleteFile(tmp_file_name) catch {}; + } + var stat_old = try file.stat(); + // Set atime and mtime to 5s before + try file.updateTimes( + stat_old.atime - 5 * std.time.ns_per_s, + stat_old.mtime - 5 * std.time.ns_per_s, + ); + var stat_new = try file.stat(); + std.testing.expect(stat_new.atime < stat_old.atime); + std.testing.expect(stat_new.mtime < stat_old.mtime); +} |
