Fix stat() on x64

This commit is contained in:
Jarred Sumner
2022-04-05 01:52:48 -07:00
parent d652e87473
commit db5951337e
2 changed files with 32 additions and 10 deletions

View File

@@ -23,6 +23,27 @@ pub const S = struct {
};
const sys = std.os.system;
const statSym = if (Environment.isMac)
C.stat
else if (Environment.isLinux)
linux.stat
else
@compileError("STAT");
const fstatSym = if (Environment.isMac)
C.fstat
else if (Environment.isLinux)
linux.fstat
else
@compileError("STAT");
const lstat64 = if (Environment.isMac)
C.lstat
else if (Environment.isLinux)
linux.lstat
else
@compileError("STAT");
pub const Tag = enum(u8) {
TODO,
@@ -76,11 +97,6 @@ const mode_t = os.mode_t;
const open_sym = system.open;
const fstat_sym = if (builtin.os.tag == .linux)
sys.fstat64
else
sys.fstat;
const mem = std.mem;
pub fn getcwd(buf: *[bun.MAX_PATH_BYTES]u8) Maybe([]const u8) {
@@ -105,19 +121,19 @@ pub fn chdir(destination: [:0]const u8) Maybe(void) {
pub fn stat(path: [:0]const u8) Maybe(os.Stat) {
var stat_ = mem.zeroes(os.Stat);
if (Maybe(os.Stat).errnoSys(sys.stat(path, &stat_), .stat)) |err| return err;
if (Maybe(os.Stat).errnoSys(statSym(path, &stat_), .stat)) |err| return err;
return Maybe(os.Stat){ .result = stat_ };
}
pub fn lstat(path: [:0]const u8) Maybe(os.Stat) {
var stat_ = mem.zeroes(os.Stat);
if (Maybe(os.Stat).errnoSys(C.lstat(path, &stat_), .lstat)) |err| return err;
if (Maybe(os.Stat).errnoSys(lstat64(path, &stat_), .lstat)) |err| return err;
return Maybe(os.Stat){ .result = stat_ };
}
pub fn fstat(fd: JSC.Node.FileDescriptor) Maybe(os.Stat) {
var stat_ = mem.zeroes(os.Stat);
if (Maybe(os.Stat).errnoSys(fstat_sym(fd, &stat_), .fstat)) |err| return err;
if (Maybe(os.Stat).errnoSys(fstatSym(fd, &stat_), .fstat)) |err| return err;
return Maybe(os.Stat){ .result = stat_ };
}