mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 14:23:09 +00:00
fix regression of flock being called on wasi targets
* common symbols are now public from std.c even if they live in std.posix * LOCK is now one of the common symbols since it is the same on 100% of operating systems. * flock is now void value on wasi and windows * std.fs.Dir now uses flock being void as feature detection, avoiding trying to call it on wasi and windows
This commit is contained in:
parent
7157189143
commit
01337e2093
@ -4,9 +4,6 @@ const c = @This();
|
|||||||
const maxInt = std.math.maxInt;
|
const maxInt = std.math.maxInt;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
const page_size = std.mem.page_size;
|
const page_size = std.mem.page_size;
|
||||||
const iovec = std.posix.iovec;
|
|
||||||
const iovec_const = std.posix.iovec_const;
|
|
||||||
const winsize = std.posix.winsize;
|
|
||||||
const native_abi = builtin.abi;
|
const native_abi = builtin.abi;
|
||||||
const native_arch = builtin.cpu.arch;
|
const native_arch = builtin.cpu.arch;
|
||||||
const native_os = builtin.os.tag;
|
const native_os = builtin.os.tag;
|
||||||
@ -23,6 +20,14 @@ const dragonfly = @import("c/dragonfly.zig");
|
|||||||
const haiku = @import("c/haiku.zig");
|
const haiku = @import("c/haiku.zig");
|
||||||
const openbsd = @import("c/openbsd.zig");
|
const openbsd = @import("c/openbsd.zig");
|
||||||
|
|
||||||
|
// These constants are shared among all operating systems even when not linking
|
||||||
|
// libc.
|
||||||
|
|
||||||
|
pub const iovec = std.posix.iovec;
|
||||||
|
pub const iovec_const = std.posix.iovec_const;
|
||||||
|
pub const LOCK = std.posix.LOCK;
|
||||||
|
pub const winsize = std.posix.winsize;
|
||||||
|
|
||||||
/// The value of the link editor defined symbol _MH_EXECUTE_SYM is the address
|
/// The value of the link editor defined symbol _MH_EXECUTE_SYM is the address
|
||||||
/// of the mach header in a Mach-O executable file type. It does not appear in
|
/// of the mach header in a Mach-O executable file type. It does not appear in
|
||||||
/// any file type other than a MH_EXECUTE file type. The type of the symbol is
|
/// any file type other than a MH_EXECUTE file type. The type of the symbol is
|
||||||
@ -1330,16 +1335,6 @@ pub const KERN = switch (native_os) {
|
|||||||
},
|
},
|
||||||
else => void,
|
else => void,
|
||||||
};
|
};
|
||||||
pub const LOCK = switch (native_os) {
|
|
||||||
.linux => linux.LOCK,
|
|
||||||
.emscripten => emscripten.LOCK,
|
|
||||||
else => struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const NB = 4;
|
|
||||||
pub const UN = 8;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
pub const MADV = switch (native_os) {
|
pub const MADV = switch (native_os) {
|
||||||
.linux => linux.MADV,
|
.linux => linux.MADV,
|
||||||
.emscripten => emscripten.MADV,
|
.emscripten => emscripten.MADV,
|
||||||
@ -9032,6 +9027,11 @@ pub const sf_hdtr = switch (native_os) {
|
|||||||
else => void,
|
else => void,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const flock = switch (native_os) {
|
||||||
|
.windows, .wasi => {},
|
||||||
|
else => private.flock,
|
||||||
|
};
|
||||||
|
|
||||||
pub extern "c" var environ: [*:null]?[*:0]u8;
|
pub extern "c" var environ: [*:null]?[*:0]u8;
|
||||||
|
|
||||||
pub extern "c" fn fopen(noalias filename: [*:0]const u8, noalias modes: [*:0]const u8) ?*FILE;
|
pub extern "c" fn fopen(noalias filename: [*:0]const u8, noalias modes: [*:0]const u8) ?*FILE;
|
||||||
@ -9116,7 +9116,6 @@ pub extern "c" fn sysctlnametomib(name: [*:0]const u8, mibp: ?*c_int, sizep: ?*u
|
|||||||
pub extern "c" fn tcgetattr(fd: fd_t, termios_p: *termios) c_int;
|
pub extern "c" fn tcgetattr(fd: fd_t, termios_p: *termios) c_int;
|
||||||
pub extern "c" fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) c_int;
|
pub extern "c" fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) c_int;
|
||||||
pub extern "c" fn fcntl(fd: fd_t, cmd: c_int, ...) c_int;
|
pub extern "c" fn fcntl(fd: fd_t, cmd: c_int, ...) c_int;
|
||||||
pub extern "c" fn flock(fd: fd_t, operation: c_int) c_int;
|
|
||||||
pub extern "c" fn ioctl(fd: fd_t, request: c_int, ...) c_int;
|
pub extern "c" fn ioctl(fd: fd_t, request: c_int, ...) c_int;
|
||||||
pub extern "c" fn uname(buf: *utsname) c_int;
|
pub extern "c" fn uname(buf: *utsname) c_int;
|
||||||
|
|
||||||
@ -9396,6 +9395,9 @@ pub extern "c" fn pthread_getthreadid_np() c_int;
|
|||||||
pub extern "c" fn pthread_set_name_np(thread: pthread_t, name: [*:0]const u8) void;
|
pub extern "c" fn pthread_set_name_np(thread: pthread_t, name: [*:0]const u8) void;
|
||||||
pub extern "c" fn pthread_get_name_np(thread: pthread_t, name: [*:0]u8, len: usize) void;
|
pub extern "c" fn pthread_get_name_np(thread: pthread_t, name: [*:0]u8, len: usize) void;
|
||||||
|
|
||||||
|
// OS-specific bits. These are protected from being used on the wrong OS by
|
||||||
|
// comptime assertions inside each OS-specific file.
|
||||||
|
|
||||||
pub const AF_SUN = solaris.AF_SUN;
|
pub const AF_SUN = solaris.AF_SUN;
|
||||||
pub const AT_SUN = solaris.AT_SUN;
|
pub const AT_SUN = solaris.AT_SUN;
|
||||||
pub const FILE_EVENT = solaris.FILE_EVENT;
|
pub const FILE_EVENT = solaris.FILE_EVENT;
|
||||||
@ -9675,6 +9677,7 @@ const private = struct {
|
|||||||
extern "c" fn clock_getres(clk_id: clockid_t, tp: *timespec) c_int;
|
extern "c" fn clock_getres(clk_id: clockid_t, tp: *timespec) c_int;
|
||||||
extern "c" fn clock_gettime(clk_id: clockid_t, tp: *timespec) c_int;
|
extern "c" fn clock_gettime(clk_id: clockid_t, tp: *timespec) c_int;
|
||||||
extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: c_uint) isize;
|
extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: c_uint) isize;
|
||||||
|
extern "c" fn flock(fd: fd_t, operation: c_int) c_int;
|
||||||
extern "c" fn fork() c_int;
|
extern "c" fn fork() c_int;
|
||||||
extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
|
extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
|
||||||
extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, buf: *Stat, flag: u32) c_int;
|
extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, buf: *Stat, flag: u32) c_int;
|
||||||
|
|||||||
@ -881,7 +881,7 @@ pub fn openFileZ(self: Dir, sub_path: [*:0]const u8, flags: File.OpenFlags) File
|
|||||||
const fd = try posix.openatZ(self.fd, sub_path, os_flags, 0);
|
const fd = try posix.openatZ(self.fd, sub_path, os_flags, 0);
|
||||||
errdefer posix.close(fd);
|
errdefer posix.close(fd);
|
||||||
|
|
||||||
if (!has_flock_open_flags and flags.lock != .none) {
|
if (have_flock and !has_flock_open_flags and flags.lock != .none) {
|
||||||
// TODO: integrate async I/O
|
// TODO: integrate async I/O
|
||||||
const lock_nonblocking: i32 = if (flags.lock_nonblocking) posix.LOCK.NB else 0;
|
const lock_nonblocking: i32 = if (flags.lock_nonblocking) posix.LOCK.NB else 0;
|
||||||
try posix.flock(fd, switch (flags.lock) {
|
try posix.flock(fd, switch (flags.lock) {
|
||||||
@ -1029,7 +1029,7 @@ pub fn createFileZ(self: Dir, sub_path_c: [*:0]const u8, flags: File.CreateFlags
|
|||||||
const fd = try posix.openatZ(self.fd, sub_path_c, os_flags, flags.mode);
|
const fd = try posix.openatZ(self.fd, sub_path_c, os_flags, flags.mode);
|
||||||
errdefer posix.close(fd);
|
errdefer posix.close(fd);
|
||||||
|
|
||||||
if (!has_flock_open_flags and flags.lock != .none) {
|
if (have_flock and !has_flock_open_flags and flags.lock != .none) {
|
||||||
// TODO: integrate async I/O
|
// TODO: integrate async I/O
|
||||||
const lock_nonblocking: i32 = if (flags.lock_nonblocking) posix.LOCK.NB else 0;
|
const lock_nonblocking: i32 = if (flags.lock_nonblocking) posix.LOCK.NB else 0;
|
||||||
try posix.flock(fd, switch (flags.lock) {
|
try posix.flock(fd, switch (flags.lock) {
|
||||||
@ -2702,3 +2702,4 @@ const Allocator = std.mem.Allocator;
|
|||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
const windows = std.os.windows;
|
const windows = std.os.windows;
|
||||||
const native_os = builtin.os.tag;
|
const native_os = builtin.os.tag;
|
||||||
|
const have_flock = @TypeOf(posix.system.flock) != void;
|
||||||
|
|||||||
@ -69,7 +69,6 @@ pub const Elf_Symndx = arch_bits.Elf_Symndx;
|
|||||||
pub const F = arch_bits.F;
|
pub const F = arch_bits.F;
|
||||||
pub const Flock = arch_bits.Flock;
|
pub const Flock = arch_bits.Flock;
|
||||||
pub const HWCAP = arch_bits.HWCAP;
|
pub const HWCAP = arch_bits.HWCAP;
|
||||||
pub const LOCK = arch_bits.LOCK;
|
|
||||||
pub const MMAP2_UNIT = arch_bits.MMAP2_UNIT;
|
pub const MMAP2_UNIT = arch_bits.MMAP2_UNIT;
|
||||||
pub const REG = arch_bits.REG;
|
pub const REG = arch_bits.REG;
|
||||||
pub const SC = arch_bits.SC;
|
pub const SC = arch_bits.SC;
|
||||||
|
|||||||
@ -167,13 +167,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
pub const CGT_SYM = "__vdso_clock_gettime";
|
pub const CGT_SYM = "__vdso_clock_gettime";
|
||||||
pub const CGT_VER = "LINUX_2.6";
|
pub const CGT_VER = "LINUX_2.6";
|
||||||
|
|||||||
@ -149,13 +149,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
pub const CGT_SYM = "__kernel_clock_gettime";
|
pub const CGT_SYM = "__kernel_clock_gettime";
|
||||||
pub const CGT_VER = "LINUX_2.6.39";
|
pub const CGT_VER = "LINUX_2.6.39";
|
||||||
|
|||||||
@ -239,13 +239,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const MMAP2_UNIT = 4096;
|
pub const MMAP2_UNIT = 4096;
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
|
|||||||
@ -224,13 +224,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const MMAP2_UNIT = 4096;
|
pub const MMAP2_UNIT = 4096;
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
|
|||||||
@ -168,13 +168,6 @@ pub const F = struct {
|
|||||||
pub const UNLCK = 2;
|
pub const UNLCK = 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
pub const CGT_SYM = "__kernel_clock_gettime";
|
pub const CGT_SYM = "__kernel_clock_gettime";
|
||||||
pub const CGT_VER = "LINUX_2.6.15";
|
pub const CGT_VER = "LINUX_2.6.15";
|
||||||
|
|||||||
@ -168,13 +168,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
pub const CGT_SYM = "__kernel_clock_gettime";
|
pub const CGT_SYM = "__kernel_clock_gettime";
|
||||||
pub const CGT_VER = "LINUX_2.6.15";
|
pub const CGT_VER = "LINUX_2.6.15";
|
||||||
|
|||||||
@ -134,13 +134,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const UN = 8;
|
|
||||||
pub const NB = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const blksize_t = i32;
|
pub const blksize_t = i32;
|
||||||
pub const nlink_t = u32;
|
pub const nlink_t = u32;
|
||||||
pub const time_t = isize;
|
pub const time_t = isize;
|
||||||
|
|||||||
@ -218,13 +218,6 @@ pub const F = struct {
|
|||||||
pub const GETOWNER_UIDS = 17;
|
pub const GETOWNER_UIDS = 17;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const NB = 4;
|
|
||||||
pub const UN = 8;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
pub const CGT_SYM = "__vdso_clock_gettime";
|
pub const CGT_SYM = "__vdso_clock_gettime";
|
||||||
pub const CGT_VER = "LINUX_2.6";
|
pub const CGT_VER = "LINUX_2.6";
|
||||||
|
|||||||
@ -181,13 +181,6 @@ pub const F = struct {
|
|||||||
pub const UNLCK = 2;
|
pub const UNLCK = 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const NB = 4;
|
|
||||||
pub const UN = 8;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const MMAP2_UNIT = 4096;
|
pub const MMAP2_UNIT = 4096;
|
||||||
|
|
||||||
pub const VDSO = struct {
|
pub const VDSO = struct {
|
||||||
|
|||||||
@ -195,13 +195,6 @@ pub const REG = struct {
|
|||||||
pub const CR2 = 22;
|
pub const CR2 = 22;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const LOCK = struct {
|
|
||||||
pub const SH = 1;
|
|
||||||
pub const EX = 2;
|
|
||||||
pub const NB = 4;
|
|
||||||
pub const UN = 8;
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const Flock = extern struct {
|
pub const Flock = extern struct {
|
||||||
type: i16,
|
type: i16,
|
||||||
whence: i16,
|
whence: i16,
|
||||||
|
|||||||
@ -70,7 +70,6 @@ pub const IOV_MAX = system.IOV_MAX;
|
|||||||
pub const IPPROTO = system.IPPROTO;
|
pub const IPPROTO = system.IPPROTO;
|
||||||
pub const KERN = system.KERN;
|
pub const KERN = system.KERN;
|
||||||
pub const Kevent = system.Kevent;
|
pub const Kevent = system.Kevent;
|
||||||
pub const LOCK = system.LOCK;
|
|
||||||
pub const MADV = system.MADV;
|
pub const MADV = system.MADV;
|
||||||
pub const MAP = system.MAP;
|
pub const MAP = system.MAP;
|
||||||
pub const MAX_ADDR_LEN = system.MAX_ADDR_LEN;
|
pub const MAX_ADDR_LEN = system.MAX_ADDR_LEN;
|
||||||
@ -202,6 +201,13 @@ pub const winsize = extern struct {
|
|||||||
ypixel: u16,
|
ypixel: u16,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const LOCK = struct {
|
||||||
|
pub const SH = 1;
|
||||||
|
pub const EX = 2;
|
||||||
|
pub const NB = 4;
|
||||||
|
pub const UN = 8;
|
||||||
|
};
|
||||||
|
|
||||||
pub const LOG = struct {
|
pub const LOG = struct {
|
||||||
/// system is unusable
|
/// system is unusable
|
||||||
pub const EMERG = 0;
|
pub const EMERG = 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user