mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Fix stat() on x64
This commit is contained in:
10
src/c.zig
10
src/c.zig
@@ -28,13 +28,19 @@ pub extern "c" fn fchmodat(c_int, [*c]const u8, mode_t, c_int) c_int;
|
||||
pub extern "c" fn fchown(std.c.fd_t, std.c.uid_t, std.c.gid_t) c_int;
|
||||
pub extern "c" fn lchown(path: [*:0]const u8, std.c.uid_t, std.c.gid_t) c_int;
|
||||
pub extern "c" fn chown(path: [*:0]const u8, std.c.uid_t, std.c.gid_t) c_int;
|
||||
pub extern "c" fn lstat([*c]const u8, [*c]libc_stat) c_int;
|
||||
pub extern "c" fn lstat64([*c]const u8, [*c]libc_stat) c_int;
|
||||
pub extern "c" fn fstat64([*c]const u8, [*c]libc_stat) c_int;
|
||||
pub extern "c" fn stat64([*c]const u8, [*c]libc_stat) c_int;
|
||||
pub extern "c" fn lchmod(path: [*:0]const u8, mode: mode_t) c_int;
|
||||
pub extern "c" fn truncate(path: [*:0]const u8, len: os.off_t) c_int;
|
||||
pub extern "c" fn truncate([*:0]const u8, i64) c_int; // note: truncate64 is not a thing
|
||||
|
||||
pub extern "c" fn lutimes(path: [*:0]const u8, times: *const [2]std.os.timeval) c_int;
|
||||
pub extern "c" fn mkdtemp(template: [*c]u8) ?[*:0]u8;
|
||||
|
||||
pub const lstat = lstat64;
|
||||
pub const fstat = fstat64;
|
||||
pub const stat = stat64;
|
||||
|
||||
pub fn lstat_absolute(path: [:0]const u8) !Stat {
|
||||
if (builtin.os.tag == .windows) {
|
||||
@compileError("Not implemented yet");
|
||||
|
||||
@@ -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_ };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user