From db5951337e968effd7adce82a31fa841f6a7c8a8 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Tue, 5 Apr 2022 01:52:48 -0700 Subject: Fix stat() on x64 --- src/javascript/jsc/node/syscall.zig | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'src/javascript') diff --git a/src/javascript/jsc/node/syscall.zig b/src/javascript/jsc/node/syscall.zig index 091b3d632..d51062a83 100644 --- a/src/javascript/jsc/node/syscall.zig +++ b/src/javascript/jsc/node/syscall.zig @@ -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_ }; } -- cgit v1.2.3