mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
Initialize the Stat structure
The system `stat` structure includes padding, and, on some operating systems such as all BSDs, "spare" bytes at the end. We can't reliably compare two `Stat` values if these are uninitialized, while being later compared. This is what was causing the `fstatat` test to fail on FreeBSD since the update to LLVM 12. It was previously only passing by accident.
This commit is contained in:
parent
f67e756211
commit
4e399ef62c
@ -3408,7 +3408,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat {
|
||||
@compileError("fstat is not yet implemented on Windows");
|
||||
}
|
||||
|
||||
var stat: Stat = undefined;
|
||||
var stat: Stat = mem.zeroes(Stat);
|
||||
switch (errno(system.fstat(fd, &stat))) {
|
||||
0 => return stat,
|
||||
EINVAL => unreachable,
|
||||
@ -3459,7 +3459,7 @@ pub fn fstatatWasi(dirfd: fd_t, pathname: []const u8, flags: u32) FStatAtError!S
|
||||
/// Same as `fstatat` but `pathname` is null-terminated.
|
||||
/// See also `fstatat`.
|
||||
pub fn fstatatZ(dirfd: fd_t, pathname: [*:0]const u8, flags: u32) FStatAtError!Stat {
|
||||
var stat: Stat = undefined;
|
||||
var stat: Stat = mem.zeroes(Stat);
|
||||
switch (errno(system.fstatat(dirfd, pathname, &stat, flags))) {
|
||||
0 => return stat,
|
||||
EINVAL => unreachable,
|
||||
|
||||
@ -263,10 +263,6 @@ test "linkat with different directories" {
|
||||
test "fstatat" {
|
||||
// enable when `fstat` and `fstatat` are implemented on Windows
|
||||
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
||||
if (builtin.os.tag == .freebsd and builtin.mode == .ReleaseFast) {
|
||||
// https://github.com/ziglang/zig/issues/8538
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
var tmp = tmpDir(.{});
|
||||
defer tmp.cleanup();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user