mirror of
https://github.com/ziglang/zig.git
synced 2025-12-16 03:03:09 +00:00
stage1, stage2: rename c_void to anyopaque (#10316)
zig fmt now replaces c_void with anyopaque to make updating code easy.
This commit is contained in:
parent
8468b544e8
commit
9f9f215305
@ -853,10 +853,10 @@ fn termColor(allocator: Allocator, input: []const u8) ![]u8 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const builtin_types = [_][]const u8{
|
const builtin_types = [_][]const u8{
|
||||||
"f16", "f32", "f64", "f128", "c_longdouble", "c_short",
|
"f16", "f32", "f64", "f128", "c_longdouble", "c_short",
|
||||||
"c_ushort", "c_int", "c_uint", "c_long", "c_ulong", "c_longlong",
|
"c_ushort", "c_int", "c_uint", "c_long", "c_ulong", "c_longlong",
|
||||||
"c_ulonglong", "c_char", "c_void", "void", "bool", "isize",
|
"c_ulonglong", "c_char", "anyopaque", "void", "bool", "isize",
|
||||||
"usize", "noreturn", "type", "anyerror", "comptime_int", "comptime_float",
|
"usize", "noreturn", "type", "anyerror", "comptime_int", "comptime_float",
|
||||||
};
|
};
|
||||||
|
|
||||||
fn isType(name: []const u8) bool {
|
fn isType(name: []const u8) bool {
|
||||||
|
|||||||
@ -720,11 +720,6 @@ pub fn main() void {
|
|||||||
<td><code class="c">long double</code></td>
|
<td><code class="c">long double</code></td>
|
||||||
<td>for ABI compatibility with C</td>
|
<td>for ABI compatibility with C</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<th scope="row">{#syntax#}c_void{#endsyntax#}</th>
|
|
||||||
<td><code class="c">void</code></td>
|
|
||||||
<td>for ABI compatibility with C</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">{#syntax#}f16{#endsyntax#}</th>
|
<th scope="row">{#syntax#}f16{#endsyntax#}</th>
|
||||||
@ -751,6 +746,11 @@ pub fn main() void {
|
|||||||
<td><code class="c">bool</code></td>
|
<td><code class="c">bool</code></td>
|
||||||
<td>{#syntax#}true{#endsyntax#} or {#syntax#}false{#endsyntax#}</td>
|
<td>{#syntax#}true{#endsyntax#} or {#syntax#}false{#endsyntax#}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{#syntax#}anyopaque{#endsyntax#}</th>
|
||||||
|
<td><code class="c">void</code></td>
|
||||||
|
<td>Used for type-erased pointers.</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">{#syntax#}void{#endsyntax#}</th>
|
<th scope="row">{#syntax#}void{#endsyntax#}</th>
|
||||||
<td>(none)</td>
|
<td>(none)</td>
|
||||||
|
|||||||
@ -344,7 +344,7 @@ const Completion = Atomic(enum(u8) {
|
|||||||
fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
|
fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
|
||||||
WindowsThreadImpl => std.os.windows.DWORD,
|
WindowsThreadImpl => std.os.windows.DWORD,
|
||||||
LinuxThreadImpl => u8,
|
LinuxThreadImpl => u8,
|
||||||
PosixThreadImpl => ?*c_void,
|
PosixThreadImpl => ?*anyopaque,
|
||||||
else => unreachable,
|
else => unreachable,
|
||||||
} {
|
} {
|
||||||
const default_value = if (Impl == PosixThreadImpl) null else 0;
|
const default_value = if (Impl == PosixThreadImpl) null else 0;
|
||||||
@ -499,7 +499,7 @@ const WindowsThreadImpl = struct {
|
|||||||
null,
|
null,
|
||||||
stack_size,
|
stack_size,
|
||||||
Instance.entryFn,
|
Instance.entryFn,
|
||||||
@ptrCast(*c_void, instance),
|
@ptrCast(*anyopaque, instance),
|
||||||
0,
|
0,
|
||||||
null,
|
null,
|
||||||
) orelse {
|
) orelse {
|
||||||
@ -621,7 +621,7 @@ const PosixThreadImpl = struct {
|
|||||||
const allocator = std.heap.c_allocator;
|
const allocator = std.heap.c_allocator;
|
||||||
|
|
||||||
const Instance = struct {
|
const Instance = struct {
|
||||||
fn entryFn(raw_arg: ?*c_void) callconv(.C) ?*c_void {
|
fn entryFn(raw_arg: ?*anyopaque) callconv(.C) ?*anyopaque {
|
||||||
// @alignCast() below doesn't support zero-sized-types (ZST)
|
// @alignCast() below doesn't support zero-sized-types (ZST)
|
||||||
if (@sizeOf(Args) < 1) {
|
if (@sizeOf(Args) < 1) {
|
||||||
return callFn(f, @as(Args, undefined));
|
return callFn(f, @as(Args, undefined));
|
||||||
@ -651,7 +651,7 @@ const PosixThreadImpl = struct {
|
|||||||
&handle,
|
&handle,
|
||||||
&attr,
|
&attr,
|
||||||
Instance.entryFn,
|
Instance.entryFn,
|
||||||
if (@sizeOf(Args) > 1) @ptrCast(*c_void, args_ptr) else undefined,
|
if (@sizeOf(Args) > 1) @ptrCast(*anyopaque, args_ptr) else undefined,
|
||||||
)) {
|
)) {
|
||||||
.SUCCESS => return Impl{ .handle = handle },
|
.SUCCESS => return Impl{ .handle = handle },
|
||||||
.AGAIN => return error.SystemResources,
|
.AGAIN => return error.SystemResources,
|
||||||
|
|||||||
@ -107,8 +107,8 @@ const WindowsFutex = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (windows.ntdll.RtlWaitOnAddress(
|
switch (windows.ntdll.RtlWaitOnAddress(
|
||||||
@ptrCast(?*const c_void, ptr),
|
@ptrCast(?*const anyopaque, ptr),
|
||||||
@ptrCast(?*const c_void, &expect),
|
@ptrCast(?*const anyopaque, &expect),
|
||||||
@sizeOf(@TypeOf(expect)),
|
@sizeOf(@TypeOf(expect)),
|
||||||
timeout_ptr,
|
timeout_ptr,
|
||||||
)) {
|
)) {
|
||||||
@ -119,7 +119,7 @@ const WindowsFutex = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn wake(ptr: *const Atomic(u32), num_waiters: u32) void {
|
fn wake(ptr: *const Atomic(u32), num_waiters: u32) void {
|
||||||
const address = @ptrCast(?*const c_void, ptr);
|
const address = @ptrCast(?*const anyopaque, ptr);
|
||||||
switch (num_waiters) {
|
switch (num_waiters) {
|
||||||
1 => windows.ntdll.RtlWakeAddressSingle(address),
|
1 => windows.ntdll.RtlWakeAddressSingle(address),
|
||||||
else => windows.ntdll.RtlWakeAddressAll(address),
|
else => windows.ntdll.RtlWakeAddressAll(address),
|
||||||
@ -189,7 +189,7 @@ const DarwinFutex = struct {
|
|||||||
assert(timeout_value != 0);
|
assert(timeout_value != 0);
|
||||||
timeout_ns = timeout_value;
|
timeout_ns = timeout_value;
|
||||||
}
|
}
|
||||||
const addr = @ptrCast(*const c_void, ptr);
|
const addr = @ptrCast(*const anyopaque, ptr);
|
||||||
const flags = darwin.UL_COMPARE_AND_WAIT | darwin.ULF_NO_ERRNO;
|
const flags = darwin.UL_COMPARE_AND_WAIT | darwin.ULF_NO_ERRNO;
|
||||||
// If we're using `__ulock_wait` and `timeout` is too big to fit inside a `u32` count of
|
// If we're using `__ulock_wait` and `timeout` is too big to fit inside a `u32` count of
|
||||||
// micro-seconds (around 70min), we'll request a shorter timeout. This is fine (users
|
// micro-seconds (around 70min), we'll request a shorter timeout. This is fine (users
|
||||||
@ -228,7 +228,7 @@ const DarwinFutex = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const addr = @ptrCast(*const c_void, ptr);
|
const addr = @ptrCast(*const anyopaque, ptr);
|
||||||
const status = darwin.__ulock_wake(flags, addr, 0);
|
const status = darwin.__ulock_wake(flags, addr, 0);
|
||||||
|
|
||||||
if (status >= 0) return;
|
if (status >= 0) return;
|
||||||
|
|||||||
@ -229,7 +229,7 @@ pub const AtomicEvent = struct {
|
|||||||
pub const WindowsFutex = struct {
|
pub const WindowsFutex = struct {
|
||||||
pub fn wake(waiters: *u32, wake_count: u32) void {
|
pub fn wake(waiters: *u32, wake_count: u32) void {
|
||||||
const handle = getEventHandle() orelse return SpinFutex.wake(waiters, wake_count);
|
const handle = getEventHandle() orelse return SpinFutex.wake(waiters, wake_count);
|
||||||
const key = @ptrCast(*const c_void, waiters);
|
const key = @ptrCast(*const anyopaque, waiters);
|
||||||
|
|
||||||
var waiting = wake_count;
|
var waiting = wake_count;
|
||||||
while (waiting != 0) : (waiting -= 1) {
|
while (waiting != 0) : (waiting -= 1) {
|
||||||
@ -240,7 +240,7 @@ pub const AtomicEvent = struct {
|
|||||||
|
|
||||||
pub fn wait(waiters: *u32, timeout: ?u64) !void {
|
pub fn wait(waiters: *u32, timeout: ?u64) !void {
|
||||||
const handle = getEventHandle() orelse return SpinFutex.wait(waiters, timeout);
|
const handle = getEventHandle() orelse return SpinFutex.wait(waiters, timeout);
|
||||||
const key = @ptrCast(*const c_void, waiters);
|
const key = @ptrCast(*const anyopaque, waiters);
|
||||||
|
|
||||||
// NT uses timeouts in units of 100ns with negative value being relative
|
// NT uses timeouts in units of 100ns with negative value being relative
|
||||||
var timeout_ptr: ?*windows.LARGE_INTEGER = null;
|
var timeout_ptr: ?*windows.LARGE_INTEGER = null;
|
||||||
|
|||||||
@ -121,9 +121,9 @@ pub extern "c" fn writev(fd: c_int, iov: [*]const iovec_const, iovcnt: c_uint) i
|
|||||||
pub extern "c" fn pwritev(fd: c_int, iov: [*]const iovec_const, iovcnt: c_uint, offset: c.off_t) isize;
|
pub extern "c" fn pwritev(fd: c_int, iov: [*]const iovec_const, iovcnt: c_uint, offset: c.off_t) isize;
|
||||||
pub extern "c" fn write(fd: c.fd_t, buf: [*]const u8, nbyte: usize) isize;
|
pub extern "c" fn write(fd: c.fd_t, buf: [*]const u8, nbyte: usize) isize;
|
||||||
pub extern "c" fn pwrite(fd: c.fd_t, buf: [*]const u8, nbyte: usize, offset: c.off_t) isize;
|
pub extern "c" fn pwrite(fd: c.fd_t, buf: [*]const u8, nbyte: usize, offset: c.off_t) isize;
|
||||||
pub extern "c" fn mmap(addr: ?*align(page_size) c_void, len: usize, prot: c_uint, flags: c_uint, fd: c.fd_t, offset: c.off_t) *c_void;
|
pub extern "c" fn mmap(addr: ?*align(page_size) anyopaque, len: usize, prot: c_uint, flags: c_uint, fd: c.fd_t, offset: c.off_t) *anyopaque;
|
||||||
pub extern "c" fn munmap(addr: *align(page_size) const c_void, len: usize) c_int;
|
pub extern "c" fn munmap(addr: *align(page_size) const anyopaque, len: usize) c_int;
|
||||||
pub extern "c" fn mprotect(addr: *align(page_size) c_void, len: usize, prot: c_uint) c_int;
|
pub extern "c" fn mprotect(addr: *align(page_size) anyopaque, len: usize, prot: c_uint) c_int;
|
||||||
pub extern "c" fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: c_int) c_int;
|
pub extern "c" fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: c_int) c_int;
|
||||||
pub extern "c" fn linkat(oldfd: c.fd_t, oldpath: [*:0]const u8, newfd: c.fd_t, newpath: [*:0]const u8, flags: c_int) c_int;
|
pub extern "c" fn linkat(oldfd: c.fd_t, oldpath: [*:0]const u8, newfd: c.fd_t, newpath: [*:0]const u8, flags: c_int) c_int;
|
||||||
pub extern "c" fn unlink(path: [*:0]const u8) c_int;
|
pub extern "c" fn unlink(path: [*:0]const u8) c_int;
|
||||||
@ -152,8 +152,8 @@ pub extern "c" fn fchown(fd: c.fd_t, owner: c.uid_t, group: c.gid_t) c_int;
|
|||||||
|
|
||||||
pub extern "c" fn rmdir(path: [*:0]const u8) c_int;
|
pub extern "c" fn rmdir(path: [*:0]const u8) c_int;
|
||||||
pub extern "c" fn getenv(name: [*:0]const u8) ?[*:0]u8;
|
pub extern "c" fn getenv(name: [*:0]const u8) ?[*:0]u8;
|
||||||
pub extern "c" fn sysctl(name: [*]const c_int, namelen: c_uint, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int;
|
pub extern "c" fn sysctl(name: [*]const c_int, namelen: c_uint, oldp: ?*anyopaque, oldlenp: ?*usize, newp: ?*anyopaque, newlen: usize) c_int;
|
||||||
pub extern "c" fn sysctlbyname(name: [*:0]const u8, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int;
|
pub extern "c" fn sysctlbyname(name: [*:0]const u8, oldp: ?*anyopaque, oldlenp: ?*usize, newp: ?*anyopaque, newlen: usize) c_int;
|
||||||
pub extern "c" fn sysctlnametomib(name: [*:0]const u8, mibp: ?*c_int, sizep: ?*usize) c_int;
|
pub extern "c" fn sysctlnametomib(name: [*:0]const u8, mibp: ?*c_int, sizep: ?*usize) c_int;
|
||||||
pub extern "c" fn tcgetattr(fd: c.fd_t, termios_p: *c.termios) c_int;
|
pub extern "c" fn tcgetattr(fd: c.fd_t, termios_p: *c.termios) c_int;
|
||||||
pub extern "c" fn tcsetattr(fd: c.fd_t, optional_action: c.TCSA, termios_p: *const c.termios) c_int;
|
pub extern "c" fn tcsetattr(fd: c.fd_t, optional_action: c.TCSA, termios_p: *const c.termios) c_int;
|
||||||
@ -172,12 +172,12 @@ pub extern "c" fn getpeername(sockfd: c.fd_t, noalias addr: *c.sockaddr, noalias
|
|||||||
pub extern "c" fn connect(sockfd: c.fd_t, sock_addr: *const c.sockaddr, addrlen: c.socklen_t) c_int;
|
pub extern "c" fn connect(sockfd: c.fd_t, sock_addr: *const c.sockaddr, addrlen: c.socklen_t) c_int;
|
||||||
pub extern "c" fn accept(sockfd: c.fd_t, noalias addr: ?*c.sockaddr, noalias addrlen: ?*c.socklen_t) c_int;
|
pub extern "c" fn accept(sockfd: c.fd_t, noalias addr: ?*c.sockaddr, noalias addrlen: ?*c.socklen_t) c_int;
|
||||||
pub extern "c" fn accept4(sockfd: c.fd_t, noalias addr: ?*c.sockaddr, noalias addrlen: ?*c.socklen_t, flags: c_uint) c_int;
|
pub extern "c" fn accept4(sockfd: c.fd_t, noalias addr: ?*c.sockaddr, noalias addrlen: ?*c.socklen_t, flags: c_uint) c_int;
|
||||||
pub extern "c" fn getsockopt(sockfd: c.fd_t, level: u32, optname: u32, noalias optval: ?*c_void, noalias optlen: *c.socklen_t) c_int;
|
pub extern "c" fn getsockopt(sockfd: c.fd_t, level: u32, optname: u32, noalias optval: ?*anyopaque, noalias optlen: *c.socklen_t) c_int;
|
||||||
pub extern "c" fn setsockopt(sockfd: c.fd_t, level: u32, optname: u32, optval: ?*const c_void, optlen: c.socklen_t) c_int;
|
pub extern "c" fn setsockopt(sockfd: c.fd_t, level: u32, optname: u32, optval: ?*const anyopaque, optlen: c.socklen_t) c_int;
|
||||||
pub extern "c" fn send(sockfd: c.fd_t, buf: *const c_void, len: usize, flags: u32) isize;
|
pub extern "c" fn send(sockfd: c.fd_t, buf: *const anyopaque, len: usize, flags: u32) isize;
|
||||||
pub extern "c" fn sendto(
|
pub extern "c" fn sendto(
|
||||||
sockfd: c.fd_t,
|
sockfd: c.fd_t,
|
||||||
buf: *const c_void,
|
buf: *const anyopaque,
|
||||||
len: usize,
|
len: usize,
|
||||||
flags: u32,
|
flags: u32,
|
||||||
dest_addr: ?*const c.sockaddr,
|
dest_addr: ?*const c.sockaddr,
|
||||||
@ -185,10 +185,10 @@ pub extern "c" fn sendto(
|
|||||||
) isize;
|
) isize;
|
||||||
pub extern "c" fn sendmsg(sockfd: c.fd_t, msg: *const std.x.os.Socket.Message, flags: c_int) isize;
|
pub extern "c" fn sendmsg(sockfd: c.fd_t, msg: *const std.x.os.Socket.Message, flags: c_int) isize;
|
||||||
|
|
||||||
pub extern "c" fn recv(sockfd: c.fd_t, arg1: ?*c_void, arg2: usize, arg3: c_int) isize;
|
pub extern "c" fn recv(sockfd: c.fd_t, arg1: ?*anyopaque, arg2: usize, arg3: c_int) isize;
|
||||||
pub extern "c" fn recvfrom(
|
pub extern "c" fn recvfrom(
|
||||||
sockfd: c.fd_t,
|
sockfd: c.fd_t,
|
||||||
noalias buf: *c_void,
|
noalias buf: *anyopaque,
|
||||||
len: usize,
|
len: usize,
|
||||||
flags: u32,
|
flags: u32,
|
||||||
noalias src_addr: ?*c.sockaddr,
|
noalias src_addr: ?*c.sockaddr,
|
||||||
@ -208,9 +208,9 @@ pub extern "c" fn setregid(rgid: c.gid_t, egid: c.gid_t) c_int;
|
|||||||
pub extern "c" fn setresuid(ruid: c.uid_t, euid: c.uid_t, suid: c.uid_t) c_int;
|
pub extern "c" fn setresuid(ruid: c.uid_t, euid: c.uid_t, suid: c.uid_t) c_int;
|
||||||
pub extern "c" fn setresgid(rgid: c.gid_t, egid: c.gid_t, sgid: c.gid_t) c_int;
|
pub extern "c" fn setresgid(rgid: c.gid_t, egid: c.gid_t, sgid: c.gid_t) c_int;
|
||||||
|
|
||||||
pub extern "c" fn malloc(usize) ?*c_void;
|
pub extern "c" fn malloc(usize) ?*anyopaque;
|
||||||
pub extern "c" fn realloc(?*c_void, usize) ?*c_void;
|
pub extern "c" fn realloc(?*anyopaque, usize) ?*anyopaque;
|
||||||
pub extern "c" fn free(?*c_void) void;
|
pub extern "c" fn free(?*anyopaque) void;
|
||||||
|
|
||||||
pub extern "c" fn futimes(fd: c.fd_t, times: *[2]c.timeval) c_int;
|
pub extern "c" fn futimes(fd: c.fd_t, times: *[2]c.timeval) c_int;
|
||||||
pub extern "c" fn utimes(path: [*:0]const u8, times: *[2]c.timeval) c_int;
|
pub extern "c" fn utimes(path: [*:0]const u8, times: *[2]c.timeval) c_int;
|
||||||
@ -218,24 +218,24 @@ pub extern "c" fn utimes(path: [*:0]const u8, times: *[2]c.timeval) c_int;
|
|||||||
pub extern "c" fn utimensat(dirfd: c.fd_t, pathname: [*:0]const u8, times: *[2]c.timespec, flags: u32) c_int;
|
pub extern "c" fn utimensat(dirfd: c.fd_t, pathname: [*:0]const u8, times: *[2]c.timespec, flags: u32) c_int;
|
||||||
pub extern "c" fn futimens(fd: c.fd_t, times: *const [2]c.timespec) c_int;
|
pub extern "c" fn futimens(fd: c.fd_t, times: *const [2]c.timespec) c_int;
|
||||||
|
|
||||||
pub extern "c" fn pthread_create(noalias newthread: *pthread_t, noalias attr: ?*const c.pthread_attr_t, start_routine: fn (?*c_void) callconv(.C) ?*c_void, noalias arg: ?*c_void) c.E;
|
pub extern "c" fn pthread_create(noalias newthread: *pthread_t, noalias attr: ?*const c.pthread_attr_t, start_routine: fn (?*anyopaque) callconv(.C) ?*anyopaque, noalias arg: ?*anyopaque) c.E;
|
||||||
pub extern "c" fn pthread_attr_init(attr: *c.pthread_attr_t) c.E;
|
pub extern "c" fn pthread_attr_init(attr: *c.pthread_attr_t) c.E;
|
||||||
pub extern "c" fn pthread_attr_setstack(attr: *c.pthread_attr_t, stackaddr: *c_void, stacksize: usize) c.E;
|
pub extern "c" fn pthread_attr_setstack(attr: *c.pthread_attr_t, stackaddr: *anyopaque, stacksize: usize) c.E;
|
||||||
pub extern "c" fn pthread_attr_setstacksize(attr: *c.pthread_attr_t, stacksize: usize) c.E;
|
pub extern "c" fn pthread_attr_setstacksize(attr: *c.pthread_attr_t, stacksize: usize) c.E;
|
||||||
pub extern "c" fn pthread_attr_setguardsize(attr: *c.pthread_attr_t, guardsize: usize) c.E;
|
pub extern "c" fn pthread_attr_setguardsize(attr: *c.pthread_attr_t, guardsize: usize) c.E;
|
||||||
pub extern "c" fn pthread_attr_destroy(attr: *c.pthread_attr_t) c.E;
|
pub extern "c" fn pthread_attr_destroy(attr: *c.pthread_attr_t) c.E;
|
||||||
pub extern "c" fn pthread_self() pthread_t;
|
pub extern "c" fn pthread_self() pthread_t;
|
||||||
pub extern "c" fn pthread_join(thread: pthread_t, arg_return: ?*?*c_void) c.E;
|
pub extern "c" fn pthread_join(thread: pthread_t, arg_return: ?*?*anyopaque) c.E;
|
||||||
pub extern "c" fn pthread_detach(thread: pthread_t) c.E;
|
pub extern "c" fn pthread_detach(thread: pthread_t) c.E;
|
||||||
pub extern "c" fn pthread_atfork(
|
pub extern "c" fn pthread_atfork(
|
||||||
prepare: ?fn () callconv(.C) void,
|
prepare: ?fn () callconv(.C) void,
|
||||||
parent: ?fn () callconv(.C) void,
|
parent: ?fn () callconv(.C) void,
|
||||||
child: ?fn () callconv(.C) void,
|
child: ?fn () callconv(.C) void,
|
||||||
) c_int;
|
) c_int;
|
||||||
pub extern "c" fn pthread_key_create(key: *c.pthread_key_t, destructor: ?fn (value: *c_void) callconv(.C) void) c.E;
|
pub extern "c" fn pthread_key_create(key: *c.pthread_key_t, destructor: ?fn (value: *anyopaque) callconv(.C) void) c.E;
|
||||||
pub extern "c" fn pthread_key_delete(key: c.pthread_key_t) c.E;
|
pub extern "c" fn pthread_key_delete(key: c.pthread_key_t) c.E;
|
||||||
pub extern "c" fn pthread_getspecific(key: c.pthread_key_t) ?*c_void;
|
pub extern "c" fn pthread_getspecific(key: c.pthread_key_t) ?*anyopaque;
|
||||||
pub extern "c" fn pthread_setspecific(key: c.pthread_key_t, value: ?*c_void) c_int;
|
pub extern "c" fn pthread_setspecific(key: c.pthread_key_t, value: ?*anyopaque) c_int;
|
||||||
pub extern "c" fn sem_init(sem: *c.sem_t, pshared: c_int, value: c_uint) c_int;
|
pub extern "c" fn sem_init(sem: *c.sem_t, pshared: c_int, value: c_uint) c_int;
|
||||||
pub extern "c" fn sem_destroy(sem: *c.sem_t) c_int;
|
pub extern "c" fn sem_destroy(sem: *c.sem_t) c_int;
|
||||||
pub extern "c" fn sem_post(sem: *c.sem_t) c_int;
|
pub extern "c" fn sem_post(sem: *c.sem_t) c_int;
|
||||||
@ -260,16 +260,16 @@ pub extern "c" fn port_associate(
|
|||||||
source: u32,
|
source: u32,
|
||||||
object: usize,
|
object: usize,
|
||||||
events: u32,
|
events: u32,
|
||||||
user_var: ?*c_void,
|
user_var: ?*anyopaque,
|
||||||
) c_int;
|
) c_int;
|
||||||
pub extern "c" fn port_dissociate(port: c.port_t, source: u32, object: usize) c_int;
|
pub extern "c" fn port_dissociate(port: c.port_t, source: u32, object: usize) c_int;
|
||||||
pub extern "c" fn port_send(port: c.port_t, events: u32, user_var: ?*c_void) c_int;
|
pub extern "c" fn port_send(port: c.port_t, events: u32, user_var: ?*anyopaque) c_int;
|
||||||
pub extern "c" fn port_sendn(
|
pub extern "c" fn port_sendn(
|
||||||
ports: [*]c.port_t,
|
ports: [*]c.port_t,
|
||||||
errors: []u32,
|
errors: []u32,
|
||||||
num_ports: u32,
|
num_ports: u32,
|
||||||
events: u32,
|
events: u32,
|
||||||
user_var: ?*c_void,
|
user_var: ?*anyopaque,
|
||||||
) c_int;
|
) c_int;
|
||||||
pub extern "c" fn port_get(port: c.port_t, event: *c.port_event, timeout: ?*c.timespec) c_int;
|
pub extern "c" fn port_get(port: c.port_t, event: *c.port_event, timeout: ?*c.timespec) c_int;
|
||||||
pub extern "c" fn port_getn(
|
pub extern "c" fn port_getn(
|
||||||
@ -279,7 +279,7 @@ pub extern "c" fn port_getn(
|
|||||||
events_retrieved: *u32,
|
events_retrieved: *u32,
|
||||||
timeout: ?*c.timespec,
|
timeout: ?*c.timespec,
|
||||||
) c_int;
|
) c_int;
|
||||||
pub extern "c" fn port_alert(port: c.port_t, flags: u32, events: u32, user_var: ?*c_void) c_int;
|
pub extern "c" fn port_alert(port: c.port_t, flags: u32, events: u32, user_var: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub extern "c" fn getaddrinfo(
|
pub extern "c" fn getaddrinfo(
|
||||||
noalias node: ?[*:0]const u8,
|
noalias node: ?[*:0]const u8,
|
||||||
@ -336,9 +336,9 @@ pub extern "c" fn pthread_rwlock_unlock(rwl: *c.pthread_rwlock_t) callconv(.C) c
|
|||||||
pub const pthread_t = *opaque {};
|
pub const pthread_t = *opaque {};
|
||||||
pub const FILE = opaque {};
|
pub const FILE = opaque {};
|
||||||
|
|
||||||
pub extern "c" fn dlopen(path: [*:0]const u8, mode: c_int) ?*c_void;
|
pub extern "c" fn dlopen(path: [*:0]const u8, mode: c_int) ?*anyopaque;
|
||||||
pub extern "c" fn dlclose(handle: *c_void) c_int;
|
pub extern "c" fn dlclose(handle: *anyopaque) c_int;
|
||||||
pub extern "c" fn dlsym(handle: ?*c_void, symbol: [*:0]const u8) ?*c_void;
|
pub extern "c" fn dlsym(handle: ?*anyopaque, symbol: [*:0]const u8) ?*anyopaque;
|
||||||
|
|
||||||
pub extern "c" fn sync() void;
|
pub extern "c" fn sync() void;
|
||||||
pub extern "c" fn syncfs(fd: c_int) c_int;
|
pub extern "c" fn syncfs(fd: c_int) c_int;
|
||||||
@ -350,7 +350,7 @@ pub extern "c" fn prctl(option: c_int, ...) c_int;
|
|||||||
pub extern "c" fn getrlimit(resource: c.rlimit_resource, rlim: *c.rlimit) c_int;
|
pub extern "c" fn getrlimit(resource: c.rlimit_resource, rlim: *c.rlimit) c_int;
|
||||||
pub extern "c" fn setrlimit(resource: c.rlimit_resource, rlim: *const c.rlimit) c_int;
|
pub extern "c" fn setrlimit(resource: c.rlimit_resource, rlim: *const c.rlimit) c_int;
|
||||||
|
|
||||||
pub extern "c" fn fmemopen(noalias buf: ?*c_void, size: usize, noalias mode: [*:0]const u8) ?*FILE;
|
pub extern "c" fn fmemopen(noalias buf: ?*anyopaque, size: usize, noalias mode: [*:0]const u8) ?*FILE;
|
||||||
|
|
||||||
pub extern "c" fn syslog(priority: c_int, message: [*:0]const u8, ...) void;
|
pub extern "c" fn syslog(priority: c_int, message: [*:0]const u8, ...) void;
|
||||||
pub extern "c" fn openlog(ident: [*:0]const u8, logopt: c_int, facility: c_int) void;
|
pub extern "c" fn openlog(ident: [*:0]const u8, logopt: c_int, facility: c_int) void;
|
||||||
|
|||||||
@ -46,8 +46,8 @@ pub const fstatat = if (native_arch == .aarch64) private.fstatat else private.@"
|
|||||||
pub extern "c" fn mach_absolute_time() u64;
|
pub extern "c" fn mach_absolute_time() u64;
|
||||||
pub extern "c" fn mach_timebase_info(tinfo: ?*mach_timebase_info_data) void;
|
pub extern "c" fn mach_timebase_info(tinfo: ?*mach_timebase_info_data) void;
|
||||||
|
|
||||||
pub extern "c" fn malloc_size(?*const c_void) usize;
|
pub extern "c" fn malloc_size(?*const anyopaque) usize;
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
|
|
||||||
pub extern "c" fn kevent64(
|
pub extern "c" fn kevent64(
|
||||||
kq: c_int,
|
kq: c_int,
|
||||||
@ -196,7 +196,7 @@ pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len
|
|||||||
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
||||||
|
|
||||||
// Grand Central Dispatch is exposed by libSystem.
|
// Grand Central Dispatch is exposed by libSystem.
|
||||||
pub extern "c" fn dispatch_release(object: *c_void) void;
|
pub extern "c" fn dispatch_release(object: *anyopaque) void;
|
||||||
|
|
||||||
pub const dispatch_semaphore_t = *opaque {};
|
pub const dispatch_semaphore_t = *opaque {};
|
||||||
pub extern "c" fn dispatch_semaphore_create(value: isize) ?dispatch_semaphore_t;
|
pub extern "c" fn dispatch_semaphore_create(value: isize) ?dispatch_semaphore_t;
|
||||||
@ -209,10 +209,10 @@ pub const DISPATCH_TIME_FOREVER = ~@as(dispatch_time_t, 0);
|
|||||||
pub extern "c" fn dispatch_time(when: dispatch_time_t, delta: i64) dispatch_time_t;
|
pub extern "c" fn dispatch_time(when: dispatch_time_t, delta: i64) dispatch_time_t;
|
||||||
|
|
||||||
const dispatch_once_t = usize;
|
const dispatch_once_t = usize;
|
||||||
const dispatch_function_t = fn (?*c_void) callconv(.C) void;
|
const dispatch_function_t = fn (?*anyopaque) callconv(.C) void;
|
||||||
pub extern fn dispatch_once_f(
|
pub extern fn dispatch_once_f(
|
||||||
predicate: *dispatch_once_t,
|
predicate: *dispatch_once_t,
|
||||||
context: ?*c_void,
|
context: ?*anyopaque,
|
||||||
function: dispatch_function_t,
|
function: dispatch_function_t,
|
||||||
) void;
|
) void;
|
||||||
|
|
||||||
@ -243,9 +243,9 @@ pub const UL_COMPARE_AND_WAIT64 = 5;
|
|||||||
pub const UL_COMPARE_AND_WAIT64_SHARED = 6;
|
pub const UL_COMPARE_AND_WAIT64_SHARED = 6;
|
||||||
pub const ULF_WAIT_ADAPTIVE_SPIN = 0x40000;
|
pub const ULF_WAIT_ADAPTIVE_SPIN = 0x40000;
|
||||||
|
|
||||||
pub extern "c" fn __ulock_wait2(op: u32, addr: ?*const c_void, val: u64, timeout_ns: u64, val2: u64) c_int;
|
pub extern "c" fn __ulock_wait2(op: u32, addr: ?*const anyopaque, val: u64, timeout_ns: u64, val2: u64) c_int;
|
||||||
pub extern "c" fn __ulock_wait(op: u32, addr: ?*const c_void, val: u64, timeout_us: u32) c_int;
|
pub extern "c" fn __ulock_wait(op: u32, addr: ?*const anyopaque, val: u64, timeout_us: u32) c_int;
|
||||||
pub extern "c" fn __ulock_wake(op: u32, addr: ?*const c_void, val: u64) c_int;
|
pub extern "c" fn __ulock_wake(op: u32, addr: ?*const anyopaque, val: u64) c_int;
|
||||||
|
|
||||||
pub const OS_UNFAIR_LOCK_INIT = os_unfair_lock{};
|
pub const OS_UNFAIR_LOCK_INIT = os_unfair_lock{};
|
||||||
pub const os_unfair_lock_t = *os_unfair_lock;
|
pub const os_unfair_lock_t = *os_unfair_lock;
|
||||||
@ -483,10 +483,10 @@ pub const siginfo_t = extern struct {
|
|||||||
pid: pid_t,
|
pid: pid_t,
|
||||||
uid: uid_t,
|
uid: uid_t,
|
||||||
status: c_int,
|
status: c_int,
|
||||||
addr: *c_void,
|
addr: *anyopaque,
|
||||||
value: extern union {
|
value: extern union {
|
||||||
int: c_int,
|
int: c_int,
|
||||||
ptr: *c_void,
|
ptr: *anyopaque,
|
||||||
},
|
},
|
||||||
si_band: c_long,
|
si_band: c_long,
|
||||||
_pad: [7]c_ulong,
|
_pad: [7]c_ulong,
|
||||||
@ -495,7 +495,7 @@ pub const siginfo_t = extern struct {
|
|||||||
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name.
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name.
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
handler: extern union {
|
handler: extern union {
|
||||||
handler: ?handler_fn,
|
handler: ?handler_fn,
|
||||||
@ -611,7 +611,7 @@ pub const MAP = struct {
|
|||||||
pub const NOCACHE = 0x0400;
|
pub const NOCACHE = 0x0400;
|
||||||
/// don't reserve needed swap area
|
/// don't reserve needed swap area
|
||||||
pub const NORESERVE = 0x0040;
|
pub const NORESERVE = 0x0040;
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const SA = struct {
|
pub const SA = struct {
|
||||||
@ -1537,10 +1537,10 @@ pub const RTLD = struct {
|
|||||||
pub const NODELETE = 0x80;
|
pub const NODELETE = 0x80;
|
||||||
pub const FIRST = 0x100;
|
pub const FIRST = 0x100;
|
||||||
|
|
||||||
pub const NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
|
pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1)));
|
||||||
pub const DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
|
pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2)));
|
||||||
pub const SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
|
pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3)));
|
||||||
pub const MAIN_ONLY = @intToPtr(*c_void, @bitCast(usize, @as(isize, -5)));
|
pub const MAIN_ONLY = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -5)));
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const F = struct {
|
pub const F = struct {
|
||||||
|
|||||||
@ -12,18 +12,18 @@ pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
|||||||
pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) isize;
|
pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) isize;
|
||||||
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
|
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
|
||||||
|
|
||||||
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int;
|
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
||||||
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int;
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub extern "c" fn lwp_gettid() c_int;
|
pub extern "c" fn lwp_gettid() c_int;
|
||||||
|
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
|
|
||||||
pub const pthread_mutex_t = extern struct {
|
pub const pthread_mutex_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_cond_t = extern struct {
|
pub const pthread_cond_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const pthread_attr_t = extern struct { // copied from freebsd
|
pub const pthread_attr_t = extern struct { // copied from freebsd
|
||||||
@ -165,7 +165,7 @@ pub const PROT = struct {
|
|||||||
|
|
||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
pub const FILE = 0;
|
pub const FILE = 0;
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
pub const ANONYMOUS = ANON;
|
pub const ANONYMOUS = ANON;
|
||||||
pub const COPY = PRIVATE;
|
pub const COPY = PRIVATE;
|
||||||
pub const SHARED = 1;
|
pub const SHARED = 1;
|
||||||
@ -648,7 +648,7 @@ pub const siginfo_t = extern struct {
|
|||||||
pid: c_int,
|
pid: c_int,
|
||||||
uid: uid_t,
|
uid: uid_t,
|
||||||
status: c_int,
|
status: c_int,
|
||||||
addr: ?*c_void,
|
addr: ?*anyopaque,
|
||||||
value: sigval,
|
value: sigval,
|
||||||
band: c_long,
|
band: c_long,
|
||||||
__spare__: [7]c_int,
|
__spare__: [7]c_int,
|
||||||
@ -656,7 +656,7 @@ pub const siginfo_t = extern struct {
|
|||||||
|
|
||||||
pub const sigval = extern union {
|
pub const sigval = extern union {
|
||||||
sival_int: c_int,
|
sival_int: c_int,
|
||||||
sival_ptr: ?*c_void,
|
sival_ptr: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const _SIG_WORDS = 4;
|
pub const _SIG_WORDS = 4;
|
||||||
@ -671,7 +671,7 @@ pub const sig_atomic_t = c_int;
|
|||||||
|
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
/// signal handler
|
/// signal handler
|
||||||
handler: extern union {
|
handler: extern union {
|
||||||
@ -847,10 +847,10 @@ pub const RTLD = struct {
|
|||||||
pub const NODELETE = 0x01000;
|
pub const NODELETE = 0x01000;
|
||||||
pub const NOLOAD = 0x02000;
|
pub const NOLOAD = 0x02000;
|
||||||
|
|
||||||
pub const NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
|
pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1)));
|
||||||
pub const DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
|
pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2)));
|
||||||
pub const SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
|
pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3)));
|
||||||
pub const ALL = @intToPtr(*c_void, @bitCast(usize, @as(isize, -4)));
|
pub const ALL = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -4)));
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const dl_phdr_info = extern struct {
|
pub const dl_phdr_info = extern struct {
|
||||||
@ -865,11 +865,11 @@ pub const cmsghdr = extern struct {
|
|||||||
cmsg_type: c_int,
|
cmsg_type: c_int,
|
||||||
};
|
};
|
||||||
pub const msghdr = extern struct {
|
pub const msghdr = extern struct {
|
||||||
msg_name: ?*c_void,
|
msg_name: ?*anyopaque,
|
||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*c]iovec,
|
msg_iov: [*c]iovec,
|
||||||
msg_iovlen: c_int,
|
msg_iovlen: c_int,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
msg_flags: c_int,
|
msg_flags: c_int,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -16,8 +16,8 @@ pub extern "c" fn pthread_set_name_np(thread: std.c.pthread_t, name: [*:0]const
|
|||||||
pub extern "c" fn pthread_get_name_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) void;
|
pub extern "c" fn pthread_get_name_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) void;
|
||||||
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
|
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
|
||||||
|
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
pub extern "c" fn malloc_usable_size(?*const c_void) usize;
|
pub extern "c" fn malloc_usable_size(?*const anyopaque) usize;
|
||||||
|
|
||||||
pub const sf_hdtr = extern struct {
|
pub const sf_hdtr = extern struct {
|
||||||
headers: [*]const iovec_const,
|
headers: [*]const iovec_const,
|
||||||
@ -35,17 +35,17 @@ pub extern "c" fn sendfile(
|
|||||||
flags: u32,
|
flags: u32,
|
||||||
) c_int;
|
) c_int;
|
||||||
|
|
||||||
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int;
|
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
||||||
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int;
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub const pthread_mutex_t = extern struct {
|
pub const pthread_mutex_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_cond_t = extern struct {
|
pub const pthread_cond_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_rwlock_t = extern struct {
|
pub const pthread_rwlock_t = extern struct {
|
||||||
ptr: ?*c_void = null,
|
ptr: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const pthread_attr_t = extern struct {
|
pub const pthread_attr_t = extern struct {
|
||||||
@ -216,7 +216,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -239,7 +239,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -393,7 +393,7 @@ pub const CLOCK = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
pub const SHARED = 0x0001;
|
pub const SHARED = 0x0001;
|
||||||
pub const PRIVATE = 0x0002;
|
pub const PRIVATE = 0x0002;
|
||||||
pub const FIXED = 0x0010;
|
pub const FIXED = 0x0010;
|
||||||
@ -515,7 +515,7 @@ pub const SIG = struct {
|
|||||||
};
|
};
|
||||||
pub const sigval = extern union {
|
pub const sigval = extern union {
|
||||||
int: c_int,
|
int: c_int,
|
||||||
ptr: ?*c_void,
|
ptr: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const sigset_t = extern struct {
|
pub const sigset_t = extern struct {
|
||||||
@ -949,7 +949,7 @@ const NSIG = 32;
|
|||||||
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
/// signal handler
|
/// signal handler
|
||||||
handler: extern union {
|
handler: extern union {
|
||||||
@ -971,7 +971,7 @@ pub const siginfo_t = extern struct {
|
|||||||
pid: pid_t,
|
pid: pid_t,
|
||||||
uid: uid_t,
|
uid: uid_t,
|
||||||
status: c_int,
|
status: c_int,
|
||||||
addr: ?*c_void,
|
addr: ?*anyopaque,
|
||||||
value: sigval,
|
value: sigval,
|
||||||
reason: extern union {
|
reason: extern union {
|
||||||
fault: extern struct {
|
fault: extern struct {
|
||||||
|
|||||||
@ -10,7 +10,7 @@ pub const _errno = _errnop;
|
|||||||
|
|
||||||
pub extern "c" fn find_directory(which: c_int, volume: i32, createIt: bool, path_ptr: [*]u8, length: i32) u64;
|
pub extern "c" fn find_directory(which: c_int, volume: i32, createIt: bool, path_ptr: [*]u8, length: i32) u64;
|
||||||
|
|
||||||
pub extern "c" fn find_thread(thread_name: ?*c_void) i32;
|
pub extern "c" fn find_thread(thread_name: ?*anyopaque) i32;
|
||||||
|
|
||||||
pub extern "c" fn get_system_info(system_info: *system_info) usize;
|
pub extern "c" fn get_system_info(system_info: *system_info) usize;
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ pub const pthread_attr_t = extern struct {
|
|||||||
__sched_priority: i32,
|
__sched_priority: i32,
|
||||||
__stack_size: i32,
|
__stack_size: i32,
|
||||||
__guard_size: i32,
|
__guard_size: i32,
|
||||||
__stack_address: ?*c_void,
|
__stack_address: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const pthread_mutex_t = extern struct {
|
pub const pthread_mutex_t = extern struct {
|
||||||
@ -55,7 +55,7 @@ pub const pthread_mutex_t = extern struct {
|
|||||||
pub const pthread_cond_t = extern struct {
|
pub const pthread_cond_t = extern struct {
|
||||||
flags: u32 = 0,
|
flags: u32 = 0,
|
||||||
unused: i32 = -42,
|
unused: i32 = -42,
|
||||||
mutex: ?*c_void = null,
|
mutex: ?*anyopaque = null,
|
||||||
waiter_count: i32 = 0,
|
waiter_count: i32 = 0,
|
||||||
lock: i32 = 0,
|
lock: i32 = 0,
|
||||||
};
|
};
|
||||||
@ -180,7 +180,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -262,7 +262,7 @@ pub const area_info = extern struct {
|
|||||||
copy_count: u32,
|
copy_count: u32,
|
||||||
in_count: u32,
|
in_count: u32,
|
||||||
out_count: u32,
|
out_count: u32,
|
||||||
address: *c_void,
|
address: *anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const MAXPATHLEN = PATH_MAX;
|
pub const MAXPATHLEN = PATH_MAX;
|
||||||
@ -272,13 +272,13 @@ pub const image_info = extern struct {
|
|||||||
image_type: u32,
|
image_type: u32,
|
||||||
sequence: i32,
|
sequence: i32,
|
||||||
init_order: i32,
|
init_order: i32,
|
||||||
init_routine: *c_void,
|
init_routine: *anyopaque,
|
||||||
term_routine: *c_void,
|
term_routine: *anyopaque,
|
||||||
device: i32,
|
device: i32,
|
||||||
node: i64,
|
node: i64,
|
||||||
name: [MAXPATHLEN]u8,
|
name: [MAXPATHLEN]u8,
|
||||||
text: *c_void,
|
text: *anyopaque,
|
||||||
data: *c_void,
|
data: *anyopaque,
|
||||||
text_size: i32,
|
text_size: i32,
|
||||||
data_size: i32,
|
data_size: i32,
|
||||||
api_version: i32,
|
api_version: i32,
|
||||||
@ -396,7 +396,7 @@ pub const CLOCK = struct {
|
|||||||
|
|
||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
/// mmap() error return code
|
/// mmap() error return code
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
/// changes are seen by others
|
/// changes are seen by others
|
||||||
pub const SHARED = 0x01;
|
pub const SHARED = 0x01;
|
||||||
/// changes are only seen by caller
|
/// changes are only seen by caller
|
||||||
|
|||||||
@ -28,7 +28,7 @@ pub const MADV = linux.MADV;
|
|||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
pub usingnamespace linux.MAP;
|
pub usingnamespace linux.MAP;
|
||||||
/// Only used by libc to communicate failure.
|
/// Only used by libc to communicate failure.
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
};
|
};
|
||||||
pub const MMAP2_UNIT = linux.MMAP2_UNIT;
|
pub const MMAP2_UNIT = linux.MMAP2_UNIT;
|
||||||
pub const MSG = linux.MSG;
|
pub const MSG = linux.MSG;
|
||||||
@ -228,7 +228,7 @@ pub extern "c" fn fstatat64(dirfd: fd_t, path: [*:0]const u8, stat_buf: *Stat, f
|
|||||||
pub extern "c" fn ftruncate64(fd: c_int, length: off_t) c_int;
|
pub extern "c" fn ftruncate64(fd: c_int, length: off_t) c_int;
|
||||||
pub extern "c" fn getrlimit64(resource: rlimit_resource, rlim: *rlimit) c_int;
|
pub extern "c" fn getrlimit64(resource: rlimit_resource, rlim: *rlimit) c_int;
|
||||||
pub extern "c" fn lseek64(fd: fd_t, offset: i64, whence: c_int) i64;
|
pub extern "c" fn lseek64(fd: fd_t, offset: i64, whence: c_int) i64;
|
||||||
pub extern "c" fn mmap64(addr: ?*align(std.mem.page_size) c_void, len: usize, prot: c_uint, flags: c_uint, fd: fd_t, offset: i64) *c_void;
|
pub extern "c" fn mmap64(addr: ?*align(std.mem.page_size) anyopaque, len: usize, prot: c_uint, flags: c_uint, fd: fd_t, offset: i64) *anyopaque;
|
||||||
pub extern "c" fn open64(path: [*:0]const u8, oflag: c_uint, ...) c_int;
|
pub extern "c" fn open64(path: [*:0]const u8, oflag: c_uint, ...) c_int;
|
||||||
pub extern "c" fn openat64(fd: c_int, path: [*:0]const u8, oflag: c_uint, ...) c_int;
|
pub extern "c" fn openat64(fd: c_int, path: [*:0]const u8, oflag: c_uint, ...) c_int;
|
||||||
pub extern "c" fn pread64(fd: fd_t, buf: [*]u8, nbyte: usize, offset: i64) isize;
|
pub extern "c" fn pread64(fd: fd_t, buf: [*]u8, nbyte: usize, offset: i64) isize;
|
||||||
@ -258,8 +258,8 @@ pub extern "c" fn inotify_rm_watch(fd: fd_t, wd: c_int) c_int;
|
|||||||
/// See std.elf for constants for this
|
/// See std.elf for constants for this
|
||||||
pub extern "c" fn getauxval(__type: c_ulong) c_ulong;
|
pub extern "c" fn getauxval(__type: c_ulong) c_ulong;
|
||||||
|
|
||||||
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int;
|
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
||||||
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int;
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
||||||
|
|
||||||
@ -280,11 +280,11 @@ pub extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_
|
|||||||
pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: c_uint) c_int;
|
pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: c_uint) c_int;
|
||||||
|
|
||||||
pub extern "c" fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: *const rlimit, old_limit: *rlimit) c_int;
|
pub extern "c" fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: *const rlimit, old_limit: *rlimit) c_int;
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
pub extern "c" fn malloc_usable_size(?*const c_void) usize;
|
pub extern "c" fn malloc_usable_size(?*const anyopaque) usize;
|
||||||
|
|
||||||
pub extern "c" fn madvise(
|
pub extern "c" fn madvise(
|
||||||
addr: *align(std.mem.page_size) c_void,
|
addr: *align(std.mem.page_size) anyopaque,
|
||||||
length: usize,
|
length: usize,
|
||||||
advice: c_uint,
|
advice: c_uint,
|
||||||
) c_int;
|
) c_int;
|
||||||
|
|||||||
@ -9,8 +9,8 @@ const rusage = std.c.rusage;
|
|||||||
extern "c" fn __errno() *c_int;
|
extern "c" fn __errno() *c_int;
|
||||||
pub const _errno = __errno;
|
pub const _errno = __errno;
|
||||||
|
|
||||||
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int;
|
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
||||||
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int;
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub extern "c" fn _lwp_self() lwpid_t;
|
pub extern "c" fn _lwp_self() lwpid_t;
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ pub const getrusage = __getrusage50;
|
|||||||
pub extern "c" fn __libc_thr_yield() c_int;
|
pub extern "c" fn __libc_thr_yield() c_int;
|
||||||
pub const sched_yield = __libc_thr_yield;
|
pub const sched_yield = __libc_thr_yield;
|
||||||
|
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
|
|
||||||
pub const pthread_mutex_t = extern struct {
|
pub const pthread_mutex_t = extern struct {
|
||||||
magic: u32 = 0x33330003,
|
magic: u32 = 0x33330003,
|
||||||
@ -65,7 +65,7 @@ pub const pthread_mutex_t = extern struct {
|
|||||||
owner: usize = 0,
|
owner: usize = 0,
|
||||||
waiters: ?*u8 = null,
|
waiters: ?*u8 = null,
|
||||||
recursed: u32 = 0,
|
recursed: u32 = 0,
|
||||||
spare2: ?*c_void = null,
|
spare2: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const pthread_cond_t = extern struct {
|
pub const pthread_cond_t = extern struct {
|
||||||
@ -74,7 +74,7 @@ pub const pthread_cond_t = extern struct {
|
|||||||
waiters_first: ?*u8 = null,
|
waiters_first: ?*u8 = null,
|
||||||
waiters_last: ?*u8 = null,
|
waiters_last: ?*u8 = null,
|
||||||
mutex: ?*pthread_mutex_t = null,
|
mutex: ?*pthread_mutex_t = null,
|
||||||
private: ?*c_void = null,
|
private: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const pthread_rwlock_t = extern struct {
|
pub const pthread_rwlock_t = extern struct {
|
||||||
@ -90,7 +90,7 @@ pub const pthread_rwlock_t = extern struct {
|
|||||||
wblocked_last: ?*u8 = null,
|
wblocked_last: ?*u8 = null,
|
||||||
nreaders: c_uint = 0,
|
nreaders: c_uint = 0,
|
||||||
owner: std.c.pthread_t = null,
|
owner: std.c.pthread_t = null,
|
||||||
private: ?*c_void = null,
|
private: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
const pthread_spin_t = switch (builtin.cpu.arch) {
|
const pthread_spin_t = switch (builtin.cpu.arch) {
|
||||||
@ -113,12 +113,12 @@ const padded_pthread_spin_t = switch (builtin.cpu.arch) {
|
|||||||
pub const pthread_attr_t = extern struct {
|
pub const pthread_attr_t = extern struct {
|
||||||
pta_magic: u32,
|
pta_magic: u32,
|
||||||
pta_flags: i32,
|
pta_flags: i32,
|
||||||
pta_private: ?*c_void,
|
pta_private: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const sem_t = ?*opaque {};
|
pub const sem_t = ?*opaque {};
|
||||||
|
|
||||||
pub extern "c" fn pthread_setname_np(thread: std.c.pthread_t, name: [*:0]const u8, arg: ?*c_void) E;
|
pub extern "c" fn pthread_setname_np(thread: std.c.pthread_t, name: [*:0]const u8, arg: ?*anyopaque) E;
|
||||||
pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) E;
|
pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) E;
|
||||||
|
|
||||||
pub const blkcnt_t = i64;
|
pub const blkcnt_t = i64;
|
||||||
@ -156,9 +156,9 @@ pub const RTLD = struct {
|
|||||||
pub const NODELETE = 0x01000;
|
pub const NODELETE = 0x01000;
|
||||||
pub const NOLOAD = 0x02000;
|
pub const NOLOAD = 0x02000;
|
||||||
|
|
||||||
pub const NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
|
pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1)));
|
||||||
pub const DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
|
pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2)));
|
||||||
pub const SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
|
pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3)));
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const dl_phdr_info = extern struct {
|
pub const dl_phdr_info = extern struct {
|
||||||
@ -249,7 +249,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -272,7 +272,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -556,7 +556,7 @@ pub const CLOCK = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
pub const SHARED = 0x0001;
|
pub const SHARED = 0x0001;
|
||||||
pub const PRIVATE = 0x0002;
|
pub const PRIVATE = 0x0002;
|
||||||
pub const REMAPDUP = 0x0004;
|
pub const REMAPDUP = 0x0004;
|
||||||
@ -962,7 +962,7 @@ pub const SIG = struct {
|
|||||||
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
/// signal handler
|
/// signal handler
|
||||||
handler: extern union {
|
handler: extern union {
|
||||||
@ -977,7 +977,7 @@ pub const Sigaction = extern struct {
|
|||||||
|
|
||||||
pub const sigval_t = extern union {
|
pub const sigval_t = extern union {
|
||||||
int: i32,
|
int: i32,
|
||||||
ptr: ?*c_void,
|
ptr: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const siginfo_t = extern union {
|
pub const siginfo_t = extern union {
|
||||||
@ -1005,7 +1005,7 @@ pub const _ksiginfo = extern struct {
|
|||||||
stime: clock_t,
|
stime: clock_t,
|
||||||
},
|
},
|
||||||
fault: extern struct {
|
fault: extern struct {
|
||||||
addr: ?*c_void,
|
addr: ?*anyopaque,
|
||||||
trap: i32,
|
trap: i32,
|
||||||
trap2: i32,
|
trap2: i32,
|
||||||
trap3: i32,
|
trap3: i32,
|
||||||
|
|||||||
@ -7,8 +7,8 @@ const iovec_const = std.os.iovec_const;
|
|||||||
extern "c" fn __errno() *c_int;
|
extern "c" fn __errno() *c_int;
|
||||||
pub const _errno = __errno;
|
pub const _errno = __errno;
|
||||||
|
|
||||||
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int;
|
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
||||||
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int;
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
||||||
|
|
||||||
@ -19,25 +19,25 @@ pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
|
|||||||
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
||||||
|
|
||||||
pub const pthread_mutex_t = extern struct {
|
pub const pthread_mutex_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_cond_t = extern struct {
|
pub const pthread_cond_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_rwlock_t = extern struct {
|
pub const pthread_rwlock_t = extern struct {
|
||||||
ptr: ?*c_void = null,
|
ptr: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_spinlock_t = extern struct {
|
pub const pthread_spinlock_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_attr_t = extern struct {
|
pub const pthread_attr_t = extern struct {
|
||||||
inner: ?*c_void = null,
|
inner: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_key_t = c_int;
|
pub const pthread_key_t = c_int;
|
||||||
|
|
||||||
pub const sem_t = ?*opaque {};
|
pub const sem_t = ?*opaque {};
|
||||||
|
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
|
|
||||||
pub extern "c" fn pledge(promises: ?[*:0]const u8, execpromises: ?[*:0]const u8) c_int;
|
pub extern "c" fn pledge(promises: ?[*:0]const u8, execpromises: ?[*:0]const u8) c_int;
|
||||||
pub extern "c" fn unveil(path: ?[*:0]const u8, permissions: ?[*:0]const u8) c_int;
|
pub extern "c" fn unveil(path: ?[*:0]const u8, permissions: ?[*:0]const u8) c_int;
|
||||||
@ -174,7 +174,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_iovlen: c_uint,
|
msg_iovlen: c_uint,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -197,7 +197,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_iovlen: c_uint,
|
msg_iovlen: c_uint,
|
||||||
|
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
|
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
@ -346,7 +346,7 @@ pub const CLOCK = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
pub const SHARED = 0x0001;
|
pub const SHARED = 0x0001;
|
||||||
pub const PRIVATE = 0x0002;
|
pub const PRIVATE = 0x0002;
|
||||||
pub const FIXED = 0x0010;
|
pub const FIXED = 0x0010;
|
||||||
@ -889,7 +889,7 @@ pub const SIG = struct {
|
|||||||
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
/// signal handler
|
/// signal handler
|
||||||
handler: extern union {
|
handler: extern union {
|
||||||
@ -904,7 +904,7 @@ pub const Sigaction = extern struct {
|
|||||||
|
|
||||||
pub const sigval = extern union {
|
pub const sigval = extern union {
|
||||||
int: c_int,
|
int: c_int,
|
||||||
ptr: ?*c_void,
|
ptr: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const siginfo_t = extern struct {
|
pub const siginfo_t = extern struct {
|
||||||
@ -927,7 +927,7 @@ pub const siginfo_t = extern struct {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
fault: extern struct {
|
fault: extern struct {
|
||||||
addr: ?*c_void,
|
addr: ?*anyopaque,
|
||||||
trapno: c_int,
|
trapno: c_int,
|
||||||
},
|
},
|
||||||
__pad: [128 - 3 * @sizeOf(c_int)]u8,
|
__pad: [128 - 3 * @sizeOf(c_int)]u8,
|
||||||
|
|||||||
@ -8,14 +8,14 @@ const timezone = std.c.timezone;
|
|||||||
extern "c" fn ___errno() *c_int;
|
extern "c" fn ___errno() *c_int;
|
||||||
pub const _errno = ___errno;
|
pub const _errno = ___errno;
|
||||||
|
|
||||||
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int;
|
pub const dl_iterate_phdr_callback = fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int;
|
||||||
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int;
|
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
|
||||||
|
|
||||||
pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
|
pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
|
||||||
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
|
||||||
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
|
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
|
||||||
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
|
||||||
pub extern "c" fn posix_memalign(memptr: *?*c_void, alignment: usize, size: usize) c_int;
|
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
|
||||||
pub extern "c" fn sysconf(sc: c_int) i64;
|
pub extern "c" fn sysconf(sc: c_int) i64;
|
||||||
pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) c_int;
|
pub extern "c" fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) c_int;
|
||||||
pub extern "c" fn madvise(address: [*]u8, len: usize, advise: u32) c_int;
|
pub extern "c" fn madvise(address: [*]u8, len: usize, advise: u32) c_int;
|
||||||
@ -44,7 +44,7 @@ pub const pthread_rwlock_t = extern struct {
|
|||||||
writercv: pthread_cond_t = .{},
|
writercv: pthread_cond_t = .{},
|
||||||
};
|
};
|
||||||
pub const pthread_attr_t = extern struct {
|
pub const pthread_attr_t = extern struct {
|
||||||
mutexattr: ?*c_void = null,
|
mutexattr: ?*anyopaque = null,
|
||||||
};
|
};
|
||||||
pub const pthread_key_t = c_int;
|
pub const pthread_key_t = c_int;
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ pub const sem_t = extern struct {
|
|||||||
__pad2: [2]u64 = [_]u64{0} ** 2,
|
__pad2: [2]u64 = [_]u64{0} ** 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub extern "c" fn pthread_setname_np(thread: std.c.pthread_t, name: [*:0]const u8, arg: ?*c_void) E;
|
pub extern "c" fn pthread_setname_np(thread: std.c.pthread_t, name: [*:0]const u8, arg: ?*anyopaque) E;
|
||||||
pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) E;
|
pub extern "c" fn pthread_getname_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) E;
|
||||||
|
|
||||||
pub const blkcnt_t = i64;
|
pub const blkcnt_t = i64;
|
||||||
@ -109,10 +109,10 @@ pub const RTLD = struct {
|
|||||||
pub const FIRST = 0x02000;
|
pub const FIRST = 0x02000;
|
||||||
pub const CONFGEN = 0x10000;
|
pub const CONFGEN = 0x10000;
|
||||||
|
|
||||||
pub const NEXT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -1)));
|
pub const NEXT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1)));
|
||||||
pub const DEFAULT = @intToPtr(*c_void, @bitCast(usize, @as(isize, -2)));
|
pub const DEFAULT = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -2)));
|
||||||
pub const SELF = @intToPtr(*c_void, @bitCast(usize, @as(isize, -3)));
|
pub const SELF = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -3)));
|
||||||
pub const PROBE = @intToPtr(*c_void, @bitCast(usize, @as(isize, -4)));
|
pub const PROBE = @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -4)));
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Flock = extern struct {
|
pub const Flock = extern struct {
|
||||||
@ -189,7 +189,7 @@ pub const msghdr = extern struct {
|
|||||||
/// # elements in msg_iov
|
/// # elements in msg_iov
|
||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
/// flags on received message
|
/// flags on received message
|
||||||
@ -206,7 +206,7 @@ pub const msghdr_const = extern struct {
|
|||||||
/// # elements in msg_iov
|
/// # elements in msg_iov
|
||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
/// ancillary data
|
/// ancillary data
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
/// ancillary data buffer len
|
/// ancillary data buffer len
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
/// flags on received message
|
/// flags on received message
|
||||||
@ -514,7 +514,7 @@ pub const CLOCK = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const MAP = struct {
|
pub const MAP = struct {
|
||||||
pub const FAILED = @intToPtr(*c_void, maxInt(usize));
|
pub const FAILED = @intToPtr(*anyopaque, maxInt(usize));
|
||||||
pub const SHARED = 0x0001;
|
pub const SHARED = 0x0001;
|
||||||
pub const PRIVATE = 0x0002;
|
pub const PRIVATE = 0x0002;
|
||||||
pub const TYPE = 0x000f;
|
pub const TYPE = 0x000f;
|
||||||
@ -947,7 +947,7 @@ pub const SIG = struct {
|
|||||||
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
/// signal options
|
/// signal options
|
||||||
flags: c_uint,
|
flags: c_uint,
|
||||||
@ -962,7 +962,7 @@ pub const Sigaction = extern struct {
|
|||||||
|
|
||||||
pub const sigval_t = extern union {
|
pub const sigval_t = extern union {
|
||||||
int: c_int,
|
int: c_int,
|
||||||
ptr: ?*c_void,
|
ptr: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const siginfo_t = extern struct {
|
pub const siginfo_t = extern struct {
|
||||||
@ -989,9 +989,9 @@ pub const siginfo_t = extern struct {
|
|||||||
zone: zoneid_t,
|
zone: zoneid_t,
|
||||||
},
|
},
|
||||||
fault: extern struct {
|
fault: extern struct {
|
||||||
addr: ?*c_void,
|
addr: ?*anyopaque,
|
||||||
trapno: c_int,
|
trapno: c_int,
|
||||||
pc: ?*c_void,
|
pc: ?*anyopaque,
|
||||||
},
|
},
|
||||||
file: extern struct {
|
file: extern struct {
|
||||||
// fd not currently available for SIGPOLL.
|
// fd not currently available for SIGPOLL.
|
||||||
@ -999,7 +999,7 @@ pub const siginfo_t = extern struct {
|
|||||||
band: c_long,
|
band: c_long,
|
||||||
},
|
},
|
||||||
prof: extern struct {
|
prof: extern struct {
|
||||||
addr: ?*c_void,
|
addr: ?*anyopaque,
|
||||||
timestamp: timespec,
|
timestamp: timespec,
|
||||||
syscall: c_short,
|
syscall: c_short,
|
||||||
sysarg: u8,
|
sysarg: u8,
|
||||||
@ -1065,7 +1065,7 @@ pub const ucontext_t = extern struct {
|
|||||||
sigmask: sigset_t,
|
sigmask: sigset_t,
|
||||||
stack: stack_t,
|
stack: stack_t,
|
||||||
mcontext: mcontext_t,
|
mcontext: mcontext_t,
|
||||||
brand_data: [3]?*c_void,
|
brand_data: [3]?*anyopaque,
|
||||||
filler: [2]i64,
|
filler: [2]i64,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1783,9 +1783,9 @@ pub const port_event = extern struct {
|
|||||||
source: u16,
|
source: u16,
|
||||||
__pad: u16,
|
__pad: u16,
|
||||||
/// Source-specific object.
|
/// Source-specific object.
|
||||||
object: ?*c_void,
|
object: ?*anyopaque,
|
||||||
/// User cookie.
|
/// User cookie.
|
||||||
cookie: ?*c_void,
|
cookie: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const port_notify = extern struct {
|
pub const port_notify = extern struct {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ const windows = std.os.windows;
|
|||||||
|
|
||||||
pub extern "c" fn _errno() *c_int;
|
pub extern "c" fn _errno() *c_int;
|
||||||
|
|
||||||
pub extern "c" fn _msize(memblock: ?*c_void) usize;
|
pub extern "c" fn _msize(memblock: ?*anyopaque) usize;
|
||||||
|
|
||||||
// TODO: copied the else case and removed the socket function (because its in ws2_32)
|
// TODO: copied the else case and removed the socket function (because its in ws2_32)
|
||||||
// need to verify which of these is actually supported on windows
|
// need to verify which of these is actually supported on windows
|
||||||
|
|||||||
@ -923,7 +923,7 @@ fn windowsCreateProcess(app_name: [*:0]u16, cmd_line: [*:0]u16, envp_ptr: ?[*]u1
|
|||||||
null,
|
null,
|
||||||
windows.TRUE,
|
windows.TRUE,
|
||||||
windows.CREATE_UNICODE_ENVIRONMENT,
|
windows.CREATE_UNICODE_ENVIRONMENT,
|
||||||
@ptrCast(?*c_void, envp_ptr),
|
@ptrCast(?*anyopaque, envp_ptr),
|
||||||
cwd_ptr,
|
cwd_ptr,
|
||||||
lpStartupInfo,
|
lpStartupInfo,
|
||||||
lpProcessInformation,
|
lpProcessInformation,
|
||||||
|
|||||||
@ -59,7 +59,7 @@ var install_atfork_handler = std.once(struct {
|
|||||||
|
|
||||||
threadlocal var wipe_mem: []align(mem.page_size) u8 = &[_]u8{};
|
threadlocal var wipe_mem: []align(mem.page_size) u8 = &[_]u8{};
|
||||||
|
|
||||||
fn tlsCsprngFill(_: *c_void, buffer: []u8) void {
|
fn tlsCsprngFill(_: *anyopaque, buffer: []u8) void {
|
||||||
if (builtin.link_libc and @hasDecl(std.c, "arc4random_buf")) {
|
if (builtin.link_libc and @hasDecl(std.c, "arc4random_buf")) {
|
||||||
// arc4random is already a thread-local CSPRNG.
|
// arc4random is already a thread-local CSPRNG.
|
||||||
return std.c.arc4random_buf(buffer.ptr, buffer.len);
|
return std.c.arc4random_buf(buffer.ptr, buffer.len);
|
||||||
|
|||||||
@ -156,14 +156,14 @@ pub fn captureStackTrace(first_address: ?usize, stack_trace: *std.builtin.StackT
|
|||||||
stack_trace.index = windows.ntdll.RtlCaptureStackBackTrace(
|
stack_trace.index = windows.ntdll.RtlCaptureStackBackTrace(
|
||||||
0,
|
0,
|
||||||
u32_addrs_len,
|
u32_addrs_len,
|
||||||
@ptrCast(**c_void, addrs.ptr),
|
@ptrCast(**anyopaque, addrs.ptr),
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
var addr_buf_stack: [32]usize = undefined;
|
var addr_buf_stack: [32]usize = undefined;
|
||||||
const addr_buf = if (addr_buf_stack.len > addrs.len) addr_buf_stack[0..] else addrs;
|
const addr_buf = if (addr_buf_stack.len > addrs.len) addr_buf_stack[0..] else addrs;
|
||||||
const n = windows.ntdll.RtlCaptureStackBackTrace(0, u32_addrs_len, @ptrCast(**c_void, addr_buf.ptr), null);
|
const n = windows.ntdll.RtlCaptureStackBackTrace(0, u32_addrs_len, @ptrCast(**anyopaque, addr_buf.ptr), null);
|
||||||
const first_index = for (addr_buf[0..n]) |addr, i| {
|
const first_index = for (addr_buf[0..n]) |addr, i| {
|
||||||
if (addr == first_addr) {
|
if (addr == first_addr) {
|
||||||
break i;
|
break i;
|
||||||
@ -472,7 +472,7 @@ pub fn writeCurrentStackTraceWindows(
|
|||||||
start_addr: ?usize,
|
start_addr: ?usize,
|
||||||
) !void {
|
) !void {
|
||||||
var addr_buf: [1024]usize = undefined;
|
var addr_buf: [1024]usize = undefined;
|
||||||
const n = windows.ntdll.RtlCaptureStackBackTrace(0, addr_buf.len, @ptrCast(**c_void, &addr_buf), null);
|
const n = windows.ntdll.RtlCaptureStackBackTrace(0, addr_buf.len, @ptrCast(**anyopaque, &addr_buf), null);
|
||||||
const addrs = addr_buf[0..n];
|
const addrs = addr_buf[0..n];
|
||||||
var start_i: usize = if (start_addr) |saddr| blk: {
|
var start_i: usize = if (start_addr) |saddr| blk: {
|
||||||
for (addrs) |addr, i| {
|
for (addrs) |addr, i| {
|
||||||
@ -1629,7 +1629,7 @@ fn resetSegfaultHandler() void {
|
|||||||
os.sigaction(os.SIG.BUS, &act, null);
|
os.sigaction(os.SIG.BUS, &act, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const c_void) callconv(.C) noreturn {
|
fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) noreturn {
|
||||||
// Reset to the default handler so that if a segfault happens in this handler it will crash
|
// Reset to the default handler so that if a segfault happens in this handler it will crash
|
||||||
// the process. Also when this handler returns, the original instruction will be repeated
|
// the process. Also when this handler returns, the original instruction will be repeated
|
||||||
// and the resulting segfault will crash the process rather than continually dump stack traces.
|
// and the resulting segfault will crash the process rather than continually dump stack traces.
|
||||||
|
|||||||
@ -357,7 +357,7 @@ pub const WindowsDynLib = struct {
|
|||||||
pub const DlDynlib = struct {
|
pub const DlDynlib = struct {
|
||||||
pub const Error = error{FileNotFound};
|
pub const Error = error{FileNotFound};
|
||||||
|
|
||||||
handle: *c_void,
|
handle: *anyopaque,
|
||||||
|
|
||||||
pub fn open(path: []const u8) !DlDynlib {
|
pub fn open(path: []const u8) !DlDynlib {
|
||||||
const path_c = try os.toPosixPath(path);
|
const path_c = try os.toPosixPath(path);
|
||||||
|
|||||||
@ -23,7 +23,7 @@ pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDi
|
|||||||
&dir_path_ptr,
|
&dir_path_ptr,
|
||||||
)) {
|
)) {
|
||||||
os.windows.S_OK => {
|
os.windows.S_OK => {
|
||||||
defer os.windows.ole32.CoTaskMemFree(@ptrCast(*c_void, dir_path_ptr));
|
defer os.windows.ole32.CoTaskMemFree(@ptrCast(*anyopaque, dir_path_ptr));
|
||||||
const global_dir = unicode.utf16leToUtf8Alloc(allocator, mem.sliceTo(dir_path_ptr, 0)) catch |err| switch (err) {
|
const global_dir = unicode.utf16leToUtf8Alloc(allocator, mem.sliceTo(dir_path_ptr, 0)) catch |err| switch (err) {
|
||||||
error.UnexpectedSecondSurrogateHalf => return error.AppDataDirUnavailable,
|
error.UnexpectedSecondSurrogateHalf => return error.AppDataDirUnavailable,
|
||||||
error.ExpectedSecondSurrogateHalf => return error.AppDataDirUnavailable,
|
error.ExpectedSecondSurrogateHalf => return error.AppDataDirUnavailable,
|
||||||
|
|||||||
@ -58,7 +58,7 @@ const CAllocator = struct {
|
|||||||
// multiple of the pointer size
|
// multiple of the pointer size
|
||||||
const eff_alignment = std.math.max(alignment, @sizeOf(usize));
|
const eff_alignment = std.math.max(alignment, @sizeOf(usize));
|
||||||
|
|
||||||
var aligned_ptr: ?*c_void = undefined;
|
var aligned_ptr: ?*anyopaque = undefined;
|
||||||
if (c.posix_memalign(&aligned_ptr, eff_alignment, len) != 0)
|
if (c.posix_memalign(&aligned_ptr, eff_alignment, len) != 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ const CAllocator = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn alloc(
|
fn alloc(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
len: usize,
|
len: usize,
|
||||||
alignment: u29,
|
alignment: u29,
|
||||||
len_align: u29,
|
len_align: u29,
|
||||||
@ -123,7 +123,7 @@ const CAllocator = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn resize(
|
fn resize(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf: []u8,
|
buf: []u8,
|
||||||
buf_align: u29,
|
buf_align: u29,
|
||||||
new_len: usize,
|
new_len: usize,
|
||||||
@ -145,7 +145,7 @@ const CAllocator = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn free(
|
fn free(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf: []u8,
|
buf: []u8,
|
||||||
buf_align: u29,
|
buf_align: u29,
|
||||||
return_address: usize,
|
return_address: usize,
|
||||||
@ -185,7 +185,7 @@ const raw_c_allocator_vtable = Allocator.VTable{
|
|||||||
};
|
};
|
||||||
|
|
||||||
fn rawCAlloc(
|
fn rawCAlloc(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
len: usize,
|
len: usize,
|
||||||
ptr_align: u29,
|
ptr_align: u29,
|
||||||
len_align: u29,
|
len_align: u29,
|
||||||
@ -199,7 +199,7 @@ fn rawCAlloc(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn rawCResize(
|
fn rawCResize(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf: []u8,
|
buf: []u8,
|
||||||
old_align: u29,
|
old_align: u29,
|
||||||
new_len: usize,
|
new_len: usize,
|
||||||
@ -215,7 +215,7 @@ fn rawCResize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn rawCFree(
|
fn rawCFree(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf: []u8,
|
buf: []u8,
|
||||||
old_align: u29,
|
old_align: u29,
|
||||||
ret_addr: usize,
|
ret_addr: usize,
|
||||||
@ -257,7 +257,7 @@ const PageAllocator = struct {
|
|||||||
.free = free,
|
.free = free,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn alloc(_: *c_void, n: usize, alignment: u29, len_align: u29, ra: usize) error{OutOfMemory}![]u8 {
|
fn alloc(_: *anyopaque, n: usize, alignment: u29, len_align: u29, ra: usize) error{OutOfMemory}![]u8 {
|
||||||
_ = ra;
|
_ = ra;
|
||||||
assert(n > 0);
|
assert(n > 0);
|
||||||
const aligned_len = mem.alignForward(n, mem.page_size);
|
const aligned_len = mem.alignForward(n, mem.page_size);
|
||||||
@ -305,7 +305,7 @@ const PageAllocator = struct {
|
|||||||
// VirtualAlloc call to fail. To handle this, we will retry
|
// VirtualAlloc call to fail. To handle this, we will retry
|
||||||
// until it succeeds.
|
// until it succeeds.
|
||||||
const ptr = w.VirtualAlloc(
|
const ptr = w.VirtualAlloc(
|
||||||
@intToPtr(*c_void, aligned_addr),
|
@intToPtr(*anyopaque, aligned_addr),
|
||||||
aligned_len,
|
aligned_len,
|
||||||
w.MEM_COMMIT | w.MEM_RESERVE,
|
w.MEM_COMMIT | w.MEM_RESERVE,
|
||||||
w.PAGE_READWRITE,
|
w.PAGE_READWRITE,
|
||||||
@ -355,7 +355,7 @@ const PageAllocator = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn resize(
|
fn resize(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf_unaligned: []u8,
|
buf_unaligned: []u8,
|
||||||
buf_align: u29,
|
buf_align: u29,
|
||||||
new_size: usize,
|
new_size: usize,
|
||||||
@ -376,7 +376,7 @@ const PageAllocator = struct {
|
|||||||
// For shrinking that is not releasing, we will only
|
// For shrinking that is not releasing, we will only
|
||||||
// decommit the pages not needed anymore.
|
// decommit the pages not needed anymore.
|
||||||
w.VirtualFree(
|
w.VirtualFree(
|
||||||
@intToPtr(*c_void, new_addr_end),
|
@intToPtr(*anyopaque, new_addr_end),
|
||||||
old_addr_end - new_addr_end,
|
old_addr_end - new_addr_end,
|
||||||
w.MEM_DECOMMIT,
|
w.MEM_DECOMMIT,
|
||||||
);
|
);
|
||||||
@ -406,7 +406,7 @@ const PageAllocator = struct {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn free(_: *c_void, buf_unaligned: []u8, buf_align: u29, return_address: usize) void {
|
fn free(_: *anyopaque, buf_unaligned: []u8, buf_align: u29, return_address: usize) void {
|
||||||
_ = buf_align;
|
_ = buf_align;
|
||||||
_ = return_address;
|
_ = return_address;
|
||||||
|
|
||||||
@ -518,7 +518,7 @@ const WasmPageAllocator = struct {
|
|||||||
return mem.alignForward(memsize, mem.page_size) / mem.page_size;
|
return mem.alignForward(memsize, mem.page_size) / mem.page_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn alloc(_: *c_void, len: usize, alignment: u29, len_align: u29, ra: usize) error{OutOfMemory}![]u8 {
|
fn alloc(_: *anyopaque, len: usize, alignment: u29, len_align: u29, ra: usize) error{OutOfMemory}![]u8 {
|
||||||
_ = ra;
|
_ = ra;
|
||||||
const page_count = nPages(len);
|
const page_count = nPages(len);
|
||||||
const page_idx = try allocPages(page_count, alignment);
|
const page_idx = try allocPages(page_count, alignment);
|
||||||
@ -573,7 +573,7 @@ const WasmPageAllocator = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn resize(
|
fn resize(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf: []u8,
|
buf: []u8,
|
||||||
buf_align: u29,
|
buf_align: u29,
|
||||||
new_len: usize,
|
new_len: usize,
|
||||||
@ -594,7 +594,7 @@ const WasmPageAllocator = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn free(
|
fn free(
|
||||||
_: *c_void,
|
_: *anyopaque,
|
||||||
buf: []u8,
|
buf: []u8,
|
||||||
buf_align: u29,
|
buf_align: u29,
|
||||||
return_address: usize,
|
return_address: usize,
|
||||||
@ -684,10 +684,10 @@ pub const HeapAllocator = switch (builtin.os.tag) {
|
|||||||
const new_ptr = os.windows.kernel32.HeapReAlloc(
|
const new_ptr = os.windows.kernel32.HeapReAlloc(
|
||||||
self.heap_handle.?,
|
self.heap_handle.?,
|
||||||
os.windows.HEAP_REALLOC_IN_PLACE_ONLY,
|
os.windows.HEAP_REALLOC_IN_PLACE_ONLY,
|
||||||
@intToPtr(*c_void, root_addr),
|
@intToPtr(*anyopaque, root_addr),
|
||||||
amt,
|
amt,
|
||||||
) orelse return null;
|
) orelse return null;
|
||||||
assert(new_ptr == @intToPtr(*c_void, root_addr));
|
assert(new_ptr == @intToPtr(*anyopaque, root_addr));
|
||||||
const return_len = init: {
|
const return_len = init: {
|
||||||
if (len_align == 0) break :init new_size;
|
if (len_align == 0) break :init new_size;
|
||||||
const full_len = os.windows.kernel32.HeapSize(self.heap_handle.?, 0, new_ptr);
|
const full_len = os.windows.kernel32.HeapSize(self.heap_handle.?, 0, new_ptr);
|
||||||
@ -707,7 +707,7 @@ pub const HeapAllocator = switch (builtin.os.tag) {
|
|||||||
) void {
|
) void {
|
||||||
_ = buf_align;
|
_ = buf_align;
|
||||||
_ = return_address;
|
_ = return_address;
|
||||||
os.windows.HeapFree(self.heap_handle.?, 0, @intToPtr(*c_void, getRecordPtr(buf).*));
|
os.windows.HeapFree(self.heap_handle.?, 0, @intToPtr(*anyopaque, getRecordPtr(buf).*));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
else => @compileError("Unsupported OS"),
|
else => @compileError("Unsupported OS"),
|
||||||
|
|||||||
@ -151,11 +151,11 @@ const fail_allocator = Allocator{
|
|||||||
|
|
||||||
const failAllocator_vtable = Allocator.VTable{
|
const failAllocator_vtable = Allocator.VTable{
|
||||||
.alloc = failAllocatorAlloc,
|
.alloc = failAllocatorAlloc,
|
||||||
.resize = Allocator.NoResize(c_void).noResize,
|
.resize = Allocator.NoResize(anyopaque).noResize,
|
||||||
.free = Allocator.NoOpFree(c_void).noOpFree,
|
.free = Allocator.NoOpFree(anyopaque).noOpFree,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn failAllocatorAlloc(_: *c_void, n: usize, alignment: u29, len_align: u29, ra: usize) Allocator.Error![]u8 {
|
fn failAllocatorAlloc(_: *anyopaque, n: usize, alignment: u29, len_align: u29, ra: usize) Allocator.Error![]u8 {
|
||||||
_ = n;
|
_ = n;
|
||||||
_ = alignment;
|
_ = alignment;
|
||||||
_ = len_align;
|
_ = len_align;
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const builtin = @import("builtin");
|
|||||||
pub const Error = error{OutOfMemory};
|
pub const Error = error{OutOfMemory};
|
||||||
|
|
||||||
// The type erased pointer to the allocator implementation
|
// The type erased pointer to the allocator implementation
|
||||||
ptr: *c_void,
|
ptr: *anyopaque,
|
||||||
vtable: *const VTable,
|
vtable: *const VTable,
|
||||||
|
|
||||||
pub const VTable = struct {
|
pub const VTable = struct {
|
||||||
@ -23,7 +23,7 @@ pub const VTable = struct {
|
|||||||
///
|
///
|
||||||
/// `ret_addr` is optionally provided as the first return address of the allocation call stack.
|
/// `ret_addr` is optionally provided as the first return address of the allocation call stack.
|
||||||
/// If the value is `0` it means no return address has been provided.
|
/// If the value is `0` it means no return address has been provided.
|
||||||
alloc: fn (ptr: *c_void, len: usize, ptr_align: u29, len_align: u29, ret_addr: usize) Error![]u8,
|
alloc: fn (ptr: *anyopaque, len: usize, ptr_align: u29, len_align: u29, ret_addr: usize) Error![]u8,
|
||||||
|
|
||||||
/// Attempt to expand or shrink memory in place. `buf.len` must equal the most recent
|
/// Attempt to expand or shrink memory in place. `buf.len` must equal the most recent
|
||||||
/// length returned by `alloc` or `resize`. `buf_align` must equal the same value
|
/// length returned by `alloc` or `resize`. `buf_align` must equal the same value
|
||||||
@ -42,14 +42,14 @@ pub const VTable = struct {
|
|||||||
///
|
///
|
||||||
/// `ret_addr` is optionally provided as the first return address of the allocation call stack.
|
/// `ret_addr` is optionally provided as the first return address of the allocation call stack.
|
||||||
/// If the value is `0` it means no return address has been provided.
|
/// If the value is `0` it means no return address has been provided.
|
||||||
resize: fn (ptr: *c_void, buf: []u8, buf_align: u29, new_len: usize, len_align: u29, ret_addr: usize) ?usize,
|
resize: fn (ptr: *anyopaque, buf: []u8, buf_align: u29, new_len: usize, len_align: u29, ret_addr: usize) ?usize,
|
||||||
|
|
||||||
/// Free and invalidate a buffer. `buf.len` must equal the most recent length returned by `alloc` or `resize`.
|
/// Free and invalidate a buffer. `buf.len` must equal the most recent length returned by `alloc` or `resize`.
|
||||||
/// `buf_align` must equal the same value that was passed as the `ptr_align` parameter to the original `alloc` call.
|
/// `buf_align` must equal the same value that was passed as the `ptr_align` parameter to the original `alloc` call.
|
||||||
///
|
///
|
||||||
/// `ret_addr` is optionally provided as the first return address of the allocation call stack.
|
/// `ret_addr` is optionally provided as the first return address of the allocation call stack.
|
||||||
/// If the value is `0` it means no return address has been provided.
|
/// If the value is `0` it means no return address has been provided.
|
||||||
free: fn (ptr: *c_void, buf: []u8, buf_align: u29, ret_addr: usize) void,
|
free: fn (ptr: *anyopaque, buf: []u8, buf_align: u29, ret_addr: usize) void,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn init(
|
pub fn init(
|
||||||
@ -67,16 +67,16 @@ pub fn init(
|
|||||||
const alignment = ptr_info.Pointer.alignment;
|
const alignment = ptr_info.Pointer.alignment;
|
||||||
|
|
||||||
const gen = struct {
|
const gen = struct {
|
||||||
fn allocImpl(ptr: *c_void, len: usize, ptr_align: u29, len_align: u29, ret_addr: usize) Error![]u8 {
|
fn allocImpl(ptr: *anyopaque, len: usize, ptr_align: u29, len_align: u29, ret_addr: usize) Error![]u8 {
|
||||||
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
||||||
return @call(.{ .modifier = .always_inline }, allocFn, .{ self, len, ptr_align, len_align, ret_addr });
|
return @call(.{ .modifier = .always_inline }, allocFn, .{ self, len, ptr_align, len_align, ret_addr });
|
||||||
}
|
}
|
||||||
fn resizeImpl(ptr: *c_void, buf: []u8, buf_align: u29, new_len: usize, len_align: u29, ret_addr: usize) ?usize {
|
fn resizeImpl(ptr: *anyopaque, buf: []u8, buf_align: u29, new_len: usize, len_align: u29, ret_addr: usize) ?usize {
|
||||||
assert(new_len != 0);
|
assert(new_len != 0);
|
||||||
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
||||||
return @call(.{ .modifier = .always_inline }, resizeFn, .{ self, buf, buf_align, new_len, len_align, ret_addr });
|
return @call(.{ .modifier = .always_inline }, resizeFn, .{ self, buf, buf_align, new_len, len_align, ret_addr });
|
||||||
}
|
}
|
||||||
fn freeImpl(ptr: *c_void, buf: []u8, buf_align: u29, ret_addr: usize) void {
|
fn freeImpl(ptr: *anyopaque, buf: []u8, buf_align: u29, ret_addr: usize) void {
|
||||||
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
||||||
@call(.{ .modifier = .always_inline }, freeFn, .{ self, buf, buf_align, ret_addr });
|
@call(.{ .modifier = .always_inline }, freeFn, .{ self, buf, buf_align, ret_addr });
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2904,7 +2904,7 @@ pub fn isCygwinPty(handle: fd_t) bool {
|
|||||||
if (windows.kernel32.GetFileInformationByHandleEx(
|
if (windows.kernel32.GetFileInformationByHandleEx(
|
||||||
handle,
|
handle,
|
||||||
windows.FileNameInfo,
|
windows.FileNameInfo,
|
||||||
@ptrCast(*c_void, &name_info_bytes),
|
@ptrCast(*anyopaque, &name_info_bytes),
|
||||||
name_info_bytes.len,
|
name_info_bytes.len,
|
||||||
) == 0) {
|
) == 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -4236,9 +4236,9 @@ pub const SysCtlError = error{
|
|||||||
|
|
||||||
pub fn sysctl(
|
pub fn sysctl(
|
||||||
name: []const c_int,
|
name: []const c_int,
|
||||||
oldp: ?*c_void,
|
oldp: ?*anyopaque,
|
||||||
oldlenp: ?*usize,
|
oldlenp: ?*usize,
|
||||||
newp: ?*c_void,
|
newp: ?*anyopaque,
|
||||||
newlen: usize,
|
newlen: usize,
|
||||||
) SysCtlError!void {
|
) SysCtlError!void {
|
||||||
if (builtin.os.tag == .wasi) {
|
if (builtin.os.tag == .wasi) {
|
||||||
@ -4261,9 +4261,9 @@ pub fn sysctl(
|
|||||||
|
|
||||||
pub fn sysctlbynameZ(
|
pub fn sysctlbynameZ(
|
||||||
name: [*:0]const u8,
|
name: [*:0]const u8,
|
||||||
oldp: ?*c_void,
|
oldp: ?*anyopaque,
|
||||||
oldlenp: ?*usize,
|
oldlenp: ?*usize,
|
||||||
newp: ?*c_void,
|
newp: ?*anyopaque,
|
||||||
newlen: usize,
|
newlen: usize,
|
||||||
) SysCtlError!void {
|
) SysCtlError!void {
|
||||||
if (builtin.os.tag == .wasi) {
|
if (builtin.os.tag == .wasi) {
|
||||||
@ -4801,12 +4801,12 @@ pub fn dl_iterate_phdr(
|
|||||||
|
|
||||||
if (builtin.link_libc) {
|
if (builtin.link_libc) {
|
||||||
switch (system.dl_iterate_phdr(struct {
|
switch (system.dl_iterate_phdr(struct {
|
||||||
fn callbackC(info: *dl_phdr_info, size: usize, data: ?*c_void) callconv(.C) c_int {
|
fn callbackC(info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int {
|
||||||
const context_ptr = @ptrCast(*const Context, @alignCast(@alignOf(*const Context), data));
|
const context_ptr = @ptrCast(*const Context, @alignCast(@alignOf(*const Context), data));
|
||||||
callback(info, size, context_ptr.*) catch |err| return @errorToInt(err);
|
callback(info, size, context_ptr.*) catch |err| return @errorToInt(err);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}.callbackC, @intToPtr(?*c_void, @ptrToInt(&context)))) {
|
}.callbackC, @intToPtr(?*anyopaque, @ptrToInt(&context)))) {
|
||||||
0 => return,
|
0 => return,
|
||||||
else => |err| return @errSetCast(Error, @intToError(@intCast(u16, err))), // TODO don't hardcode u16
|
else => |err| return @errSetCast(Error, @intToError(@intCast(u16, err))), // TODO don't hardcode u16
|
||||||
}
|
}
|
||||||
|
|||||||
@ -845,14 +845,14 @@ pub fn flock(fd: fd_t, operation: i32) usize {
|
|||||||
return syscall2(.flock, @bitCast(usize, @as(isize, fd)), @bitCast(usize, @as(isize, operation)));
|
return syscall2(.flock, @bitCast(usize, @as(isize, fd)), @bitCast(usize, @as(isize, operation)));
|
||||||
}
|
}
|
||||||
|
|
||||||
var vdso_clock_gettime = @ptrCast(?*const c_void, init_vdso_clock_gettime);
|
var vdso_clock_gettime = @ptrCast(?*const anyopaque, init_vdso_clock_gettime);
|
||||||
|
|
||||||
// We must follow the C calling convention when we call into the VDSO
|
// We must follow the C calling convention when we call into the VDSO
|
||||||
const vdso_clock_gettime_ty = fn (i32, *timespec) callconv(.C) usize;
|
const vdso_clock_gettime_ty = fn (i32, *timespec) callconv(.C) usize;
|
||||||
|
|
||||||
pub fn clock_gettime(clk_id: i32, tp: *timespec) usize {
|
pub fn clock_gettime(clk_id: i32, tp: *timespec) usize {
|
||||||
if (@hasDecl(VDSO, "CGT_SYM")) {
|
if (@hasDecl(VDSO, "CGT_SYM")) {
|
||||||
const ptr = @atomicLoad(?*const c_void, &vdso_clock_gettime, .Unordered);
|
const ptr = @atomicLoad(?*const anyopaque, &vdso_clock_gettime, .Unordered);
|
||||||
if (ptr) |fn_ptr| {
|
if (ptr) |fn_ptr| {
|
||||||
const f = @ptrCast(vdso_clock_gettime_ty, fn_ptr);
|
const f = @ptrCast(vdso_clock_gettime_ty, fn_ptr);
|
||||||
const rc = f(clk_id, tp);
|
const rc = f(clk_id, tp);
|
||||||
@ -866,10 +866,10 @@ pub fn clock_gettime(clk_id: i32, tp: *timespec) usize {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn init_vdso_clock_gettime(clk: i32, ts: *timespec) callconv(.C) usize {
|
fn init_vdso_clock_gettime(clk: i32, ts: *timespec) callconv(.C) usize {
|
||||||
const ptr = @intToPtr(?*const c_void, vdso.lookup(VDSO.CGT_VER, VDSO.CGT_SYM));
|
const ptr = @intToPtr(?*const anyopaque, vdso.lookup(VDSO.CGT_VER, VDSO.CGT_SYM));
|
||||||
// Note that we may not have a VDSO at all, update the stub address anyway
|
// Note that we may not have a VDSO at all, update the stub address anyway
|
||||||
// so that clock_gettime will fall back on the good old (and slow) syscall
|
// so that clock_gettime will fall back on the good old (and slow) syscall
|
||||||
@atomicStore(?*const c_void, &vdso_clock_gettime, ptr, .Monotonic);
|
@atomicStore(?*const anyopaque, &vdso_clock_gettime, ptr, .Monotonic);
|
||||||
// Call into the VDSO if available
|
// Call into the VDSO if available
|
||||||
if (ptr) |fn_ptr| {
|
if (ptr) |fn_ptr| {
|
||||||
const f = @ptrCast(vdso_clock_gettime_ty, fn_ptr);
|
const f = @ptrCast(vdso_clock_gettime_ty, fn_ptr);
|
||||||
@ -1180,7 +1180,7 @@ pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr_const, vlen: u32, flags: u32) usize
|
|||||||
return syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @ptrToInt(msgvec), vlen, flags);
|
return syscall4(.sendmmsg, @bitCast(usize, @as(isize, fd)), @ptrToInt(msgvec), vlen, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn connect(fd: i32, addr: *const c_void, len: socklen_t) usize {
|
pub fn connect(fd: i32, addr: *const anyopaque, len: socklen_t) usize {
|
||||||
if (native_arch == .i386) {
|
if (native_arch == .i386) {
|
||||||
return socketcall(SC.connect, &[3]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), len });
|
return socketcall(SC.connect, &[3]usize{ @bitCast(usize, @as(isize, fd)), @ptrToInt(addr), len });
|
||||||
}
|
}
|
||||||
@ -1452,7 +1452,7 @@ pub fn io_uring_enter(fd: i32, to_submit: u32, min_complete: u32, flags: u32, si
|
|||||||
return syscall6(.io_uring_enter, @bitCast(usize, @as(isize, fd)), to_submit, min_complete, flags, @ptrToInt(sig), NSIG / 8);
|
return syscall6(.io_uring_enter, @bitCast(usize, @as(isize, fd)), to_submit, min_complete, flags, @ptrToInt(sig), NSIG / 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn io_uring_register(fd: i32, opcode: IORING_REGISTER, arg: ?*const c_void, nr_args: u32) usize {
|
pub fn io_uring_register(fd: i32, opcode: IORING_REGISTER, arg: ?*const anyopaque, nr_args: u32) usize {
|
||||||
return syscall4(.io_uring_register, @bitCast(usize, @as(isize, fd)), @enumToInt(opcode), @ptrToInt(arg), nr_args);
|
return syscall4(.io_uring_register, @bitCast(usize, @as(isize, fd)), @enumToInt(opcode), @ptrToInt(arg), nr_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3045,7 +3045,7 @@ pub const k_sigaction = switch (native_arch) {
|
|||||||
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
/// Renamed from `sigaction` to `Sigaction` to avoid conflict with the syscall.
|
||||||
pub const Sigaction = extern struct {
|
pub const Sigaction = extern struct {
|
||||||
pub const handler_fn = fn (c_int) callconv(.C) void;
|
pub const handler_fn = fn (c_int) callconv(.C) void;
|
||||||
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const c_void) callconv(.C) void;
|
pub const sigaction_fn = fn (c_int, *const siginfo_t, ?*const anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
handler: extern union {
|
handler: extern union {
|
||||||
handler: ?handler_fn,
|
handler: ?handler_fn,
|
||||||
@ -3342,7 +3342,7 @@ else
|
|||||||
|
|
||||||
pub const sigval = extern union {
|
pub const sigval = extern union {
|
||||||
int: i32,
|
int: i32,
|
||||||
ptr: *c_void,
|
ptr: *anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
const siginfo_fields_union = extern union {
|
const siginfo_fields_union = extern union {
|
||||||
@ -3368,12 +3368,12 @@ const siginfo_fields_union = extern union {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
sigfault: extern struct {
|
sigfault: extern struct {
|
||||||
addr: *c_void,
|
addr: *anyopaque,
|
||||||
addr_lsb: i16,
|
addr_lsb: i16,
|
||||||
first: extern union {
|
first: extern union {
|
||||||
addr_bnd: extern struct {
|
addr_bnd: extern struct {
|
||||||
lower: *c_void,
|
lower: *anyopaque,
|
||||||
upper: *c_void,
|
upper: *anyopaque,
|
||||||
},
|
},
|
||||||
pkey: u32,
|
pkey: u32,
|
||||||
},
|
},
|
||||||
@ -3383,7 +3383,7 @@ const siginfo_fields_union = extern union {
|
|||||||
fd: i32,
|
fd: i32,
|
||||||
},
|
},
|
||||||
sigsys: extern struct {
|
sigsys: extern struct {
|
||||||
call_addr: *c_void,
|
call_addr: *anyopaque,
|
||||||
syscall: i32,
|
syscall: i32,
|
||||||
native_arch: u32,
|
native_arch: u32,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -652,7 +652,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec,
|
msg_iov: [*]iovec,
|
||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
@ -662,7 +662,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec_const,
|
msg_iov: [*]iovec_const,
|
||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -504,7 +504,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_iov: [*]iovec,
|
msg_iov: [*]iovec,
|
||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
__pad1: i32 = 0,
|
__pad1: i32 = 0,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
__pad2: socklen_t = 0,
|
__pad2: socklen_t = 0,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
@ -516,7 +516,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_iov: [*]iovec_const,
|
msg_iov: [*]iovec_const,
|
||||||
msg_iovlen: i32,
|
msg_iovlen: i32,
|
||||||
__pad1: i32 = 0,
|
__pad1: i32 = 0,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
__pad2: socklen_t = 0,
|
__pad2: socklen_t = 0,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
|
|||||||
@ -11,22 +11,22 @@ const SkFullSock = @compileError("TODO missing os bits: SkFullSock");
|
|||||||
//
|
//
|
||||||
// Note, these function signatures were created from documentation found in
|
// Note, these function signatures were created from documentation found in
|
||||||
// '/usr/include/linux/bpf.h'
|
// '/usr/include/linux/bpf.h'
|
||||||
pub const map_lookup_elem = @intToPtr(fn (map: *const kern.MapDef, key: ?*const c_void) ?*c_void, 1);
|
pub const map_lookup_elem = @intToPtr(fn (map: *const kern.MapDef, key: ?*const anyopaque) ?*anyopaque, 1);
|
||||||
pub const map_update_elem = @intToPtr(fn (map: *const kern.MapDef, key: ?*const c_void, value: ?*const c_void, flags: u64) c_long, 2);
|
pub const map_update_elem = @intToPtr(fn (map: *const kern.MapDef, key: ?*const anyopaque, value: ?*const anyopaque, flags: u64) c_long, 2);
|
||||||
pub const map_delete_elem = @intToPtr(fn (map: *const kern.MapDef, key: ?*const c_void) c_long, 3);
|
pub const map_delete_elem = @intToPtr(fn (map: *const kern.MapDef, key: ?*const anyopaque) c_long, 3);
|
||||||
pub const probe_read = @intToPtr(fn (dst: ?*c_void, size: u32, unsafe_ptr: ?*const c_void) c_long, 4);
|
pub const probe_read = @intToPtr(fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 4);
|
||||||
pub const ktime_get_ns = @intToPtr(fn () u64, 5);
|
pub const ktime_get_ns = @intToPtr(fn () u64, 5);
|
||||||
pub const trace_printk = @intToPtr(fn (fmt: [*:0]const u8, fmt_size: u32, arg1: u64, arg2: u64, arg3: u64) c_long, 6);
|
pub const trace_printk = @intToPtr(fn (fmt: [*:0]const u8, fmt_size: u32, arg1: u64, arg2: u64, arg3: u64) c_long, 6);
|
||||||
pub const get_prandom_u32 = @intToPtr(fn () u32, 7);
|
pub const get_prandom_u32 = @intToPtr(fn () u32, 7);
|
||||||
pub const get_smp_processor_id = @intToPtr(fn () u32, 8);
|
pub const get_smp_processor_id = @intToPtr(fn () u32, 8);
|
||||||
pub const skb_store_bytes = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: ?*const c_void, len: u32, flags: u64) c_long, 9);
|
pub const skb_store_bytes = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: ?*const anyopaque, len: u32, flags: u64) c_long, 9);
|
||||||
pub const l3_csum_replace = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, size: u64) c_long, 10);
|
pub const l3_csum_replace = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, size: u64) c_long, 10);
|
||||||
pub const l4_csum_replace = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, flags: u64) c_long, 11);
|
pub const l4_csum_replace = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: u64, to: u64, flags: u64) c_long, 11);
|
||||||
pub const tail_call = @intToPtr(fn (ctx: ?*c_void, prog_array_map: *const kern.MapDef, index: u32) c_long, 12);
|
pub const tail_call = @intToPtr(fn (ctx: ?*anyopaque, prog_array_map: *const kern.MapDef, index: u32) c_long, 12);
|
||||||
pub const clone_redirect = @intToPtr(fn (skb: *kern.SkBuff, ifindex: u32, flags: u64) c_long, 13);
|
pub const clone_redirect = @intToPtr(fn (skb: *kern.SkBuff, ifindex: u32, flags: u64) c_long, 13);
|
||||||
pub const get_current_pid_tgid = @intToPtr(fn () u64, 14);
|
pub const get_current_pid_tgid = @intToPtr(fn () u64, 14);
|
||||||
pub const get_current_uid_gid = @intToPtr(fn () u64, 15);
|
pub const get_current_uid_gid = @intToPtr(fn () u64, 15);
|
||||||
pub const get_current_comm = @intToPtr(fn (buf: ?*c_void, size_of_buf: u32) c_long, 16);
|
pub const get_current_comm = @intToPtr(fn (buf: ?*anyopaque, size_of_buf: u32) c_long, 16);
|
||||||
pub const get_cgroup_classid = @intToPtr(fn (skb: *kern.SkBuff) u32, 17);
|
pub const get_cgroup_classid = @intToPtr(fn (skb: *kern.SkBuff) u32, 17);
|
||||||
// Note vlan_proto is big endian
|
// Note vlan_proto is big endian
|
||||||
pub const skb_vlan_push = @intToPtr(fn (skb: *kern.SkBuff, vlan_proto: u16, vlan_tci: u16) c_long, 18);
|
pub const skb_vlan_push = @intToPtr(fn (skb: *kern.SkBuff, vlan_proto: u16, vlan_tci: u16) c_long, 18);
|
||||||
@ -36,20 +36,20 @@ pub const skb_set_tunnel_key = @intToPtr(fn (skb: *kern.SkBuff, key: *kern.Tunne
|
|||||||
pub const perf_event_read = @intToPtr(fn (map: *const kern.MapDef, flags: u64) u64, 22);
|
pub const perf_event_read = @intToPtr(fn (map: *const kern.MapDef, flags: u64) u64, 22);
|
||||||
pub const redirect = @intToPtr(fn (ifindex: u32, flags: u64) c_long, 23);
|
pub const redirect = @intToPtr(fn (ifindex: u32, flags: u64) c_long, 23);
|
||||||
pub const get_route_realm = @intToPtr(fn (skb: *kern.SkBuff) u32, 24);
|
pub const get_route_realm = @intToPtr(fn (skb: *kern.SkBuff) u32, 24);
|
||||||
pub const perf_event_output = @intToPtr(fn (ctx: ?*c_void, map: *const kern.MapDef, flags: u64, data: ?*c_void, size: u64) c_long, 25);
|
pub const perf_event_output = @intToPtr(fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 25);
|
||||||
pub const skb_load_bytes = @intToPtr(fn (skb: ?*c_void, offset: u32, to: ?*c_void, len: u32) c_long, 26);
|
pub const skb_load_bytes = @intToPtr(fn (skb: ?*anyopaque, offset: u32, to: ?*anyopaque, len: u32) c_long, 26);
|
||||||
pub const get_stackid = @intToPtr(fn (ctx: ?*c_void, map: *const kern.MapDef, flags: u64) c_long, 27);
|
pub const get_stackid = @intToPtr(fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64) c_long, 27);
|
||||||
// from and to point to __be32
|
// from and to point to __be32
|
||||||
pub const csum_diff = @intToPtr(fn (from: *u32, from_size: u32, to: *u32, to_size: u32, seed: u32) i64, 28);
|
pub const csum_diff = @intToPtr(fn (from: *u32, from_size: u32, to: *u32, to_size: u32, seed: u32) i64, 28);
|
||||||
pub const skb_get_tunnel_opt = @intToPtr(fn (skb: *kern.SkBuff, opt: ?*c_void, size: u32) c_long, 29);
|
pub const skb_get_tunnel_opt = @intToPtr(fn (skb: *kern.SkBuff, opt: ?*anyopaque, size: u32) c_long, 29);
|
||||||
pub const skb_set_tunnel_opt = @intToPtr(fn (skb: *kern.SkBuff, opt: ?*c_void, size: u32) c_long, 30);
|
pub const skb_set_tunnel_opt = @intToPtr(fn (skb: *kern.SkBuff, opt: ?*anyopaque, size: u32) c_long, 30);
|
||||||
// proto is __be16
|
// proto is __be16
|
||||||
pub const skb_change_proto = @intToPtr(fn (skb: *kern.SkBuff, proto: u16, flags: u64) c_long, 31);
|
pub const skb_change_proto = @intToPtr(fn (skb: *kern.SkBuff, proto: u16, flags: u64) c_long, 31);
|
||||||
pub const skb_change_type = @intToPtr(fn (skb: *kern.SkBuff, skb_type: u32) c_long, 32);
|
pub const skb_change_type = @intToPtr(fn (skb: *kern.SkBuff, skb_type: u32) c_long, 32);
|
||||||
pub const skb_under_cgroup = @intToPtr(fn (skb: *kern.SkBuff, map: ?*const c_void, index: u32) c_long, 33);
|
pub const skb_under_cgroup = @intToPtr(fn (skb: *kern.SkBuff, map: ?*const anyopaque, index: u32) c_long, 33);
|
||||||
pub const get_hash_recalc = @intToPtr(fn (skb: *kern.SkBuff) u32, 34);
|
pub const get_hash_recalc = @intToPtr(fn (skb: *kern.SkBuff) u32, 34);
|
||||||
pub const get_current_task = @intToPtr(fn () u64, 35);
|
pub const get_current_task = @intToPtr(fn () u64, 35);
|
||||||
pub const probe_write_user = @intToPtr(fn (dst: ?*c_void, src: ?*const c_void, len: u32) c_long, 36);
|
pub const probe_write_user = @intToPtr(fn (dst: ?*anyopaque, src: ?*const anyopaque, len: u32) c_long, 36);
|
||||||
pub const current_task_under_cgroup = @intToPtr(fn (map: *const kern.MapDef, index: u32) c_long, 37);
|
pub const current_task_under_cgroup = @intToPtr(fn (map: *const kern.MapDef, index: u32) c_long, 37);
|
||||||
pub const skb_change_tail = @intToPtr(fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 38);
|
pub const skb_change_tail = @intToPtr(fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 38);
|
||||||
pub const skb_pull_data = @intToPtr(fn (skb: *kern.SkBuff, len: u32) c_long, 39);
|
pub const skb_pull_data = @intToPtr(fn (skb: *kern.SkBuff, len: u32) c_long, 39);
|
||||||
@ -58,19 +58,19 @@ pub const set_hash_invalid = @intToPtr(fn (skb: *kern.SkBuff) void, 41);
|
|||||||
pub const get_numa_node_id = @intToPtr(fn () c_long, 42);
|
pub const get_numa_node_id = @intToPtr(fn () c_long, 42);
|
||||||
pub const skb_change_head = @intToPtr(fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 43);
|
pub const skb_change_head = @intToPtr(fn (skb: *kern.SkBuff, len: u32, flags: u64) c_long, 43);
|
||||||
pub const xdp_adjust_head = @intToPtr(fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 44);
|
pub const xdp_adjust_head = @intToPtr(fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 44);
|
||||||
pub const probe_read_str = @intToPtr(fn (dst: ?*c_void, size: u32, unsafe_ptr: ?*const c_void) c_long, 45);
|
pub const probe_read_str = @intToPtr(fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 45);
|
||||||
pub const get_socket_cookie = @intToPtr(fn (ctx: ?*c_void) u64, 46);
|
pub const get_socket_cookie = @intToPtr(fn (ctx: ?*anyopaque) u64, 46);
|
||||||
pub const get_socket_uid = @intToPtr(fn (skb: *kern.SkBuff) u32, 47);
|
pub const get_socket_uid = @intToPtr(fn (skb: *kern.SkBuff) u32, 47);
|
||||||
pub const set_hash = @intToPtr(fn (skb: *kern.SkBuff, hash: u32) c_long, 48);
|
pub const set_hash = @intToPtr(fn (skb: *kern.SkBuff, hash: u32) c_long, 48);
|
||||||
pub const setsockopt = @intToPtr(fn (bpf_socket: *kern.SockOps, level: c_int, optname: c_int, optval: ?*c_void, optlen: c_int) c_long, 49);
|
pub const setsockopt = @intToPtr(fn (bpf_socket: *kern.SockOps, level: c_int, optname: c_int, optval: ?*anyopaque, optlen: c_int) c_long, 49);
|
||||||
pub const skb_adjust_room = @intToPtr(fn (skb: *kern.SkBuff, len_diff: i32, mode: u32, flags: u64) c_long, 50);
|
pub const skb_adjust_room = @intToPtr(fn (skb: *kern.SkBuff, len_diff: i32, mode: u32, flags: u64) c_long, 50);
|
||||||
pub const redirect_map = @intToPtr(fn (map: *const kern.MapDef, key: u32, flags: u64) c_long, 51);
|
pub const redirect_map = @intToPtr(fn (map: *const kern.MapDef, key: u32, flags: u64) c_long, 51);
|
||||||
pub const sk_redirect_map = @intToPtr(fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: u32, flags: u64) c_long, 52);
|
pub const sk_redirect_map = @intToPtr(fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: u32, flags: u64) c_long, 52);
|
||||||
pub const sock_map_update = @intToPtr(fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*c_void, flags: u64) c_long, 53);
|
pub const sock_map_update = @intToPtr(fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 53);
|
||||||
pub const xdp_adjust_meta = @intToPtr(fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 54);
|
pub const xdp_adjust_meta = @intToPtr(fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 54);
|
||||||
pub const perf_event_read_value = @intToPtr(fn (map: *const kern.MapDef, flags: u64, buf: *kern.PerfEventValue, buf_size: u32) c_long, 55);
|
pub const perf_event_read_value = @intToPtr(fn (map: *const kern.MapDef, flags: u64, buf: *kern.PerfEventValue, buf_size: u32) c_long, 55);
|
||||||
pub const perf_prog_read_value = @intToPtr(fn (ctx: *kern.PerfEventData, buf: *kern.PerfEventValue, buf_size: u32) c_long, 56);
|
pub const perf_prog_read_value = @intToPtr(fn (ctx: *kern.PerfEventData, buf: *kern.PerfEventValue, buf_size: u32) c_long, 56);
|
||||||
pub const getsockopt = @intToPtr(fn (bpf_socket: ?*c_void, level: c_int, optname: c_int, optval: ?*c_void, optlen: c_int) c_long, 57);
|
pub const getsockopt = @intToPtr(fn (bpf_socket: ?*anyopaque, level: c_int, optname: c_int, optval: ?*anyopaque, optlen: c_int) c_long, 57);
|
||||||
pub const override_return = @intToPtr(fn (regs: *PtRegs, rc: u64) c_long, 58);
|
pub const override_return = @intToPtr(fn (regs: *PtRegs, rc: u64) c_long, 58);
|
||||||
pub const sock_ops_cb_flags_set = @intToPtr(fn (bpf_sock: *kern.SockOps, argval: c_int) c_long, 59);
|
pub const sock_ops_cb_flags_set = @intToPtr(fn (bpf_sock: *kern.SockOps, argval: c_int) c_long, 59);
|
||||||
pub const msg_redirect_map = @intToPtr(fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: u32, flags: u64) c_long, 60);
|
pub const msg_redirect_map = @intToPtr(fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: u32, flags: u64) c_long, 60);
|
||||||
@ -80,78 +80,78 @@ pub const msg_pull_data = @intToPtr(fn (msg: *kern.SkMsgMd, start: u32, end: u32
|
|||||||
pub const bind = @intToPtr(fn (ctx: *kern.BpfSockAddr, addr: *kern.SockAddr, addr_len: c_int) c_long, 64);
|
pub const bind = @intToPtr(fn (ctx: *kern.BpfSockAddr, addr: *kern.SockAddr, addr_len: c_int) c_long, 64);
|
||||||
pub const xdp_adjust_tail = @intToPtr(fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 65);
|
pub const xdp_adjust_tail = @intToPtr(fn (xdp_md: *kern.XdpMd, delta: c_int) c_long, 65);
|
||||||
pub const skb_get_xfrm_state = @intToPtr(fn (skb: *kern.SkBuff, index: u32, xfrm_state: *kern.XfrmState, size: u32, flags: u64) c_long, 66);
|
pub const skb_get_xfrm_state = @intToPtr(fn (skb: *kern.SkBuff, index: u32, xfrm_state: *kern.XfrmState, size: u32, flags: u64) c_long, 66);
|
||||||
pub const get_stack = @intToPtr(fn (ctx: ?*c_void, buf: ?*c_void, size: u32, flags: u64) c_long, 67);
|
pub const get_stack = @intToPtr(fn (ctx: ?*anyopaque, buf: ?*anyopaque, size: u32, flags: u64) c_long, 67);
|
||||||
pub const skb_load_bytes_relative = @intToPtr(fn (skb: ?*const c_void, offset: u32, to: ?*c_void, len: u32, start_header: u32) c_long, 68);
|
pub const skb_load_bytes_relative = @intToPtr(fn (skb: ?*const anyopaque, offset: u32, to: ?*anyopaque, len: u32, start_header: u32) c_long, 68);
|
||||||
pub const fib_lookup = @intToPtr(fn (ctx: ?*c_void, params: *kern.FibLookup, plen: c_int, flags: u32) c_long, 69);
|
pub const fib_lookup = @intToPtr(fn (ctx: ?*anyopaque, params: *kern.FibLookup, plen: c_int, flags: u32) c_long, 69);
|
||||||
pub const sock_hash_update = @intToPtr(fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*c_void, flags: u64) c_long, 70);
|
pub const sock_hash_update = @intToPtr(fn (skops: *kern.SockOps, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 70);
|
||||||
pub const msg_redirect_hash = @intToPtr(fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: ?*c_void, flags: u64) c_long, 71);
|
pub const msg_redirect_hash = @intToPtr(fn (msg: *kern.SkMsgMd, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 71);
|
||||||
pub const sk_redirect_hash = @intToPtr(fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: ?*c_void, flags: u64) c_long, 72);
|
pub const sk_redirect_hash = @intToPtr(fn (skb: *kern.SkBuff, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 72);
|
||||||
pub const lwt_push_encap = @intToPtr(fn (skb: *kern.SkBuff, typ: u32, hdr: ?*c_void, len: u32) c_long, 73);
|
pub const lwt_push_encap = @intToPtr(fn (skb: *kern.SkBuff, typ: u32, hdr: ?*anyopaque, len: u32) c_long, 73);
|
||||||
pub const lwt_seg6_store_bytes = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: ?*const c_void, len: u32) c_long, 74);
|
pub const lwt_seg6_store_bytes = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, from: ?*const anyopaque, len: u32) c_long, 74);
|
||||||
pub const lwt_seg6_adjust_srh = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, delta: i32) c_long, 75);
|
pub const lwt_seg6_adjust_srh = @intToPtr(fn (skb: *kern.SkBuff, offset: u32, delta: i32) c_long, 75);
|
||||||
pub const lwt_seg6_action = @intToPtr(fn (skb: *kern.SkBuff, action: u32, param: ?*c_void, param_len: u32) c_long, 76);
|
pub const lwt_seg6_action = @intToPtr(fn (skb: *kern.SkBuff, action: u32, param: ?*anyopaque, param_len: u32) c_long, 76);
|
||||||
pub const rc_repeat = @intToPtr(fn (ctx: ?*c_void) c_long, 77);
|
pub const rc_repeat = @intToPtr(fn (ctx: ?*anyopaque) c_long, 77);
|
||||||
pub const rc_keydown = @intToPtr(fn (ctx: ?*c_void, protocol: u32, scancode: u64, toggle: u32) c_long, 78);
|
pub const rc_keydown = @intToPtr(fn (ctx: ?*anyopaque, protocol: u32, scancode: u64, toggle: u32) c_long, 78);
|
||||||
pub const skb_cgroup_id = @intToPtr(fn (skb: *kern.SkBuff) u64, 79);
|
pub const skb_cgroup_id = @intToPtr(fn (skb: *kern.SkBuff) u64, 79);
|
||||||
pub const get_current_cgroup_id = @intToPtr(fn () u64, 80);
|
pub const get_current_cgroup_id = @intToPtr(fn () u64, 80);
|
||||||
pub const get_local_storage = @intToPtr(fn (map: ?*c_void, flags: u64) ?*c_void, 81);
|
pub const get_local_storage = @intToPtr(fn (map: ?*anyopaque, flags: u64) ?*anyopaque, 81);
|
||||||
pub const sk_select_reuseport = @intToPtr(fn (reuse: *kern.SkReusePortMd, map: *const kern.MapDef, key: ?*c_void, flags: u64) c_long, 82);
|
pub const sk_select_reuseport = @intToPtr(fn (reuse: *kern.SkReusePortMd, map: *const kern.MapDef, key: ?*anyopaque, flags: u64) c_long, 82);
|
||||||
pub const skb_ancestor_cgroup_id = @intToPtr(fn (skb: *kern.SkBuff, ancestor_level: c_int) u64, 83);
|
pub const skb_ancestor_cgroup_id = @intToPtr(fn (skb: *kern.SkBuff, ancestor_level: c_int) u64, 83);
|
||||||
pub const sk_lookup_tcp = @intToPtr(fn (ctx: ?*c_void, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 84);
|
pub const sk_lookup_tcp = @intToPtr(fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 84);
|
||||||
pub const sk_lookup_udp = @intToPtr(fn (ctx: ?*c_void, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 85);
|
pub const sk_lookup_udp = @intToPtr(fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 85);
|
||||||
pub const sk_release = @intToPtr(fn (sock: *kern.Sock) c_long, 86);
|
pub const sk_release = @intToPtr(fn (sock: *kern.Sock) c_long, 86);
|
||||||
pub const map_push_elem = @intToPtr(fn (map: *const kern.MapDef, value: ?*const c_void, flags: u64) c_long, 87);
|
pub const map_push_elem = @intToPtr(fn (map: *const kern.MapDef, value: ?*const anyopaque, flags: u64) c_long, 87);
|
||||||
pub const map_pop_elem = @intToPtr(fn (map: *const kern.MapDef, value: ?*c_void) c_long, 88);
|
pub const map_pop_elem = @intToPtr(fn (map: *const kern.MapDef, value: ?*anyopaque) c_long, 88);
|
||||||
pub const map_peek_elem = @intToPtr(fn (map: *const kern.MapDef, value: ?*c_void) c_long, 89);
|
pub const map_peek_elem = @intToPtr(fn (map: *const kern.MapDef, value: ?*anyopaque) c_long, 89);
|
||||||
pub const msg_push_data = @intToPtr(fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 90);
|
pub const msg_push_data = @intToPtr(fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 90);
|
||||||
pub const msg_pop_data = @intToPtr(fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 91);
|
pub const msg_pop_data = @intToPtr(fn (msg: *kern.SkMsgMd, start: u32, len: u32, flags: u64) c_long, 91);
|
||||||
pub const rc_pointer_rel = @intToPtr(fn (ctx: ?*c_void, rel_x: i32, rel_y: i32) c_long, 92);
|
pub const rc_pointer_rel = @intToPtr(fn (ctx: ?*anyopaque, rel_x: i32, rel_y: i32) c_long, 92);
|
||||||
pub const spin_lock = @intToPtr(fn (lock: *kern.SpinLock) c_long, 93);
|
pub const spin_lock = @intToPtr(fn (lock: *kern.SpinLock) c_long, 93);
|
||||||
pub const spin_unlock = @intToPtr(fn (lock: *kern.SpinLock) c_long, 94);
|
pub const spin_unlock = @intToPtr(fn (lock: *kern.SpinLock) c_long, 94);
|
||||||
pub const sk_fullsock = @intToPtr(fn (sk: *kern.Sock) ?*SkFullSock, 95);
|
pub const sk_fullsock = @intToPtr(fn (sk: *kern.Sock) ?*SkFullSock, 95);
|
||||||
pub const tcp_sock = @intToPtr(fn (sk: *kern.Sock) ?*kern.TcpSock, 96);
|
pub const tcp_sock = @intToPtr(fn (sk: *kern.Sock) ?*kern.TcpSock, 96);
|
||||||
pub const skb_ecn_set_ce = @intToPtr(fn (skb: *kern.SkBuff) c_long, 97);
|
pub const skb_ecn_set_ce = @intToPtr(fn (skb: *kern.SkBuff) c_long, 97);
|
||||||
pub const get_listener_sock = @intToPtr(fn (sk: *kern.Sock) ?*kern.Sock, 98);
|
pub const get_listener_sock = @intToPtr(fn (sk: *kern.Sock) ?*kern.Sock, 98);
|
||||||
pub const skc_lookup_tcp = @intToPtr(fn (ctx: ?*c_void, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 99);
|
pub const skc_lookup_tcp = @intToPtr(fn (ctx: ?*anyopaque, tuple: *kern.SockTuple, tuple_size: u32, netns: u64, flags: u64) ?*kern.Sock, 99);
|
||||||
pub const tcp_check_syncookie = @intToPtr(fn (sk: *kern.Sock, iph: ?*c_void, iph_len: u32, th: *TcpHdr, th_len: u32) c_long, 100);
|
pub const tcp_check_syncookie = @intToPtr(fn (sk: *kern.Sock, iph: ?*anyopaque, iph_len: u32, th: *TcpHdr, th_len: u32) c_long, 100);
|
||||||
pub const sysctl_get_name = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong, flags: u64) c_long, 101);
|
pub const sysctl_get_name = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong, flags: u64) c_long, 101);
|
||||||
pub const sysctl_get_current_value = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 102);
|
pub const sysctl_get_current_value = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 102);
|
||||||
pub const sysctl_get_new_value = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 103);
|
pub const sysctl_get_new_value = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*u8, buf_len: c_ulong) c_long, 103);
|
||||||
pub const sysctl_set_new_value = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*const u8, buf_len: c_ulong) c_long, 104);
|
pub const sysctl_set_new_value = @intToPtr(fn (ctx: *kern.SysCtl, buf: ?*const u8, buf_len: c_ulong) c_long, 104);
|
||||||
pub const strtol = @intToPtr(fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_long) c_long, 105);
|
pub const strtol = @intToPtr(fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_long) c_long, 105);
|
||||||
pub const strtoul = @intToPtr(fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_ulong) c_long, 106);
|
pub const strtoul = @intToPtr(fn (buf: *const u8, buf_len: c_ulong, flags: u64, res: *c_ulong) c_long, 106);
|
||||||
pub const sk_storage_get = @intToPtr(fn (map: *const kern.MapDef, sk: *kern.Sock, value: ?*c_void, flags: u64) ?*c_void, 107);
|
pub const sk_storage_get = @intToPtr(fn (map: *const kern.MapDef, sk: *kern.Sock, value: ?*anyopaque, flags: u64) ?*anyopaque, 107);
|
||||||
pub const sk_storage_delete = @intToPtr(fn (map: *const kern.MapDef, sk: *kern.Sock) c_long, 108);
|
pub const sk_storage_delete = @intToPtr(fn (map: *const kern.MapDef, sk: *kern.Sock) c_long, 108);
|
||||||
pub const send_signal = @intToPtr(fn (sig: u32) c_long, 109);
|
pub const send_signal = @intToPtr(fn (sig: u32) c_long, 109);
|
||||||
pub const tcp_gen_syncookie = @intToPtr(fn (sk: *kern.Sock, iph: ?*c_void, iph_len: u32, th: *TcpHdr, th_len: u32) i64, 110);
|
pub const tcp_gen_syncookie = @intToPtr(fn (sk: *kern.Sock, iph: ?*anyopaque, iph_len: u32, th: *TcpHdr, th_len: u32) i64, 110);
|
||||||
pub const skb_output = @intToPtr(fn (ctx: ?*c_void, map: *const kern.MapDef, flags: u64, data: ?*c_void, size: u64) c_long, 111);
|
pub const skb_output = @intToPtr(fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 111);
|
||||||
pub const probe_read_user = @intToPtr(fn (dst: ?*c_void, size: u32, unsafe_ptr: ?*const c_void) c_long, 112);
|
pub const probe_read_user = @intToPtr(fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 112);
|
||||||
pub const probe_read_kernel = @intToPtr(fn (dst: ?*c_void, size: u32, unsafe_ptr: ?*const c_void) c_long, 113);
|
pub const probe_read_kernel = @intToPtr(fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 113);
|
||||||
pub const probe_read_user_str = @intToPtr(fn (dst: ?*c_void, size: u32, unsafe_ptr: ?*const c_void) c_long, 114);
|
pub const probe_read_user_str = @intToPtr(fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 114);
|
||||||
pub const probe_read_kernel_str = @intToPtr(fn (dst: ?*c_void, size: u32, unsafe_ptr: ?*const c_void) c_long, 115);
|
pub const probe_read_kernel_str = @intToPtr(fn (dst: ?*anyopaque, size: u32, unsafe_ptr: ?*const anyopaque) c_long, 115);
|
||||||
pub const tcp_send_ack = @intToPtr(fn (tp: ?*c_void, rcv_nxt: u32) c_long, 116);
|
pub const tcp_send_ack = @intToPtr(fn (tp: ?*anyopaque, rcv_nxt: u32) c_long, 116);
|
||||||
pub const send_signal_thread = @intToPtr(fn (sig: u32) c_long, 117);
|
pub const send_signal_thread = @intToPtr(fn (sig: u32) c_long, 117);
|
||||||
pub const jiffies64 = @intToPtr(fn () u64, 118);
|
pub const jiffies64 = @intToPtr(fn () u64, 118);
|
||||||
pub const read_branch_records = @intToPtr(fn (ctx: *kern.PerfEventData, buf: ?*c_void, size: u32, flags: u64) c_long, 119);
|
pub const read_branch_records = @intToPtr(fn (ctx: *kern.PerfEventData, buf: ?*anyopaque, size: u32, flags: u64) c_long, 119);
|
||||||
pub const get_ns_current_pid_tgid = @intToPtr(fn (dev: u64, ino: u64, nsdata: *kern.PidNsInfo, size: u32) c_long, 120);
|
pub const get_ns_current_pid_tgid = @intToPtr(fn (dev: u64, ino: u64, nsdata: *kern.PidNsInfo, size: u32) c_long, 120);
|
||||||
pub const xdp_output = @intToPtr(fn (ctx: ?*c_void, map: *const kern.MapDef, flags: u64, data: ?*c_void, size: u64) c_long, 121);
|
pub const xdp_output = @intToPtr(fn (ctx: ?*anyopaque, map: *const kern.MapDef, flags: u64, data: ?*anyopaque, size: u64) c_long, 121);
|
||||||
pub const get_netns_cookie = @intToPtr(fn (ctx: ?*c_void) u64, 122);
|
pub const get_netns_cookie = @intToPtr(fn (ctx: ?*anyopaque) u64, 122);
|
||||||
pub const get_current_ancestor_cgroup_id = @intToPtr(fn (ancestor_level: c_int) u64, 123);
|
pub const get_current_ancestor_cgroup_id = @intToPtr(fn (ancestor_level: c_int) u64, 123);
|
||||||
pub const sk_assign = @intToPtr(fn (skb: *kern.SkBuff, sk: *kern.Sock, flags: u64) c_long, 124);
|
pub const sk_assign = @intToPtr(fn (skb: *kern.SkBuff, sk: *kern.Sock, flags: u64) c_long, 124);
|
||||||
pub const ktime_get_boot_ns = @intToPtr(fn () u64, 125);
|
pub const ktime_get_boot_ns = @intToPtr(fn () u64, 125);
|
||||||
pub const seq_printf = @intToPtr(fn (m: *kern.SeqFile, fmt: ?*const u8, fmt_size: u32, data: ?*const c_void, data_len: u32) c_long, 126);
|
pub const seq_printf = @intToPtr(fn (m: *kern.SeqFile, fmt: ?*const u8, fmt_size: u32, data: ?*const anyopaque, data_len: u32) c_long, 126);
|
||||||
pub const seq_write = @intToPtr(fn (m: *kern.SeqFile, data: ?*const u8, len: u32) c_long, 127);
|
pub const seq_write = @intToPtr(fn (m: *kern.SeqFile, data: ?*const u8, len: u32) c_long, 127);
|
||||||
pub const sk_cgroup_id = @intToPtr(fn (sk: *kern.BpfSock) u64, 128);
|
pub const sk_cgroup_id = @intToPtr(fn (sk: *kern.BpfSock) u64, 128);
|
||||||
pub const sk_ancestor_cgroup_id = @intToPtr(fn (sk: *kern.BpfSock, ancestor_level: c_long) u64, 129);
|
pub const sk_ancestor_cgroup_id = @intToPtr(fn (sk: *kern.BpfSock, ancestor_level: c_long) u64, 129);
|
||||||
pub const ringbuf_output = @intToPtr(fn (ringbuf: ?*c_void, data: ?*c_void, size: u64, flags: u64) ?*c_void, 130);
|
pub const ringbuf_output = @intToPtr(fn (ringbuf: ?*anyopaque, data: ?*anyopaque, size: u64, flags: u64) ?*anyopaque, 130);
|
||||||
pub const ringbuf_reserve = @intToPtr(fn (ringbuf: ?*c_void, size: u64, flags: u64) ?*c_void, 131);
|
pub const ringbuf_reserve = @intToPtr(fn (ringbuf: ?*anyopaque, size: u64, flags: u64) ?*anyopaque, 131);
|
||||||
pub const ringbuf_submit = @intToPtr(fn (data: ?*c_void, flags: u64) void, 132);
|
pub const ringbuf_submit = @intToPtr(fn (data: ?*anyopaque, flags: u64) void, 132);
|
||||||
pub const ringbuf_discard = @intToPtr(fn (data: ?*c_void, flags: u64) void, 133);
|
pub const ringbuf_discard = @intToPtr(fn (data: ?*anyopaque, flags: u64) void, 133);
|
||||||
pub const ringbuf_query = @intToPtr(fn (ringbuf: ?*c_void, flags: u64) u64, 134);
|
pub const ringbuf_query = @intToPtr(fn (ringbuf: ?*anyopaque, flags: u64) u64, 134);
|
||||||
pub const csum_level = @intToPtr(fn (skb: *kern.SkBuff, level: u64) c_long, 135);
|
pub const csum_level = @intToPtr(fn (skb: *kern.SkBuff, level: u64) c_long, 135);
|
||||||
pub const skc_to_tcp6_sock = @intToPtr(fn (sk: ?*c_void) ?*kern.Tcp6Sock, 136);
|
pub const skc_to_tcp6_sock = @intToPtr(fn (sk: ?*anyopaque) ?*kern.Tcp6Sock, 136);
|
||||||
pub const skc_to_tcp_sock = @intToPtr(fn (sk: ?*c_void) ?*kern.TcpSock, 137);
|
pub const skc_to_tcp_sock = @intToPtr(fn (sk: ?*anyopaque) ?*kern.TcpSock, 137);
|
||||||
pub const skc_to_tcp_timewait_sock = @intToPtr(fn (sk: ?*c_void) ?*kern.TcpTimewaitSock, 138);
|
pub const skc_to_tcp_timewait_sock = @intToPtr(fn (sk: ?*anyopaque) ?*kern.TcpTimewaitSock, 138);
|
||||||
pub const skc_to_tcp_request_sock = @intToPtr(fn (sk: ?*c_void) ?*kern.TcpRequestSock, 139);
|
pub const skc_to_tcp_request_sock = @intToPtr(fn (sk: ?*anyopaque) ?*kern.TcpRequestSock, 139);
|
||||||
pub const skc_to_udp6_sock = @intToPtr(fn (sk: ?*c_void) ?*kern.Udp6Sock, 140);
|
pub const skc_to_udp6_sock = @intToPtr(fn (sk: ?*anyopaque) ?*kern.Udp6Sock, 140);
|
||||||
pub const get_task_stack = @intToPtr(fn (task: ?*c_void, buf: ?*c_void, size: u32, flags: u64) c_long, 141);
|
pub const get_task_stack = @intToPtr(fn (task: ?*anyopaque, buf: ?*anyopaque, size: u32, flags: u64) c_long, 141);
|
||||||
|
|||||||
@ -660,7 +660,7 @@ pub const msghdr = extern struct {
|
|||||||
namelen: socklen_t,
|
namelen: socklen_t,
|
||||||
iov: [*]iovec,
|
iov: [*]iovec,
|
||||||
iovlen: i32,
|
iovlen: i32,
|
||||||
control: ?*c_void,
|
control: ?*anyopaque,
|
||||||
controllen: socklen_t,
|
controllen: socklen_t,
|
||||||
flags: i32,
|
flags: i32,
|
||||||
};
|
};
|
||||||
@ -670,7 +670,7 @@ pub const msghdr_const = extern struct {
|
|||||||
namelen: socklen_t,
|
namelen: socklen_t,
|
||||||
iov: [*]iovec_const,
|
iov: [*]iovec_const,
|
||||||
iovlen: i32,
|
iovlen: i32,
|
||||||
control: ?*c_void,
|
control: ?*anyopaque,
|
||||||
controllen: socklen_t,
|
controllen: socklen_t,
|
||||||
flags: i32,
|
flags: i32,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -841,7 +841,7 @@ pub const IO_Uring = struct {
|
|||||||
const res = linux.io_uring_register(
|
const res = linux.io_uring_register(
|
||||||
self.fd,
|
self.fd,
|
||||||
.REGISTER_FILES,
|
.REGISTER_FILES,
|
||||||
@ptrCast(*const c_void, fds.ptr),
|
@ptrCast(*const anyopaque, fds.ptr),
|
||||||
@intCast(u32, fds.len),
|
@intCast(u32, fds.len),
|
||||||
);
|
);
|
||||||
try handle_registration_result(res);
|
try handle_registration_result(res);
|
||||||
@ -872,7 +872,7 @@ pub const IO_Uring = struct {
|
|||||||
const res = linux.io_uring_register(
|
const res = linux.io_uring_register(
|
||||||
self.fd,
|
self.fd,
|
||||||
.REGISTER_FILES_UPDATE,
|
.REGISTER_FILES_UPDATE,
|
||||||
@ptrCast(*const c_void, &update),
|
@ptrCast(*const anyopaque, &update),
|
||||||
@intCast(u32, fds.len),
|
@intCast(u32, fds.len),
|
||||||
);
|
);
|
||||||
try handle_registration_result(res);
|
try handle_registration_result(res);
|
||||||
@ -886,7 +886,7 @@ pub const IO_Uring = struct {
|
|||||||
const res = linux.io_uring_register(
|
const res = linux.io_uring_register(
|
||||||
self.fd,
|
self.fd,
|
||||||
.REGISTER_EVENTFD,
|
.REGISTER_EVENTFD,
|
||||||
@ptrCast(*const c_void, &fd),
|
@ptrCast(*const anyopaque, &fd),
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
try handle_registration_result(res);
|
try handle_registration_result(res);
|
||||||
@ -901,7 +901,7 @@ pub const IO_Uring = struct {
|
|||||||
const res = linux.io_uring_register(
|
const res = linux.io_uring_register(
|
||||||
self.fd,
|
self.fd,
|
||||||
.REGISTER_EVENTFD_ASYNC,
|
.REGISTER_EVENTFD_ASYNC,
|
||||||
@ptrCast(*const c_void, &fd),
|
@ptrCast(*const anyopaque, &fd),
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
try handle_registration_result(res);
|
try handle_registration_result(res);
|
||||||
@ -1307,7 +1307,7 @@ pub fn io_uring_prep_poll_add(
|
|||||||
fd: os.fd_t,
|
fd: os.fd_t,
|
||||||
poll_mask: u32,
|
poll_mask: u32,
|
||||||
) void {
|
) void {
|
||||||
io_uring_prep_rw(.POLL_ADD, sqe, fd, @ptrToInt(@as(?*c_void, null)), 0, 0);
|
io_uring_prep_rw(.POLL_ADD, sqe, fd, @ptrToInt(@as(?*anyopaque, null)), 0, 0);
|
||||||
sqe.rw_flags = __io_uring_prep_poll_mask(poll_mask);
|
sqe.rw_flags = __io_uring_prep_poll_mask(poll_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -655,7 +655,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec,
|
msg_iov: [*]iovec,
|
||||||
msg_iovlen: usize,
|
msg_iovlen: usize,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
@ -665,7 +665,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec_const,
|
msg_iov: [*]iovec_const,
|
||||||
msg_iovlen: usize,
|
msg_iovlen: usize,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: socklen_t,
|
msg_controllen: socklen_t,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -630,7 +630,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec,
|
msg_iov: [*]iovec,
|
||||||
msg_iovlen: usize,
|
msg_iovlen: usize,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: usize,
|
msg_controllen: usize,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
@ -640,7 +640,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec_const,
|
msg_iov: [*]iovec_const,
|
||||||
msg_iovlen: usize,
|
msg_iovlen: usize,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: usize,
|
msg_controllen: usize,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
@ -718,7 +718,7 @@ pub const mcontext_t = extern struct {
|
|||||||
_pad0: i32,
|
_pad0: i32,
|
||||||
handler: u64,
|
handler: u64,
|
||||||
oldmask: u64,
|
oldmask: u64,
|
||||||
regs: ?*c_void,
|
regs: ?*anyopaque,
|
||||||
gp_regs: gregset_t,
|
gp_regs: gregset_t,
|
||||||
fp_regs: fpregset_t,
|
fp_regs: fpregset_t,
|
||||||
v_regs: *vrregset_t,
|
v_regs: *vrregset_t,
|
||||||
|
|||||||
@ -660,7 +660,7 @@ pub const msghdr = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec,
|
msg_iov: [*]iovec,
|
||||||
msg_iovlen: u64,
|
msg_iovlen: u64,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: u64,
|
msg_controllen: u64,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
@ -670,7 +670,7 @@ pub const msghdr_const = extern struct {
|
|||||||
msg_namelen: socklen_t,
|
msg_namelen: socklen_t,
|
||||||
msg_iov: [*]iovec_const,
|
msg_iov: [*]iovec_const,
|
||||||
msg_iovlen: u64,
|
msg_iovlen: u64,
|
||||||
msg_control: ?*c_void,
|
msg_control: ?*anyopaque,
|
||||||
msg_controllen: u64,
|
msg_controllen: u64,
|
||||||
msg_flags: i32,
|
msg_flags: i32,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -604,7 +604,7 @@ pub const msghdr = extern struct {
|
|||||||
iov: [*]iovec,
|
iov: [*]iovec,
|
||||||
iovlen: i32,
|
iovlen: i32,
|
||||||
__pad1: i32 = 0,
|
__pad1: i32 = 0,
|
||||||
control: ?*c_void,
|
control: ?*anyopaque,
|
||||||
controllen: socklen_t,
|
controllen: socklen_t,
|
||||||
__pad2: socklen_t = 0,
|
__pad2: socklen_t = 0,
|
||||||
flags: i32,
|
flags: i32,
|
||||||
@ -616,7 +616,7 @@ pub const msghdr_const = extern struct {
|
|||||||
iov: [*]iovec_const,
|
iov: [*]iovec_const,
|
||||||
iovlen: i32,
|
iovlen: i32,
|
||||||
__pad1: i32 = 0,
|
__pad1: i32 = 0,
|
||||||
control: ?*c_void,
|
control: ?*anyopaque,
|
||||||
controllen: socklen_t,
|
controllen: socklen_t,
|
||||||
__pad2: socklen_t = 0,
|
__pad2: socklen_t = 0,
|
||||||
flags: i32,
|
flags: i32,
|
||||||
|
|||||||
@ -408,7 +408,7 @@ test "sigaltstack" {
|
|||||||
|
|
||||||
// If the type is not available use void to avoid erroring out when `iter_fn` is
|
// If the type is not available use void to avoid erroring out when `iter_fn` is
|
||||||
// analyzed
|
// analyzed
|
||||||
const dl_phdr_info = if (@hasDecl(os.system, "dl_phdr_info")) os.dl_phdr_info else c_void;
|
const dl_phdr_info = if (@hasDecl(os.system, "dl_phdr_info")) os.dl_phdr_info else anyopaque;
|
||||||
|
|
||||||
const IterFnError = error{
|
const IterFnError = error{
|
||||||
MissingPtLoadSegment,
|
MissingPtLoadSegment,
|
||||||
@ -740,7 +740,7 @@ test "sigaction" {
|
|||||||
return error.SkipZigTest;
|
return error.SkipZigTest;
|
||||||
|
|
||||||
const S = struct {
|
const S = struct {
|
||||||
fn handler(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const c_void) callconv(.C) void {
|
fn handler(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) void {
|
||||||
_ = ctx_ptr;
|
_ = ctx_ptr;
|
||||||
// Check that we received the correct signal.
|
// Check that we received the correct signal.
|
||||||
switch (native_os) {
|
switch (native_os) {
|
||||||
|
|||||||
@ -4,16 +4,16 @@ const Event = uefi.Event;
|
|||||||
const Status = uefi.Status;
|
const Status = uefi.Status;
|
||||||
|
|
||||||
pub const Ip6ConfigProtocol = extern struct {
|
pub const Ip6ConfigProtocol = extern struct {
|
||||||
_set_data: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, usize, *const c_void) callconv(.C) Status,
|
_set_data: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, usize, *const anyopaque) callconv(.C) Status,
|
||||||
_get_data: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, *usize, ?*const c_void) callconv(.C) Status,
|
_get_data: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, *usize, ?*const anyopaque) callconv(.C) Status,
|
||||||
_register_data_notify: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(.C) Status,
|
_register_data_notify: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(.C) Status,
|
||||||
_unregister_data_notify: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(.C) Status,
|
_unregister_data_notify: fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(.C) Status,
|
||||||
|
|
||||||
pub fn setData(self: *const Ip6ConfigProtocol, data_type: Ip6ConfigDataType, data_size: usize, data: *const c_void) Status {
|
pub fn setData(self: *const Ip6ConfigProtocol, data_type: Ip6ConfigDataType, data_size: usize, data: *const anyopaque) Status {
|
||||||
return self._set_data(self, data_type, data_size, data);
|
return self._set_data(self, data_type, data_size, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn getData(self: *const Ip6ConfigProtocol, data_type: Ip6ConfigDataType, data_size: *usize, data: ?*const c_void) Status {
|
pub fn getData(self: *const Ip6ConfigProtocol, data_type: Ip6ConfigDataType, data_size: *usize, data: ?*const anyopaque) Status {
|
||||||
return self._get_data(self, data_type, data_size, data);
|
return self._get_data(self, data_type, data_size, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -140,5 +140,5 @@ pub const Ip6IcmpType = extern struct {
|
|||||||
pub const Ip6CompletionToken = extern struct {
|
pub const Ip6CompletionToken = extern struct {
|
||||||
event: Event,
|
event: Event,
|
||||||
status: Status,
|
status: Status,
|
||||||
packet: *c_void, // union TODO
|
packet: *anyopaque, // union TODO
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,9 +12,9 @@ pub const LoadedImageProtocol = extern struct {
|
|||||||
system_table: *SystemTable,
|
system_table: *SystemTable,
|
||||||
device_handle: ?Handle,
|
device_handle: ?Handle,
|
||||||
file_path: *DevicePathProtocol,
|
file_path: *DevicePathProtocol,
|
||||||
reserved: *c_void,
|
reserved: *anyopaque,
|
||||||
load_options_size: u32,
|
load_options_size: u32,
|
||||||
load_options: ?*c_void,
|
load_options: ?*anyopaque,
|
||||||
image_base: [*]u8,
|
image_base: [*]u8,
|
||||||
image_size: u64,
|
image_size: u64,
|
||||||
image_code_type: MemoryType,
|
image_code_type: MemoryType,
|
||||||
|
|||||||
@ -9,7 +9,7 @@ const MacAddress = uefi.protocols.MacAddress;
|
|||||||
pub const ManagedNetworkProtocol = extern struct {
|
pub const ManagedNetworkProtocol = extern struct {
|
||||||
_get_mode_data: fn (*const ManagedNetworkProtocol, ?*ManagedNetworkConfigData, ?*SimpleNetworkMode) callconv(.C) Status,
|
_get_mode_data: fn (*const ManagedNetworkProtocol, ?*ManagedNetworkConfigData, ?*SimpleNetworkMode) callconv(.C) Status,
|
||||||
_configure: fn (*const ManagedNetworkProtocol, ?*const ManagedNetworkConfigData) callconv(.C) Status,
|
_configure: fn (*const ManagedNetworkProtocol, ?*const ManagedNetworkConfigData) callconv(.C) Status,
|
||||||
_mcast_ip_to_mac: fn (*const ManagedNetworkProtocol, bool, *const c_void, *MacAddress) callconv(.C) Status,
|
_mcast_ip_to_mac: fn (*const ManagedNetworkProtocol, bool, *const anyopaque, *MacAddress) callconv(.C) Status,
|
||||||
_groups: fn (*const ManagedNetworkProtocol, bool, ?*const MacAddress) callconv(.C) Status,
|
_groups: fn (*const ManagedNetworkProtocol, bool, ?*const MacAddress) callconv(.C) Status,
|
||||||
_transmit: fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(.C) Status,
|
_transmit: fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(.C) Status,
|
||||||
_receive: fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(.C) Status,
|
_receive: fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(.C) Status,
|
||||||
@ -29,7 +29,7 @@ pub const ManagedNetworkProtocol = extern struct {
|
|||||||
|
|
||||||
/// Translates an IP multicast address to a hardware (MAC) multicast address.
|
/// Translates an IP multicast address to a hardware (MAC) multicast address.
|
||||||
/// This function may be unsupported in some MNP implementations.
|
/// This function may be unsupported in some MNP implementations.
|
||||||
pub fn mcastIpToMac(self: *const ManagedNetworkProtocol, ipv6flag: bool, ipaddress: *const c_void, mac_address: *MacAddress) Status {
|
pub fn mcastIpToMac(self: *const ManagedNetworkProtocol, ipv6flag: bool, ipaddress: *const anyopaque, mac_address: *MacAddress) Status {
|
||||||
_ = mac_address;
|
_ = mac_address;
|
||||||
return self._mcast_ip_to_mac(self, ipv6flag, ipaddress);
|
return self._mcast_ip_to_mac(self, ipv6flag, ipaddress);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,7 +13,7 @@ pub const SimpleNetworkProtocol = extern struct {
|
|||||||
_receive_filters: fn (*const SimpleNetworkProtocol, SimpleNetworkReceiveFilter, SimpleNetworkReceiveFilter, bool, usize, ?[*]const MacAddress) callconv(.C) Status,
|
_receive_filters: fn (*const SimpleNetworkProtocol, SimpleNetworkReceiveFilter, SimpleNetworkReceiveFilter, bool, usize, ?[*]const MacAddress) callconv(.C) Status,
|
||||||
_station_address: fn (*const SimpleNetworkProtocol, bool, ?*const MacAddress) callconv(.C) Status,
|
_station_address: fn (*const SimpleNetworkProtocol, bool, ?*const MacAddress) callconv(.C) Status,
|
||||||
_statistics: fn (*const SimpleNetworkProtocol, bool, ?*usize, ?*NetworkStatistics) callconv(.C) Status,
|
_statistics: fn (*const SimpleNetworkProtocol, bool, ?*usize, ?*NetworkStatistics) callconv(.C) Status,
|
||||||
_mcast_ip_to_mac: fn (*const SimpleNetworkProtocol, bool, *const c_void, *MacAddress) callconv(.C) Status,
|
_mcast_ip_to_mac: fn (*const SimpleNetworkProtocol, bool, *const anyopaque, *MacAddress) callconv(.C) Status,
|
||||||
_nvdata: fn (*const SimpleNetworkProtocol, bool, usize, usize, [*]u8) callconv(.C) Status,
|
_nvdata: fn (*const SimpleNetworkProtocol, bool, usize, usize, [*]u8) callconv(.C) Status,
|
||||||
_get_status: fn (*const SimpleNetworkProtocol, *SimpleNetworkInterruptStatus, ?*?[*]u8) callconv(.C) Status,
|
_get_status: fn (*const SimpleNetworkProtocol, *SimpleNetworkInterruptStatus, ?*?[*]u8) callconv(.C) Status,
|
||||||
_transmit: fn (*const SimpleNetworkProtocol, usize, usize, [*]const u8, ?*const MacAddress, ?*const MacAddress, ?*const u16) callconv(.C) Status,
|
_transmit: fn (*const SimpleNetworkProtocol, usize, usize, [*]const u8, ?*const MacAddress, ?*const MacAddress, ?*const u16) callconv(.C) Status,
|
||||||
@ -62,7 +62,7 @@ pub const SimpleNetworkProtocol = extern struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Converts a multicast IP address to a multicast HW MAC address.
|
/// Converts a multicast IP address to a multicast HW MAC address.
|
||||||
pub fn mcastIpToMac(self: *const SimpleNetworkProtocol, ipv6: bool, ip: *const c_void, mac: *MacAddress) Status {
|
pub fn mcastIpToMac(self: *const SimpleNetworkProtocol, ipv6: bool, ip: *const anyopaque, mac: *MacAddress) Status {
|
||||||
return self._mcast_ip_to_mac(self, ipv6, ip, mac);
|
return self._mcast_ip_to_mac(self, ipv6, ip, mac);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,8 +9,8 @@ pub const SimpleTextInputExProtocol = extern struct {
|
|||||||
_read_key_stroke_ex: fn (*const SimpleTextInputExProtocol, *KeyData) callconv(.C) Status,
|
_read_key_stroke_ex: fn (*const SimpleTextInputExProtocol, *KeyData) callconv(.C) Status,
|
||||||
wait_for_key_ex: Event,
|
wait_for_key_ex: Event,
|
||||||
_set_state: fn (*const SimpleTextInputExProtocol, *const u8) callconv(.C) Status,
|
_set_state: fn (*const SimpleTextInputExProtocol, *const u8) callconv(.C) Status,
|
||||||
_register_key_notify: fn (*const SimpleTextInputExProtocol, *const KeyData, fn (*const KeyData) callconv(.C) usize, **c_void) callconv(.C) Status,
|
_register_key_notify: fn (*const SimpleTextInputExProtocol, *const KeyData, fn (*const KeyData) callconv(.C) usize, **anyopaque) callconv(.C) Status,
|
||||||
_unregister_key_notify: fn (*const SimpleTextInputExProtocol, *const c_void) callconv(.C) Status,
|
_unregister_key_notify: fn (*const SimpleTextInputExProtocol, *const anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
/// Resets the input device hardware.
|
/// Resets the input device hardware.
|
||||||
pub fn reset(self: *const SimpleTextInputExProtocol, verify: bool) Status {
|
pub fn reset(self: *const SimpleTextInputExProtocol, verify: bool) Status {
|
||||||
@ -28,12 +28,12 @@ pub const SimpleTextInputExProtocol = extern struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Register a notification function for a particular keystroke for the input device.
|
/// Register a notification function for a particular keystroke for the input device.
|
||||||
pub fn registerKeyNotify(self: *const SimpleTextInputExProtocol, key_data: *const KeyData, notify: fn (*const KeyData) callconv(.C) usize, handle: **c_void) Status {
|
pub fn registerKeyNotify(self: *const SimpleTextInputExProtocol, key_data: *const KeyData, notify: fn (*const KeyData) callconv(.C) usize, handle: **anyopaque) Status {
|
||||||
return self._register_key_notify(self, key_data, notify, handle);
|
return self._register_key_notify(self, key_data, notify, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove the notification that was previously registered.
|
/// Remove the notification that was previously registered.
|
||||||
pub fn unregisterKeyNotify(self: *const SimpleTextInputExProtocol, handle: *const c_void) Status {
|
pub fn unregisterKeyNotify(self: *const SimpleTextInputExProtocol, handle: *const anyopaque) Status {
|
||||||
return self._unregister_key_notify(self, handle);
|
return self._unregister_key_notify(self, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,7 @@ pub const BootServices = extern struct {
|
|||||||
freePool: fn ([*]align(8) u8) callconv(.C) Status,
|
freePool: fn ([*]align(8) u8) callconv(.C) Status,
|
||||||
|
|
||||||
/// Creates an event.
|
/// Creates an event.
|
||||||
createEvent: fn (u32, usize, ?fn (Event, ?*c_void) callconv(.C) void, ?*const c_void, *Event) callconv(.C) Status,
|
createEvent: fn (u32, usize, ?fn (Event, ?*anyopaque) callconv(.C) void, ?*const anyopaque, *Event) callconv(.C) Status,
|
||||||
|
|
||||||
/// Sets the type of timer and the trigger time for a timer event.
|
/// Sets the type of timer and the trigger time for a timer event.
|
||||||
setTimer: fn (Event, TimerDelay, u64) callconv(.C) Status,
|
setTimer: fn (Event, TimerDelay, u64) callconv(.C) Status,
|
||||||
@ -64,14 +64,14 @@ pub const BootServices = extern struct {
|
|||||||
uninstallProtocolInterface: Status, // TODO
|
uninstallProtocolInterface: Status, // TODO
|
||||||
|
|
||||||
/// Queries a handle to determine if it supports a specified protocol.
|
/// Queries a handle to determine if it supports a specified protocol.
|
||||||
handleProtocol: fn (Handle, *align(8) const Guid, *?*c_void) callconv(.C) Status,
|
handleProtocol: fn (Handle, *align(8) const Guid, *?*anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
reserved: *c_void,
|
reserved: *anyopaque,
|
||||||
|
|
||||||
registerProtocolNotify: Status, // TODO
|
registerProtocolNotify: Status, // TODO
|
||||||
|
|
||||||
/// Returns an array of handles that support a specified protocol.
|
/// Returns an array of handles that support a specified protocol.
|
||||||
locateHandle: fn (LocateSearchType, ?*align(8) const Guid, ?*const c_void, *usize, [*]Handle) callconv(.C) Status,
|
locateHandle: fn (LocateSearchType, ?*align(8) const Guid, ?*const anyopaque, *usize, [*]Handle) callconv(.C) Status,
|
||||||
|
|
||||||
/// Locates the handle to a device on the device path that supports the specified protocol
|
/// Locates the handle to a device on the device path that supports the specified protocol
|
||||||
locateDevicePath: fn (*align(8) const Guid, **const DevicePathProtocol, *?Handle) callconv(.C) Status,
|
locateDevicePath: fn (*align(8) const Guid, **const DevicePathProtocol, *?Handle) callconv(.C) Status,
|
||||||
@ -84,7 +84,7 @@ pub const BootServices = extern struct {
|
|||||||
startImage: fn (Handle, ?*usize, ?*[*]u16) callconv(.C) Status,
|
startImage: fn (Handle, ?*usize, ?*[*]u16) callconv(.C) Status,
|
||||||
|
|
||||||
/// Terminates a loaded EFI image and returns control to boot services.
|
/// Terminates a loaded EFI image and returns control to boot services.
|
||||||
exit: fn (Handle, Status, usize, ?*const c_void) callconv(.C) Status,
|
exit: fn (Handle, Status, usize, ?*const anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
/// Unloads an image.
|
/// Unloads an image.
|
||||||
unloadImage: fn (Handle) callconv(.C) Status,
|
unloadImage: fn (Handle) callconv(.C) Status,
|
||||||
@ -105,7 +105,7 @@ pub const BootServices = extern struct {
|
|||||||
disconnectController: Status, // TODO
|
disconnectController: Status, // TODO
|
||||||
|
|
||||||
/// Queries a handle to determine if it supports a specified protocol.
|
/// Queries a handle to determine if it supports a specified protocol.
|
||||||
openProtocol: fn (Handle, *align(8) const Guid, *?*c_void, ?Handle, ?Handle, OpenProtocolAttributes) callconv(.C) Status,
|
openProtocol: fn (Handle, *align(8) const Guid, *?*anyopaque, ?Handle, ?Handle, OpenProtocolAttributes) callconv(.C) Status,
|
||||||
|
|
||||||
/// Closes a protocol on a handle that was opened using openProtocol().
|
/// Closes a protocol on a handle that was opened using openProtocol().
|
||||||
closeProtocol: fn (Handle, *align(8) const Guid, Handle, ?Handle) callconv(.C) Status,
|
closeProtocol: fn (Handle, *align(8) const Guid, Handle, ?Handle) callconv(.C) Status,
|
||||||
@ -117,10 +117,10 @@ pub const BootServices = extern struct {
|
|||||||
protocolsPerHandle: fn (Handle, *[*]*align(8) const Guid, *usize) callconv(.C) Status,
|
protocolsPerHandle: fn (Handle, *[*]*align(8) const Guid, *usize) callconv(.C) Status,
|
||||||
|
|
||||||
/// Returns an array of handles that support the requested protocol in a buffer allocated from pool.
|
/// Returns an array of handles that support the requested protocol in a buffer allocated from pool.
|
||||||
locateHandleBuffer: fn (LocateSearchType, ?*align(8) const Guid, ?*const c_void, *usize, *[*]Handle) callconv(.C) Status,
|
locateHandleBuffer: fn (LocateSearchType, ?*align(8) const Guid, ?*const anyopaque, *usize, *[*]Handle) callconv(.C) Status,
|
||||||
|
|
||||||
/// Returns the first protocol instance that matches the given protocol.
|
/// Returns the first protocol instance that matches the given protocol.
|
||||||
locateProtocol: fn (*align(8) const Guid, ?*const c_void, *?*c_void) callconv(.C) Status,
|
locateProtocol: fn (*align(8) const Guid, ?*const anyopaque, *?*anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
installMultipleProtocolInterfaces: Status, // TODO
|
installMultipleProtocolInterfaces: Status, // TODO
|
||||||
uninstallMultipleProtocolInterfaces: Status, // TODO
|
uninstallMultipleProtocolInterfaces: Status, // TODO
|
||||||
|
|||||||
@ -3,7 +3,7 @@ const Guid = uefi.Guid;
|
|||||||
|
|
||||||
pub const ConfigurationTable = extern struct {
|
pub const ConfigurationTable = extern struct {
|
||||||
vendor_guid: Guid,
|
vendor_guid: Guid,
|
||||||
vendor_table: *c_void,
|
vendor_table: *anyopaque,
|
||||||
|
|
||||||
pub const acpi_20_table_guid align(8) = Guid{
|
pub const acpi_20_table_guid align(8) = Guid{
|
||||||
.time_low = 0x8868e871,
|
.time_low = 0x8868e871,
|
||||||
|
|||||||
@ -28,21 +28,21 @@ pub const RuntimeServices = extern struct {
|
|||||||
setVirtualAddressMap: fn (usize, usize, u32, [*]MemoryDescriptor) callconv(.C) Status,
|
setVirtualAddressMap: fn (usize, usize, u32, [*]MemoryDescriptor) callconv(.C) Status,
|
||||||
|
|
||||||
/// Determines the new virtual address that is to be used on subsequent memory accesses.
|
/// Determines the new virtual address that is to be used on subsequent memory accesses.
|
||||||
convertPointer: fn (usize, **c_void) callconv(.C) Status,
|
convertPointer: fn (usize, **anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
/// Returns the value of a variable.
|
/// Returns the value of a variable.
|
||||||
getVariable: fn ([*:0]const u16, *align(8) const Guid, ?*u32, *usize, ?*c_void) callconv(.C) Status,
|
getVariable: fn ([*:0]const u16, *align(8) const Guid, ?*u32, *usize, ?*anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
/// Enumerates the current variable names.
|
/// Enumerates the current variable names.
|
||||||
getNextVariableName: fn (*usize, [*:0]u16, *align(8) Guid) callconv(.C) Status,
|
getNextVariableName: fn (*usize, [*:0]u16, *align(8) Guid) callconv(.C) Status,
|
||||||
|
|
||||||
/// Sets the value of a variable.
|
/// Sets the value of a variable.
|
||||||
setVariable: fn ([*:0]const u16, *align(8) const Guid, u32, usize, *c_void) callconv(.C) Status,
|
setVariable: fn ([*:0]const u16, *align(8) const Guid, u32, usize, *anyopaque) callconv(.C) Status,
|
||||||
|
|
||||||
getNextHighMonotonicCount: Status, // TODO
|
getNextHighMonotonicCount: Status, // TODO
|
||||||
|
|
||||||
/// Resets the entire platform.
|
/// Resets the entire platform.
|
||||||
resetSystem: fn (ResetType, Status, usize, ?*const c_void) callconv(.C) noreturn,
|
resetSystem: fn (ResetType, Status, usize, ?*const anyopaque) callconv(.C) noreturn,
|
||||||
|
|
||||||
updateCapsule: Status, // TODO
|
updateCapsule: Status, // TODO
|
||||||
queryCapsuleCapabilities: Status, // TODO
|
queryCapsuleCapabilities: Status, // TODO
|
||||||
|
|||||||
@ -1553,7 +1553,7 @@ pub fn CreateProcessW(
|
|||||||
lpThreadAttributes: ?*SECURITY_ATTRIBUTES,
|
lpThreadAttributes: ?*SECURITY_ATTRIBUTES,
|
||||||
bInheritHandles: BOOL,
|
bInheritHandles: BOOL,
|
||||||
dwCreationFlags: DWORD,
|
dwCreationFlags: DWORD,
|
||||||
lpEnvironment: ?*c_void,
|
lpEnvironment: ?*anyopaque,
|
||||||
lpCurrentDirectory: ?LPWSTR,
|
lpCurrentDirectory: ?LPWSTR,
|
||||||
lpStartupInfo: *STARTUPINFOW,
|
lpStartupInfo: *STARTUPINFOW,
|
||||||
lpProcessInformation: *PROCESS_INFORMATION,
|
lpProcessInformation: *PROCESS_INFORMATION,
|
||||||
@ -1619,11 +1619,11 @@ pub fn QueryPerformanceCounter() u64 {
|
|||||||
return @bitCast(u64, result);
|
return @bitCast(u64, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*c_void, Context: ?*c_void) void {
|
pub fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*anyopaque, Context: ?*anyopaque) void {
|
||||||
assert(kernel32.InitOnceExecuteOnce(InitOnce, InitFn, Parameter, Context) != 0);
|
assert(kernel32.InitOnceExecuteOnce(InitOnce, InitFn, Parameter, Context) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: *c_void) void {
|
pub fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: *anyopaque) void {
|
||||||
assert(kernel32.HeapFree(hHeap, dwFlags, lpMem) != 0);
|
assert(kernel32.HeapFree(hHeap, dwFlags, lpMem) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1675,7 +1675,7 @@ pub fn LockFile(
|
|||||||
FileHandle: HANDLE,
|
FileHandle: HANDLE,
|
||||||
Event: ?HANDLE,
|
Event: ?HANDLE,
|
||||||
ApcRoutine: ?*IO_APC_ROUTINE,
|
ApcRoutine: ?*IO_APC_ROUTINE,
|
||||||
ApcContext: ?*c_void,
|
ApcContext: ?*anyopaque,
|
||||||
IoStatusBlock: *IO_STATUS_BLOCK,
|
IoStatusBlock: *IO_STATUS_BLOCK,
|
||||||
ByteOffset: *const LARGE_INTEGER,
|
ByteOffset: *const LARGE_INTEGER,
|
||||||
Length: *const LARGE_INTEGER,
|
Length: *const LARGE_INTEGER,
|
||||||
@ -1954,7 +1954,7 @@ pub fn loadWinsockExtensionFunction(comptime T: type, sock: ws2_32.SOCKET, guid:
|
|||||||
const rc = ws2_32.WSAIoctl(
|
const rc = ws2_32.WSAIoctl(
|
||||||
sock,
|
sock,
|
||||||
ws2_32.SIO_GET_EXTENSION_FUNCTION_POINTER,
|
ws2_32.SIO_GET_EXTENSION_FUNCTION_POINTER,
|
||||||
@ptrCast(*const c_void, &guid),
|
@ptrCast(*const anyopaque, &guid),
|
||||||
@sizeOf(GUID),
|
@sizeOf(GUID),
|
||||||
&function,
|
&function,
|
||||||
@sizeOf(T),
|
@sizeOf(T),
|
||||||
@ -2055,7 +2055,7 @@ pub const BYTE = u8;
|
|||||||
pub const CHAR = u8;
|
pub const CHAR = u8;
|
||||||
pub const UCHAR = u8;
|
pub const UCHAR = u8;
|
||||||
pub const FLOAT = f32;
|
pub const FLOAT = f32;
|
||||||
pub const HANDLE = *c_void;
|
pub const HANDLE = *anyopaque;
|
||||||
pub const HCRYPTPROV = ULONG_PTR;
|
pub const HCRYPTPROV = ULONG_PTR;
|
||||||
pub const ATOM = u16;
|
pub const ATOM = u16;
|
||||||
pub const HBRUSH = *opaque {};
|
pub const HBRUSH = *opaque {};
|
||||||
@ -2070,12 +2070,12 @@ pub const HGLRC = *opaque {};
|
|||||||
pub const FARPROC = *opaque {};
|
pub const FARPROC = *opaque {};
|
||||||
pub const INT = c_int;
|
pub const INT = c_int;
|
||||||
pub const LPCSTR = [*:0]const CHAR;
|
pub const LPCSTR = [*:0]const CHAR;
|
||||||
pub const LPCVOID = *const c_void;
|
pub const LPCVOID = *const anyopaque;
|
||||||
pub const LPSTR = [*:0]CHAR;
|
pub const LPSTR = [*:0]CHAR;
|
||||||
pub const LPVOID = *c_void;
|
pub const LPVOID = *anyopaque;
|
||||||
pub const LPWSTR = [*:0]WCHAR;
|
pub const LPWSTR = [*:0]WCHAR;
|
||||||
pub const LPCWSTR = [*:0]const WCHAR;
|
pub const LPCWSTR = [*:0]const WCHAR;
|
||||||
pub const PVOID = *c_void;
|
pub const PVOID = *anyopaque;
|
||||||
pub const PWSTR = [*:0]WCHAR;
|
pub const PWSTR = [*:0]WCHAR;
|
||||||
pub const SIZE_T = usize;
|
pub const SIZE_T = usize;
|
||||||
pub const UINT = c_uint;
|
pub const UINT = c_uint;
|
||||||
@ -2289,7 +2289,7 @@ pub const IO_STATUS_BLOCK = extern struct {
|
|||||||
// "DUMMYUNIONNAME" expands to "u"
|
// "DUMMYUNIONNAME" expands to "u"
|
||||||
u: extern union {
|
u: extern union {
|
||||||
Status: NTSTATUS,
|
Status: NTSTATUS,
|
||||||
Pointer: ?*c_void,
|
Pointer: ?*anyopaque,
|
||||||
},
|
},
|
||||||
Information: ULONG_PTR,
|
Information: ULONG_PTR,
|
||||||
};
|
};
|
||||||
@ -2457,7 +2457,7 @@ pub const VOLUME_NAME_NT = 0x2;
|
|||||||
|
|
||||||
pub const SECURITY_ATTRIBUTES = extern struct {
|
pub const SECURITY_ATTRIBUTES = extern struct {
|
||||||
nLength: DWORD,
|
nLength: DWORD,
|
||||||
lpSecurityDescriptor: ?*c_void,
|
lpSecurityDescriptor: ?*anyopaque,
|
||||||
bInheritHandle: BOOL,
|
bInheritHandle: BOOL,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2923,10 +2923,10 @@ pub const RTL_CRITICAL_SECTION = extern struct {
|
|||||||
pub const CRITICAL_SECTION = RTL_CRITICAL_SECTION;
|
pub const CRITICAL_SECTION = RTL_CRITICAL_SECTION;
|
||||||
pub const INIT_ONCE = RTL_RUN_ONCE;
|
pub const INIT_ONCE = RTL_RUN_ONCE;
|
||||||
pub const INIT_ONCE_STATIC_INIT = RTL_RUN_ONCE_INIT;
|
pub const INIT_ONCE_STATIC_INIT = RTL_RUN_ONCE_INIT;
|
||||||
pub const INIT_ONCE_FN = fn (InitOnce: *INIT_ONCE, Parameter: ?*c_void, Context: ?*c_void) callconv(.C) BOOL;
|
pub const INIT_ONCE_FN = fn (InitOnce: *INIT_ONCE, Parameter: ?*anyopaque, Context: ?*anyopaque) callconv(.C) BOOL;
|
||||||
|
|
||||||
pub const RTL_RUN_ONCE = extern struct {
|
pub const RTL_RUN_ONCE = extern struct {
|
||||||
Ptr: ?*c_void,
|
Ptr: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const RTL_RUN_ONCE_INIT = RTL_RUN_ONCE{ .Ptr = null };
|
pub const RTL_RUN_ONCE_INIT = RTL_RUN_ONCE{ .Ptr = null };
|
||||||
@ -2966,7 +2966,7 @@ pub const EXCEPTION_RECORD = extern struct {
|
|||||||
ExceptionCode: u32,
|
ExceptionCode: u32,
|
||||||
ExceptionFlags: u32,
|
ExceptionFlags: u32,
|
||||||
ExceptionRecord: *EXCEPTION_RECORD,
|
ExceptionRecord: *EXCEPTION_RECORD,
|
||||||
ExceptionAddress: *c_void,
|
ExceptionAddress: *anyopaque,
|
||||||
NumberParameters: u32,
|
NumberParameters: u32,
|
||||||
ExceptionInformation: [15]usize,
|
ExceptionInformation: [15]usize,
|
||||||
};
|
};
|
||||||
@ -3202,8 +3202,8 @@ pub const OBJECT_ATTRIBUTES = extern struct {
|
|||||||
RootDirectory: ?HANDLE,
|
RootDirectory: ?HANDLE,
|
||||||
ObjectName: *UNICODE_STRING,
|
ObjectName: *UNICODE_STRING,
|
||||||
Attributes: ULONG,
|
Attributes: ULONG,
|
||||||
SecurityDescriptor: ?*c_void,
|
SecurityDescriptor: ?*anyopaque,
|
||||||
SecurityQualityOfService: ?*c_void,
|
SecurityQualityOfService: ?*anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const OBJ_INHERIT = 0x00000002;
|
pub const OBJ_INHERIT = 0x00000002;
|
||||||
|
|||||||
@ -57,7 +57,7 @@ const UCHAR = windows.UCHAR;
|
|||||||
const FARPROC = windows.FARPROC;
|
const FARPROC = windows.FARPROC;
|
||||||
const INIT_ONCE_FN = windows.INIT_ONCE_FN;
|
const INIT_ONCE_FN = windows.INIT_ONCE_FN;
|
||||||
|
|
||||||
pub extern "kernel32" fn AddVectoredExceptionHandler(First: c_ulong, Handler: ?VECTORED_EXCEPTION_HANDLER) callconv(WINAPI) ?*c_void;
|
pub extern "kernel32" fn AddVectoredExceptionHandler(First: c_ulong, Handler: ?VECTORED_EXCEPTION_HANDLER) callconv(WINAPI) ?*anyopaque;
|
||||||
pub extern "kernel32" fn RemoveVectoredExceptionHandler(Handle: HANDLE) callconv(WINAPI) c_ulong;
|
pub extern "kernel32" fn RemoveVectoredExceptionHandler(Handle: HANDLE) callconv(WINAPI) c_ulong;
|
||||||
|
|
||||||
pub extern "kernel32" fn CancelIo(hFile: HANDLE) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn CancelIo(hFile: HANDLE) callconv(WINAPI) BOOL;
|
||||||
@ -110,7 +110,7 @@ pub extern "kernel32" fn CreateProcessW(
|
|||||||
lpThreadAttributes: ?*SECURITY_ATTRIBUTES,
|
lpThreadAttributes: ?*SECURITY_ATTRIBUTES,
|
||||||
bInheritHandles: BOOL,
|
bInheritHandles: BOOL,
|
||||||
dwCreationFlags: DWORD,
|
dwCreationFlags: DWORD,
|
||||||
lpEnvironment: ?*c_void,
|
lpEnvironment: ?*anyopaque,
|
||||||
lpCurrentDirectory: ?LPWSTR,
|
lpCurrentDirectory: ?LPWSTR,
|
||||||
lpStartupInfo: *STARTUPINFOW,
|
lpStartupInfo: *STARTUPINFOW,
|
||||||
lpProcessInformation: *PROCESS_INFORMATION,
|
lpProcessInformation: *PROCESS_INFORMATION,
|
||||||
@ -125,7 +125,7 @@ pub extern "kernel32" fn CreateThread(lpThreadAttributes: ?*SECURITY_ATTRIBUTES,
|
|||||||
pub extern "kernel32" fn DeviceIoControl(
|
pub extern "kernel32" fn DeviceIoControl(
|
||||||
h: HANDLE,
|
h: HANDLE,
|
||||||
dwIoControlCode: DWORD,
|
dwIoControlCode: DWORD,
|
||||||
lpInBuffer: ?*const c_void,
|
lpInBuffer: ?*const anyopaque,
|
||||||
nInBufferSize: DWORD,
|
nInBufferSize: DWORD,
|
||||||
lpOutBuffer: ?LPVOID,
|
lpOutBuffer: ?LPVOID,
|
||||||
nOutBufferSize: DWORD,
|
nOutBufferSize: DWORD,
|
||||||
@ -194,7 +194,7 @@ pub extern "kernel32" fn GetFileInformationByHandle(
|
|||||||
pub extern "kernel32" fn GetFileInformationByHandleEx(
|
pub extern "kernel32" fn GetFileInformationByHandleEx(
|
||||||
in_hFile: HANDLE,
|
in_hFile: HANDLE,
|
||||||
in_FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
|
in_FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
|
||||||
out_lpFileInformation: *c_void,
|
out_lpFileInformation: *anyopaque,
|
||||||
in_dwBufferSize: DWORD,
|
in_dwBufferSize: DWORD,
|
||||||
) callconv(WINAPI) BOOL;
|
) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
@ -230,18 +230,18 @@ pub extern "kernel32" fn GetSystemTimeAsFileTime(*FILETIME) callconv(WINAPI) voi
|
|||||||
|
|
||||||
pub extern "kernel32" fn HeapCreate(flOptions: DWORD, dwInitialSize: SIZE_T, dwMaximumSize: SIZE_T) callconv(WINAPI) ?HANDLE;
|
pub extern "kernel32" fn HeapCreate(flOptions: DWORD, dwInitialSize: SIZE_T, dwMaximumSize: SIZE_T) callconv(WINAPI) ?HANDLE;
|
||||||
pub extern "kernel32" fn HeapDestroy(hHeap: HANDLE) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn HeapDestroy(hHeap: HANDLE) callconv(WINAPI) BOOL;
|
||||||
pub extern "kernel32" fn HeapReAlloc(hHeap: HANDLE, dwFlags: DWORD, lpMem: *c_void, dwBytes: SIZE_T) callconv(WINAPI) ?*c_void;
|
pub extern "kernel32" fn HeapReAlloc(hHeap: HANDLE, dwFlags: DWORD, lpMem: *anyopaque, dwBytes: SIZE_T) callconv(WINAPI) ?*anyopaque;
|
||||||
pub extern "kernel32" fn HeapSize(hHeap: HANDLE, dwFlags: DWORD, lpMem: *const c_void) callconv(WINAPI) SIZE_T;
|
pub extern "kernel32" fn HeapSize(hHeap: HANDLE, dwFlags: DWORD, lpMem: *const anyopaque) callconv(WINAPI) SIZE_T;
|
||||||
pub extern "kernel32" fn HeapCompact(hHeap: HANDLE, dwFlags: DWORD) callconv(WINAPI) SIZE_T;
|
pub extern "kernel32" fn HeapCompact(hHeap: HANDLE, dwFlags: DWORD) callconv(WINAPI) SIZE_T;
|
||||||
pub extern "kernel32" fn HeapSummary(hHeap: HANDLE, dwFlags: DWORD, lpSummary: LPHEAP_SUMMARY) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn HeapSummary(hHeap: HANDLE, dwFlags: DWORD, lpSummary: LPHEAP_SUMMARY) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
pub extern "kernel32" fn GetStdHandle(in_nStdHandle: DWORD) callconv(WINAPI) ?HANDLE;
|
pub extern "kernel32" fn GetStdHandle(in_nStdHandle: DWORD) callconv(WINAPI) ?HANDLE;
|
||||||
|
|
||||||
pub extern "kernel32" fn HeapAlloc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) callconv(WINAPI) ?*c_void;
|
pub extern "kernel32" fn HeapAlloc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) callconv(WINAPI) ?*anyopaque;
|
||||||
|
|
||||||
pub extern "kernel32" fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: *c_void) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: *anyopaque) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
pub extern "kernel32" fn HeapValidate(hHeap: HANDLE, dwFlags: DWORD, lpMem: ?*const c_void) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn HeapValidate(hHeap: HANDLE, dwFlags: DWORD, lpMem: ?*const anyopaque) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
pub extern "kernel32" fn VirtualAlloc(lpAddress: ?LPVOID, dwSize: SIZE_T, flAllocationType: DWORD, flProtect: DWORD) callconv(WINAPI) ?LPVOID;
|
pub extern "kernel32" fn VirtualAlloc(lpAddress: ?LPVOID, dwSize: SIZE_T, flAllocationType: DWORD, flProtect: DWORD) callconv(WINAPI) ?LPVOID;
|
||||||
pub extern "kernel32" fn VirtualFree(lpAddress: ?LPVOID, dwSize: SIZE_T, dwFreeType: DWORD) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn VirtualFree(lpAddress: ?LPVOID, dwSize: SIZE_T, dwFreeType: DWORD) callconv(WINAPI) BOOL;
|
||||||
@ -356,7 +356,7 @@ pub extern "kernel32" fn EnterCriticalSection(lpCriticalSection: *CRITICAL_SECTI
|
|||||||
pub extern "kernel32" fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void;
|
pub extern "kernel32" fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void;
|
||||||
pub extern "kernel32" fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void;
|
pub extern "kernel32" fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void;
|
||||||
|
|
||||||
pub extern "kernel32" fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*c_void, Context: ?*c_void) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*anyopaque, Context: ?*anyopaque) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
pub extern "kernel32" fn K32EmptyWorkingSet(hProcess: HANDLE) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn K32EmptyWorkingSet(hProcess: HANDLE) callconv(WINAPI) BOOL;
|
||||||
pub extern "kernel32" fn K32EnumDeviceDrivers(lpImageBase: [*]LPVOID, cb: DWORD, lpcbNeeded: *DWORD) callconv(WINAPI) BOOL;
|
pub extern "kernel32" fn K32EnumDeviceDrivers(lpImageBase: [*]LPVOID, cb: DWORD, lpcbNeeded: *DWORD) callconv(WINAPI) BOOL;
|
||||||
|
|||||||
@ -29,13 +29,13 @@ pub extern "NtDll" fn RtlGetVersion(
|
|||||||
pub extern "NtDll" fn RtlCaptureStackBackTrace(
|
pub extern "NtDll" fn RtlCaptureStackBackTrace(
|
||||||
FramesToSkip: DWORD,
|
FramesToSkip: DWORD,
|
||||||
FramesToCapture: DWORD,
|
FramesToCapture: DWORD,
|
||||||
BackTrace: **c_void,
|
BackTrace: **anyopaque,
|
||||||
BackTraceHash: ?*DWORD,
|
BackTraceHash: ?*DWORD,
|
||||||
) callconv(WINAPI) WORD;
|
) callconv(WINAPI) WORD;
|
||||||
pub extern "NtDll" fn NtQueryInformationFile(
|
pub extern "NtDll" fn NtQueryInformationFile(
|
||||||
FileHandle: HANDLE,
|
FileHandle: HANDLE,
|
||||||
IoStatusBlock: *IO_STATUS_BLOCK,
|
IoStatusBlock: *IO_STATUS_BLOCK,
|
||||||
FileInformation: *c_void,
|
FileInformation: *anyopaque,
|
||||||
Length: ULONG,
|
Length: ULONG,
|
||||||
FileInformationClass: FILE_INFORMATION_CLASS,
|
FileInformationClass: FILE_INFORMATION_CLASS,
|
||||||
) callconv(WINAPI) NTSTATUS;
|
) callconv(WINAPI) NTSTATUS;
|
||||||
@ -62,17 +62,17 @@ pub extern "NtDll" fn NtCreateFile(
|
|||||||
ShareAccess: ULONG,
|
ShareAccess: ULONG,
|
||||||
CreateDisposition: ULONG,
|
CreateDisposition: ULONG,
|
||||||
CreateOptions: ULONG,
|
CreateOptions: ULONG,
|
||||||
EaBuffer: ?*c_void,
|
EaBuffer: ?*anyopaque,
|
||||||
EaLength: ULONG,
|
EaLength: ULONG,
|
||||||
) callconv(WINAPI) NTSTATUS;
|
) callconv(WINAPI) NTSTATUS;
|
||||||
pub extern "NtDll" fn NtDeviceIoControlFile(
|
pub extern "NtDll" fn NtDeviceIoControlFile(
|
||||||
FileHandle: HANDLE,
|
FileHandle: HANDLE,
|
||||||
Event: ?HANDLE,
|
Event: ?HANDLE,
|
||||||
ApcRoutine: ?IO_APC_ROUTINE,
|
ApcRoutine: ?IO_APC_ROUTINE,
|
||||||
ApcContext: ?*c_void,
|
ApcContext: ?*anyopaque,
|
||||||
IoStatusBlock: *IO_STATUS_BLOCK,
|
IoStatusBlock: *IO_STATUS_BLOCK,
|
||||||
IoControlCode: ULONG,
|
IoControlCode: ULONG,
|
||||||
InputBuffer: ?*const c_void,
|
InputBuffer: ?*const anyopaque,
|
||||||
InputBufferLength: ULONG,
|
InputBufferLength: ULONG,
|
||||||
OutputBuffer: ?PVOID,
|
OutputBuffer: ?PVOID,
|
||||||
OutputBufferLength: ULONG,
|
OutputBufferLength: ULONG,
|
||||||
@ -81,10 +81,10 @@ pub extern "NtDll" fn NtFsControlFile(
|
|||||||
FileHandle: HANDLE,
|
FileHandle: HANDLE,
|
||||||
Event: ?HANDLE,
|
Event: ?HANDLE,
|
||||||
ApcRoutine: ?IO_APC_ROUTINE,
|
ApcRoutine: ?IO_APC_ROUTINE,
|
||||||
ApcContext: ?*c_void,
|
ApcContext: ?*anyopaque,
|
||||||
IoStatusBlock: *IO_STATUS_BLOCK,
|
IoStatusBlock: *IO_STATUS_BLOCK,
|
||||||
FsControlCode: ULONG,
|
FsControlCode: ULONG,
|
||||||
InputBuffer: ?*const c_void,
|
InputBuffer: ?*const anyopaque,
|
||||||
InputBufferLength: ULONG,
|
InputBufferLength: ULONG,
|
||||||
OutputBuffer: ?PVOID,
|
OutputBuffer: ?PVOID,
|
||||||
OutputBufferLength: ULONG,
|
OutputBufferLength: ULONG,
|
||||||
@ -102,9 +102,9 @@ pub extern "NtDll" fn NtQueryDirectoryFile(
|
|||||||
FileHandle: HANDLE,
|
FileHandle: HANDLE,
|
||||||
Event: ?HANDLE,
|
Event: ?HANDLE,
|
||||||
ApcRoutine: ?IO_APC_ROUTINE,
|
ApcRoutine: ?IO_APC_ROUTINE,
|
||||||
ApcContext: ?*c_void,
|
ApcContext: ?*anyopaque,
|
||||||
IoStatusBlock: *IO_STATUS_BLOCK,
|
IoStatusBlock: *IO_STATUS_BLOCK,
|
||||||
FileInformation: *c_void,
|
FileInformation: *anyopaque,
|
||||||
Length: ULONG,
|
Length: ULONG,
|
||||||
FileInformationClass: FILE_INFORMATION_CLASS,
|
FileInformationClass: FILE_INFORMATION_CLASS,
|
||||||
ReturnSingleEntry: BOOLEAN,
|
ReturnSingleEntry: BOOLEAN,
|
||||||
@ -121,14 +121,14 @@ pub extern "NtDll" fn NtCreateKeyedEvent(
|
|||||||
|
|
||||||
pub extern "NtDll" fn NtReleaseKeyedEvent(
|
pub extern "NtDll" fn NtReleaseKeyedEvent(
|
||||||
EventHandle: ?HANDLE,
|
EventHandle: ?HANDLE,
|
||||||
Key: ?*const c_void,
|
Key: ?*const anyopaque,
|
||||||
Alertable: BOOLEAN,
|
Alertable: BOOLEAN,
|
||||||
Timeout: ?*const LARGE_INTEGER,
|
Timeout: ?*const LARGE_INTEGER,
|
||||||
) callconv(WINAPI) NTSTATUS;
|
) callconv(WINAPI) NTSTATUS;
|
||||||
|
|
||||||
pub extern "NtDll" fn NtWaitForKeyedEvent(
|
pub extern "NtDll" fn NtWaitForKeyedEvent(
|
||||||
EventHandle: ?HANDLE,
|
EventHandle: ?HANDLE,
|
||||||
Key: ?*const c_void,
|
Key: ?*const anyopaque,
|
||||||
Alertable: BOOLEAN,
|
Alertable: BOOLEAN,
|
||||||
Timeout: ?*const LARGE_INTEGER,
|
Timeout: ?*const LARGE_INTEGER,
|
||||||
) callconv(WINAPI) NTSTATUS;
|
) callconv(WINAPI) NTSTATUS;
|
||||||
@ -144,16 +144,16 @@ pub extern "NtDll" fn NtQueryObject(
|
|||||||
) callconv(WINAPI) NTSTATUS;
|
) callconv(WINAPI) NTSTATUS;
|
||||||
|
|
||||||
pub extern "NtDll" fn RtlWakeAddressAll(
|
pub extern "NtDll" fn RtlWakeAddressAll(
|
||||||
Address: ?*const c_void,
|
Address: ?*const anyopaque,
|
||||||
) callconv(WINAPI) void;
|
) callconv(WINAPI) void;
|
||||||
|
|
||||||
pub extern "NtDll" fn RtlWakeAddressSingle(
|
pub extern "NtDll" fn RtlWakeAddressSingle(
|
||||||
Address: ?*const c_void,
|
Address: ?*const anyopaque,
|
||||||
) callconv(WINAPI) void;
|
) callconv(WINAPI) void;
|
||||||
|
|
||||||
pub extern "NtDll" fn RtlWaitOnAddress(
|
pub extern "NtDll" fn RtlWaitOnAddress(
|
||||||
Address: ?*const c_void,
|
Address: ?*const anyopaque,
|
||||||
CompareAddress: ?*const c_void,
|
CompareAddress: ?*const anyopaque,
|
||||||
AddressSize: SIZE_T,
|
AddressSize: SIZE_T,
|
||||||
Timeout: ?*const LARGE_INTEGER,
|
Timeout: ?*const LARGE_INTEGER,
|
||||||
) callconv(WINAPI) NTSTATUS;
|
) callconv(WINAPI) NTSTATUS;
|
||||||
@ -162,7 +162,7 @@ pub extern "NtDll" fn NtLockFile(
|
|||||||
FileHandle: HANDLE,
|
FileHandle: HANDLE,
|
||||||
Event: ?HANDLE,
|
Event: ?HANDLE,
|
||||||
ApcRoutine: ?*IO_APC_ROUTINE,
|
ApcRoutine: ?*IO_APC_ROUTINE,
|
||||||
ApcContext: ?*c_void,
|
ApcContext: ?*anyopaque,
|
||||||
IoStatusBlock: *IO_STATUS_BLOCK,
|
IoStatusBlock: *IO_STATUS_BLOCK,
|
||||||
ByteOffset: *const LARGE_INTEGER,
|
ByteOffset: *const LARGE_INTEGER,
|
||||||
Length: *const LARGE_INTEGER,
|
Length: *const LARGE_INTEGER,
|
||||||
|
|||||||
@ -1280,7 +1280,7 @@ pub const WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPM
|
|||||||
pub const CW_USEDEFAULT = @bitCast(i32, @as(u32, 0x80000000));
|
pub const CW_USEDEFAULT = @bitCast(i32, @as(u32, 0x80000000));
|
||||||
|
|
||||||
pub extern "user32" fn CreateWindowExA(dwExStyle: DWORD, lpClassName: [*:0]const u8, lpWindowName: [*:0]const u8, dwStyle: DWORD, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?LPVOID) callconv(WINAPI) ?HWND;
|
pub extern "user32" fn CreateWindowExA(dwExStyle: DWORD, lpClassName: [*:0]const u8, lpWindowName: [*:0]const u8, dwStyle: DWORD, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?LPVOID) callconv(WINAPI) ?HWND;
|
||||||
pub fn createWindowExA(dwExStyle: u32, lpClassName: [*:0]const u8, lpWindowName: [*:0]const u8, dwStyle: u32, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?*c_void) !HWND {
|
pub fn createWindowExA(dwExStyle: u32, lpClassName: [*:0]const u8, lpWindowName: [*:0]const u8, dwStyle: u32, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?*anyopaque) !HWND {
|
||||||
const window = CreateWindowExA(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWindParent, hMenu, hInstance, lpParam);
|
const window = CreateWindowExA(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWindParent, hMenu, hInstance, lpParam);
|
||||||
if (window) |win| return win;
|
if (window) |win| return win;
|
||||||
|
|
||||||
@ -1293,7 +1293,7 @@ pub fn createWindowExA(dwExStyle: u32, lpClassName: [*:0]const u8, lpWindowName:
|
|||||||
|
|
||||||
pub extern "user32" fn CreateWindowExW(dwExStyle: DWORD, lpClassName: [*:0]const u16, lpWindowName: [*:0]const u16, dwStyle: DWORD, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?LPVOID) callconv(WINAPI) ?HWND;
|
pub extern "user32" fn CreateWindowExW(dwExStyle: DWORD, lpClassName: [*:0]const u16, lpWindowName: [*:0]const u16, dwStyle: DWORD, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?LPVOID) callconv(WINAPI) ?HWND;
|
||||||
pub var pfnCreateWindowExW: @TypeOf(CreateWindowExW) = undefined;
|
pub var pfnCreateWindowExW: @TypeOf(CreateWindowExW) = undefined;
|
||||||
pub fn createWindowExW(dwExStyle: u32, lpClassName: [*:0]const u16, lpWindowName: [*:0]const u16, dwStyle: u32, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?*c_void) !HWND {
|
pub fn createWindowExW(dwExStyle: u32, lpClassName: [*:0]const u16, lpWindowName: [*:0]const u16, dwStyle: u32, X: i32, Y: i32, nWidth: i32, nHeight: i32, hWindParent: ?HWND, hMenu: ?HMENU, hInstance: HINSTANCE, lpParam: ?*anyopaque) !HWND {
|
||||||
const function = selectSymbol(CreateWindowExW, pfnCreateWindowExW, .win2k);
|
const function = selectSymbol(CreateWindowExW, pfnCreateWindowExW, .win2k);
|
||||||
const window = function(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWindParent, hMenu, hInstance, lpParam);
|
const window = function(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWindParent, hMenu, hInstance, lpParam);
|
||||||
if (window) |win| return win;
|
if (window) |win| return win;
|
||||||
|
|||||||
@ -1095,7 +1095,7 @@ pub const addrinfoexA = extern struct {
|
|||||||
ai_addrlen: usize,
|
ai_addrlen: usize,
|
||||||
ai_canonname: [*:0]u8,
|
ai_canonname: [*:0]u8,
|
||||||
ai_addr: *sockaddr,
|
ai_addr: *sockaddr,
|
||||||
ai_blob: *c_void,
|
ai_blob: *anyopaque,
|
||||||
ai_bloblen: usize,
|
ai_bloblen: usize,
|
||||||
ai_provider: *GUID,
|
ai_provider: *GUID,
|
||||||
ai_next: *addrinfoexA,
|
ai_next: *addrinfoexA,
|
||||||
@ -1167,9 +1167,9 @@ pub const pollfd = extern struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const TRANSMIT_FILE_BUFFERS = extern struct {
|
pub const TRANSMIT_FILE_BUFFERS = extern struct {
|
||||||
Head: *c_void,
|
Head: *anyopaque,
|
||||||
HeadLength: u32,
|
HeadLength: u32,
|
||||||
Tail: *c_void,
|
Tail: *anyopaque,
|
||||||
TailLength: u32,
|
TailLength: u32,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1186,7 +1186,7 @@ pub const LPFN_TRANSMITFILE = fn (
|
|||||||
pub const LPFN_ACCEPTEX = fn (
|
pub const LPFN_ACCEPTEX = fn (
|
||||||
sListenSocket: SOCKET,
|
sListenSocket: SOCKET,
|
||||||
sAcceptSocket: SOCKET,
|
sAcceptSocket: SOCKET,
|
||||||
lpOutputBuffer: *c_void,
|
lpOutputBuffer: *anyopaque,
|
||||||
dwReceiveDataLength: u32,
|
dwReceiveDataLength: u32,
|
||||||
dwLocalAddressLength: u32,
|
dwLocalAddressLength: u32,
|
||||||
dwRemoteAddressLength: u32,
|
dwRemoteAddressLength: u32,
|
||||||
@ -1195,7 +1195,7 @@ pub const LPFN_ACCEPTEX = fn (
|
|||||||
) callconv(WINAPI) BOOL;
|
) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
pub const LPFN_GETACCEPTEXSOCKADDRS = fn (
|
pub const LPFN_GETACCEPTEXSOCKADDRS = fn (
|
||||||
lpOutputBuffer: *c_void,
|
lpOutputBuffer: *anyopaque,
|
||||||
dwReceiveDataLength: u32,
|
dwReceiveDataLength: u32,
|
||||||
dwLocalAddressLength: u32,
|
dwLocalAddressLength: u32,
|
||||||
dwRemoteAddressLength: u32,
|
dwRemoteAddressLength: u32,
|
||||||
@ -2017,9 +2017,9 @@ pub extern "ws2_32" fn WSAHtons(
|
|||||||
pub extern "ws2_32" fn WSAIoctl(
|
pub extern "ws2_32" fn WSAIoctl(
|
||||||
s: SOCKET,
|
s: SOCKET,
|
||||||
dwIoControlCode: u32,
|
dwIoControlCode: u32,
|
||||||
lpvInBuffer: ?*const c_void,
|
lpvInBuffer: ?*const anyopaque,
|
||||||
cbInBuffer: u32,
|
cbInBuffer: u32,
|
||||||
lpvOutbuffer: ?*c_void,
|
lpvOutbuffer: ?*anyopaque,
|
||||||
cbOutbuffer: u32,
|
cbOutbuffer: u32,
|
||||||
lpcbBytesReturned: *u32,
|
lpcbBytesReturned: *u32,
|
||||||
lpOverlapped: ?*OVERLAPPED,
|
lpOverlapped: ?*OVERLAPPED,
|
||||||
@ -2216,7 +2216,7 @@ pub extern "mswsock" fn TransmitFile(
|
|||||||
pub extern "mswsock" fn AcceptEx(
|
pub extern "mswsock" fn AcceptEx(
|
||||||
sListenSocket: SOCKET,
|
sListenSocket: SOCKET,
|
||||||
sAcceptSocket: SOCKET,
|
sAcceptSocket: SOCKET,
|
||||||
lpOutputBuffer: *c_void,
|
lpOutputBuffer: *anyopaque,
|
||||||
dwReceiveDataLength: u32,
|
dwReceiveDataLength: u32,
|
||||||
dwLocalAddressLength: u32,
|
dwLocalAddressLength: u32,
|
||||||
dwRemoteAddressLength: u32,
|
dwRemoteAddressLength: u32,
|
||||||
@ -2225,7 +2225,7 @@ pub extern "mswsock" fn AcceptEx(
|
|||||||
) callconv(WINAPI) BOOL;
|
) callconv(WINAPI) BOOL;
|
||||||
|
|
||||||
pub extern "mswsock" fn GetAcceptExSockaddrs(
|
pub extern "mswsock" fn GetAcceptExSockaddrs(
|
||||||
lpOutputBuffer: *c_void,
|
lpOutputBuffer: *anyopaque,
|
||||||
dwReceiveDataLength: u32,
|
dwReceiveDataLength: u32,
|
||||||
dwLocalAddressLength: u32,
|
dwLocalAddressLength: u32,
|
||||||
dwRemoteAddressLength: u32,
|
dwRemoteAddressLength: u32,
|
||||||
@ -2242,13 +2242,13 @@ pub extern "ws2_32" fn WSAProviderCompleteAsyncCall(
|
|||||||
|
|
||||||
pub extern "mswsock" fn EnumProtocolsA(
|
pub extern "mswsock" fn EnumProtocolsA(
|
||||||
lpiProtocols: ?*i32,
|
lpiProtocols: ?*i32,
|
||||||
lpProtocolBuffer: *c_void,
|
lpProtocolBuffer: *anyopaque,
|
||||||
lpdwBufferLength: *u32,
|
lpdwBufferLength: *u32,
|
||||||
) callconv(WINAPI) i32;
|
) callconv(WINAPI) i32;
|
||||||
|
|
||||||
pub extern "mswsock" fn EnumProtocolsW(
|
pub extern "mswsock" fn EnumProtocolsW(
|
||||||
lpiProtocols: ?*i32,
|
lpiProtocols: ?*i32,
|
||||||
lpProtocolBuffer: *c_void,
|
lpProtocolBuffer: *anyopaque,
|
||||||
lpdwBufferLength: *u32,
|
lpdwBufferLength: *u32,
|
||||||
) callconv(WINAPI) i32;
|
) callconv(WINAPI) i32;
|
||||||
|
|
||||||
@ -2259,7 +2259,7 @@ pub extern "mswsock" fn GetAddressByNameA(
|
|||||||
lpiProtocols: ?*i32,
|
lpiProtocols: ?*i32,
|
||||||
dwResolution: u32,
|
dwResolution: u32,
|
||||||
lpServiceAsyncInfo: ?*SERVICE_ASYNC_INFO,
|
lpServiceAsyncInfo: ?*SERVICE_ASYNC_INFO,
|
||||||
lpCsaddrBuffer: *c_void,
|
lpCsaddrBuffer: *anyopaque,
|
||||||
lpAliasBuffer: ?[*:0]const u8,
|
lpAliasBuffer: ?[*:0]const u8,
|
||||||
lpdwAliasBufferLength: *u32,
|
lpdwAliasBufferLength: *u32,
|
||||||
) callconv(WINAPI) i32;
|
) callconv(WINAPI) i32;
|
||||||
@ -2271,7 +2271,7 @@ pub extern "mswsock" fn GetAddressByNameW(
|
|||||||
lpiProtocols: ?*i32,
|
lpiProtocols: ?*i32,
|
||||||
dwResolution: u32,
|
dwResolution: u32,
|
||||||
lpServiceAsyncInfo: ?*SERVICE_ASYNC_INFO,
|
lpServiceAsyncInfo: ?*SERVICE_ASYNC_INFO,
|
||||||
lpCsaddrBuffer: *c_void,
|
lpCsaddrBuffer: *anyopaque,
|
||||||
ldwBufferLEngth: *u32,
|
ldwBufferLEngth: *u32,
|
||||||
lpAliasBuffer: ?[*:0]u16,
|
lpAliasBuffer: ?[*:0]u16,
|
||||||
lpdwAliasBufferLength: *u32,
|
lpdwAliasBufferLength: *u32,
|
||||||
|
|||||||
@ -29,8 +29,8 @@ pub const Xoshiro256 = @import("rand/Xoshiro256.zig");
|
|||||||
pub const Sfc64 = @import("rand/Sfc64.zig");
|
pub const Sfc64 = @import("rand/Sfc64.zig");
|
||||||
|
|
||||||
pub const Random = struct {
|
pub const Random = struct {
|
||||||
ptr: *c_void,
|
ptr: *anyopaque,
|
||||||
fillFn: fn (ptr: *c_void, buf: []u8) void,
|
fillFn: fn (ptr: *anyopaque, buf: []u8) void,
|
||||||
|
|
||||||
pub fn init(pointer: anytype, comptime fillFn: fn (ptr: @TypeOf(pointer), buf: []u8) void) Random {
|
pub fn init(pointer: anytype, comptime fillFn: fn (ptr: @TypeOf(pointer), buf: []u8) void) Random {
|
||||||
const Ptr = @TypeOf(pointer);
|
const Ptr = @TypeOf(pointer);
|
||||||
@ -38,7 +38,7 @@ pub const Random = struct {
|
|||||||
assert(@typeInfo(Ptr).Pointer.size == .One); // Must be a single-item pointer
|
assert(@typeInfo(Ptr).Pointer.size == .One); // Must be a single-item pointer
|
||||||
assert(@typeInfo(@typeInfo(Ptr).Pointer.child) == .Struct); // Must point to a struct
|
assert(@typeInfo(@typeInfo(Ptr).Pointer.child) == .Struct); // Must point to a struct
|
||||||
const gen = struct {
|
const gen = struct {
|
||||||
fn fill(ptr: *c_void, buf: []u8) void {
|
fn fill(ptr: *anyopaque, buf: []u8) void {
|
||||||
const alignment = @typeInfo(Ptr).Pointer.alignment;
|
const alignment = @typeInfo(Ptr).Pointer.alignment;
|
||||||
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
const self = @ptrCast(Ptr, @alignCast(alignment, ptr));
|
||||||
fillFn(self, buf);
|
fillFn(self, buf);
|
||||||
|
|||||||
@ -20,7 +20,7 @@ comptime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// public entrypoint for generated code using EmulatedTLS
|
/// public entrypoint for generated code using EmulatedTLS
|
||||||
pub fn __emutls_get_address(control: *emutls_control) callconv(.C) *c_void {
|
pub fn __emutls_get_address(control: *emutls_control) callconv(.C) *anyopaque {
|
||||||
return control.getPointer();
|
return control.getPointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ const simple_allocator = struct {
|
|||||||
pub fn advancedAlloc(alignment: u29, size: usize) [*]u8 {
|
pub fn advancedAlloc(alignment: u29, size: usize) [*]u8 {
|
||||||
const minimal_alignment = std.math.max(@alignOf(usize), alignment);
|
const minimal_alignment = std.math.max(@alignOf(usize), alignment);
|
||||||
|
|
||||||
var aligned_ptr: ?*c_void = undefined;
|
var aligned_ptr: ?*anyopaque = undefined;
|
||||||
if (std.c.posix_memalign(&aligned_ptr, minimal_alignment, size) != 0) {
|
if (std.c.posix_memalign(&aligned_ptr, minimal_alignment, size) != 0) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ const simple_allocator = struct {
|
|||||||
|
|
||||||
/// Resize a slice.
|
/// Resize a slice.
|
||||||
pub fn reallocSlice(comptime T: type, slice: []T, len: usize) []T {
|
pub fn reallocSlice(comptime T: type, slice: []T, len: usize) []T {
|
||||||
var c_ptr: *c_void = @ptrCast(*c_void, slice.ptr);
|
var c_ptr: *anyopaque = @ptrCast(*anyopaque, slice.ptr);
|
||||||
var new_array: [*]T = @ptrCast([*]T, @alignCast(
|
var new_array: [*]T = @ptrCast([*]T, @alignCast(
|
||||||
@alignOf(T),
|
@alignOf(T),
|
||||||
std.c.realloc(c_ptr, @sizeOf(T) * len) orelse abort(),
|
std.c.realloc(c_ptr, @sizeOf(T) * len) orelse abort(),
|
||||||
@ -67,14 +67,14 @@ const simple_allocator = struct {
|
|||||||
|
|
||||||
/// Free a memory chunk allocated with simple_allocator.
|
/// Free a memory chunk allocated with simple_allocator.
|
||||||
pub fn free(ptr: anytype) void {
|
pub fn free(ptr: anytype) void {
|
||||||
std.c.free(@ptrCast(*c_void, ptr));
|
std.c.free(@ptrCast(*anyopaque, ptr));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Simple array of ?ObjectPointer with automatic resizing and
|
/// Simple array of ?ObjectPointer with automatic resizing and
|
||||||
/// automatic storage allocation.
|
/// automatic storage allocation.
|
||||||
const ObjectArray = struct {
|
const ObjectArray = struct {
|
||||||
const ObjectPointer = *c_void;
|
const ObjectPointer = *anyopaque;
|
||||||
|
|
||||||
// content of the array
|
// content of the array
|
||||||
slots: []?ObjectPointer,
|
slots: []?ObjectPointer,
|
||||||
@ -143,7 +143,7 @@ const ObjectArray = struct {
|
|||||||
@memset(data, 0, size);
|
@memset(data, 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.slots[index] = @ptrCast(*c_void, data);
|
self.slots[index] = @ptrCast(*anyopaque, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return self.slots[index].?;
|
return self.slots[index].?;
|
||||||
@ -189,7 +189,7 @@ const current_thread_storage = struct {
|
|||||||
|
|
||||||
/// Set casted thread specific value.
|
/// Set casted thread specific value.
|
||||||
fn setspecific(new: ?*ObjectArray) void {
|
fn setspecific(new: ?*ObjectArray) void {
|
||||||
if (std.c.pthread_setspecific(current_thread_storage.key, @ptrCast(*c_void, new)) != 0) {
|
if (std.c.pthread_setspecific(current_thread_storage.key, @ptrCast(*anyopaque, new)) != 0) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -202,7 +202,7 @@ const current_thread_storage = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Invoked by pthread specific destructor. the passed argument is the ObjectArray pointer.
|
/// Invoked by pthread specific destructor. the passed argument is the ObjectArray pointer.
|
||||||
fn deinit(arrayPtr: *c_void) callconv(.C) void {
|
fn deinit(arrayPtr: *anyopaque) callconv(.C) void {
|
||||||
var array = @ptrCast(
|
var array = @ptrCast(
|
||||||
*ObjectArray,
|
*ObjectArray,
|
||||||
@alignCast(@alignOf(ObjectArray), arrayPtr),
|
@alignCast(@alignOf(ObjectArray), arrayPtr),
|
||||||
@ -228,11 +228,11 @@ const emutls_control = extern struct {
|
|||||||
index: usize,
|
index: usize,
|
||||||
|
|
||||||
// object address, when in single thread env (not used)
|
// object address, when in single thread env (not used)
|
||||||
address: *c_void,
|
address: *anyopaque,
|
||||||
},
|
},
|
||||||
|
|
||||||
// null or non-zero initial value for the object
|
// null or non-zero initial value for the object
|
||||||
default_value: ?*c_void,
|
default_value: ?*anyopaque,
|
||||||
|
|
||||||
// global Mutex used to serialize control.index initialization.
|
// global Mutex used to serialize control.index initialization.
|
||||||
var mutex: std.c.pthread_mutex_t = std.c.PTHREAD_MUTEX_INITIALIZER;
|
var mutex: std.c.pthread_mutex_t = std.c.PTHREAD_MUTEX_INITIALIZER;
|
||||||
@ -292,12 +292,12 @@ const emutls_control = extern struct {
|
|||||||
.size = @sizeOf(T),
|
.size = @sizeOf(T),
|
||||||
.alignment = @alignOf(T),
|
.alignment = @alignOf(T),
|
||||||
.object = .{ .index = 0 },
|
.object = .{ .index = 0 },
|
||||||
.default_value = @ptrCast(?*c_void, default_value),
|
.default_value = @ptrCast(?*anyopaque, default_value),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the pointer on allocated storage for emutls variable.
|
/// Get the pointer on allocated storage for emutls variable.
|
||||||
pub fn getPointer(self: *emutls_control) *c_void {
|
pub fn getPointer(self: *emutls_control) *anyopaque {
|
||||||
// ensure current_thread_storage initialization is done
|
// ensure current_thread_storage initialization is done
|
||||||
current_thread_storage.init_once.call();
|
current_thread_storage.init_once.call();
|
||||||
|
|
||||||
|
|||||||
@ -31,10 +31,10 @@ comptime {
|
|||||||
//};
|
//};
|
||||||
// This is the workaround because we can't do @ptrToInt at comptime like that.
|
// This is the workaround because we can't do @ptrToInt at comptime like that.
|
||||||
pub const IMAGE_TLS_DIRECTORY = extern struct {
|
pub const IMAGE_TLS_DIRECTORY = extern struct {
|
||||||
StartAddressOfRawData: *c_void,
|
StartAddressOfRawData: *anyopaque,
|
||||||
EndAddressOfRawData: *c_void,
|
EndAddressOfRawData: *anyopaque,
|
||||||
AddressOfIndex: *c_void,
|
AddressOfIndex: *anyopaque,
|
||||||
AddressOfCallBacks: *c_void,
|
AddressOfCallBacks: *anyopaque,
|
||||||
SizeOfZeroFill: u32,
|
SizeOfZeroFill: u32,
|
||||||
Characteristics: u32,
|
Characteristics: u32,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -129,7 +129,7 @@ pub inline fn __builtin_strcmp(s1: [*c]const u8, s2: [*c]const u8) c_int {
|
|||||||
return @as(c_int, std.cstr.cmp(s1, s2));
|
return @as(c_int, std.cstr.cmp(s1, s2));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn __builtin_object_size(ptr: ?*const c_void, ty: c_int) usize {
|
pub inline fn __builtin_object_size(ptr: ?*const anyopaque, ty: c_int) usize {
|
||||||
_ = ptr;
|
_ = ptr;
|
||||||
// clang semantics match gcc's: https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html
|
// clang semantics match gcc's: https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html
|
||||||
// If it is not possible to determine which objects ptr points to at compile time,
|
// If it is not possible to determine which objects ptr points to at compile time,
|
||||||
@ -141,36 +141,36 @@ pub inline fn __builtin_object_size(ptr: ?*const c_void, ty: c_int) usize {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn __builtin___memset_chk(
|
pub inline fn __builtin___memset_chk(
|
||||||
dst: ?*c_void,
|
dst: ?*anyopaque,
|
||||||
val: c_int,
|
val: c_int,
|
||||||
len: usize,
|
len: usize,
|
||||||
remaining: usize,
|
remaining: usize,
|
||||||
) ?*c_void {
|
) ?*anyopaque {
|
||||||
if (len > remaining) @panic("std.c.builtins.memset_chk called with len > remaining");
|
if (len > remaining) @panic("std.c.builtins.memset_chk called with len > remaining");
|
||||||
return __builtin_memset(dst, val, len);
|
return __builtin_memset(dst, val, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn __builtin_memset(dst: ?*c_void, val: c_int, len: usize) ?*c_void {
|
pub inline fn __builtin_memset(dst: ?*anyopaque, val: c_int, len: usize) ?*anyopaque {
|
||||||
const dst_cast = @ptrCast([*c]u8, dst);
|
const dst_cast = @ptrCast([*c]u8, dst);
|
||||||
@memset(dst_cast, @bitCast(u8, @truncate(i8, val)), len);
|
@memset(dst_cast, @bitCast(u8, @truncate(i8, val)), len);
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn __builtin___memcpy_chk(
|
pub inline fn __builtin___memcpy_chk(
|
||||||
noalias dst: ?*c_void,
|
noalias dst: ?*anyopaque,
|
||||||
noalias src: ?*const c_void,
|
noalias src: ?*const anyopaque,
|
||||||
len: usize,
|
len: usize,
|
||||||
remaining: usize,
|
remaining: usize,
|
||||||
) ?*c_void {
|
) ?*anyopaque {
|
||||||
if (len > remaining) @panic("std.c.builtins.memcpy_chk called with len > remaining");
|
if (len > remaining) @panic("std.c.builtins.memcpy_chk called with len > remaining");
|
||||||
return __builtin_memcpy(dst, src, len);
|
return __builtin_memcpy(dst, src, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn __builtin_memcpy(
|
pub inline fn __builtin_memcpy(
|
||||||
noalias dst: ?*c_void,
|
noalias dst: ?*anyopaque,
|
||||||
noalias src: ?*const c_void,
|
noalias src: ?*const anyopaque,
|
||||||
len: usize,
|
len: usize,
|
||||||
) ?*c_void {
|
) ?*anyopaque {
|
||||||
const dst_cast = @ptrCast([*c]u8, dst);
|
const dst_cast = @ptrCast([*c]u8, dst);
|
||||||
const src_cast = @ptrCast([*c]const u8, src);
|
const src_cast = @ptrCast([*c]const u8, src);
|
||||||
|
|
||||||
@ -232,4 +232,4 @@ pub inline fn __builtin_isinf_sign(x: anytype) c_int {
|
|||||||
// It is used in a run-translated-c test and a test-translate-c test to ensure that non-implemented
|
// It is used in a run-translated-c test and a test-translate-c test to ensure that non-implemented
|
||||||
// builtins are correctly demoted. If you implement __builtin_alloca_with_align, please update the
|
// builtins are correctly demoted. If you implement __builtin_alloca_with_align, please update the
|
||||||
// run-translated-c test and the test-translate-c test to use a different non-implemented builtin.
|
// run-translated-c test and the test-translate-c test to use a different non-implemented builtin.
|
||||||
// pub fn __builtin_alloca_with_align(size: usize, alignment: usize) callconv(.Inline) *c_void {}
|
// pub fn __builtin_alloca_with_align(size: usize, alignment: usize) callconv(.Inline) *anyopaque {}
|
||||||
|
|||||||
@ -110,15 +110,15 @@ test "cast" {
|
|||||||
try testing.expectEqual(@intToPtr(*u8, 2), cast(*u8, @intToPtr(*const u8, 2)));
|
try testing.expectEqual(@intToPtr(*u8, 2), cast(*u8, @intToPtr(*const u8, 2)));
|
||||||
try testing.expectEqual(@intToPtr(*u8, 2), cast(*u8, @intToPtr(*volatile u8, 2)));
|
try testing.expectEqual(@intToPtr(*u8, 2), cast(*u8, @intToPtr(*volatile u8, 2)));
|
||||||
|
|
||||||
try testing.expectEqual(@intToPtr(?*c_void, 2), cast(?*c_void, @intToPtr(*u8, 2)));
|
try testing.expectEqual(@intToPtr(?*anyopaque, 2), cast(?*anyopaque, @intToPtr(*u8, 2)));
|
||||||
|
|
||||||
var foo: c_int = -1;
|
var foo: c_int = -1;
|
||||||
try testing.expect(cast(*c_void, -1) == @intToPtr(*c_void, @bitCast(usize, @as(isize, -1))));
|
try testing.expect(cast(*anyopaque, -1) == @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1))));
|
||||||
try testing.expect(cast(*c_void, foo) == @intToPtr(*c_void, @bitCast(usize, @as(isize, -1))));
|
try testing.expect(cast(*anyopaque, foo) == @intToPtr(*anyopaque, @bitCast(usize, @as(isize, -1))));
|
||||||
try testing.expect(cast(?*c_void, -1) == @intToPtr(?*c_void, @bitCast(usize, @as(isize, -1))));
|
try testing.expect(cast(?*anyopaque, -1) == @intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1))));
|
||||||
try testing.expect(cast(?*c_void, foo) == @intToPtr(?*c_void, @bitCast(usize, @as(isize, -1))));
|
try testing.expect(cast(?*anyopaque, foo) == @intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1))));
|
||||||
|
|
||||||
const FnPtr = ?fn (*c_void) void;
|
const FnPtr = ?fn (*anyopaque) void;
|
||||||
try testing.expect(cast(FnPtr, 0) == @intToPtr(FnPtr, @as(usize, 0)));
|
try testing.expect(cast(FnPtr, 0) == @intToPtr(FnPtr, @as(usize, 0)));
|
||||||
try testing.expect(cast(FnPtr, foo) == @intToPtr(FnPtr, @bitCast(usize, @as(isize, -1))));
|
try testing.expect(cast(FnPtr, foo) == @intToPtr(FnPtr, @bitCast(usize, @as(isize, -1))));
|
||||||
}
|
}
|
||||||
@ -133,13 +133,13 @@ pub fn sizeof(target: anytype) usize {
|
|||||||
// We cannot distinguish those types in Zig, so use pointer size.
|
// We cannot distinguish those types in Zig, so use pointer size.
|
||||||
return @sizeOf(T);
|
return @sizeOf(T);
|
||||||
},
|
},
|
||||||
.Null => return @sizeOf(*c_void),
|
.Null => return @sizeOf(*anyopaque),
|
||||||
.Void => {
|
.Void => {
|
||||||
// Note: sizeof(void) is 1 on clang/gcc and 0 on MSVC.
|
// Note: sizeof(void) is 1 on clang/gcc and 0 on MSVC.
|
||||||
return 1;
|
return 1;
|
||||||
},
|
},
|
||||||
.Opaque => {
|
.Opaque => {
|
||||||
if (T == c_void) {
|
if (T == anyopaque) {
|
||||||
// Note: sizeof(void) is 1 on clang/gcc and 0 on MSVC.
|
// Note: sizeof(void) is 1 on clang/gcc and 0 on MSVC.
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
@ -175,7 +175,7 @@ pub fn sizeof(target: anytype) usize {
|
|||||||
// When zero sized pointers are removed, this case will no
|
// When zero sized pointers are removed, this case will no
|
||||||
// longer be reachable and can be deleted.
|
// longer be reachable and can be deleted.
|
||||||
if (@sizeOf(T) == 0) {
|
if (@sizeOf(T) == 0) {
|
||||||
return @sizeOf(*c_void);
|
return @sizeOf(*anyopaque);
|
||||||
}
|
}
|
||||||
return @sizeOf(T);
|
return @sizeOf(T);
|
||||||
},
|
},
|
||||||
@ -195,7 +195,7 @@ pub fn sizeof(target: anytype) usize {
|
|||||||
test "sizeof" {
|
test "sizeof" {
|
||||||
const S = extern struct { a: u32 };
|
const S = extern struct { a: u32 };
|
||||||
|
|
||||||
const ptr_size = @sizeOf(*c_void);
|
const ptr_size = @sizeOf(*anyopaque);
|
||||||
|
|
||||||
try testing.expect(sizeof(u32) == 4);
|
try testing.expect(sizeof(u32) == 4);
|
||||||
try testing.expect(sizeof(@as(u32, 2)) == 4);
|
try testing.expect(sizeof(@as(u32, 2)) == 4);
|
||||||
@ -215,7 +215,7 @@ test "sizeof" {
|
|||||||
try testing.expect(sizeof([*c]u32) == ptr_size);
|
try testing.expect(sizeof([*c]u32) == ptr_size);
|
||||||
try testing.expect(sizeof(?*u32) == ptr_size);
|
try testing.expect(sizeof(?*u32) == ptr_size);
|
||||||
try testing.expect(sizeof(?[*]u32) == ptr_size);
|
try testing.expect(sizeof(?[*]u32) == ptr_size);
|
||||||
try testing.expect(sizeof(*c_void) == ptr_size);
|
try testing.expect(sizeof(*anyopaque) == ptr_size);
|
||||||
try testing.expect(sizeof(*void) == ptr_size);
|
try testing.expect(sizeof(*void) == ptr_size);
|
||||||
try testing.expect(sizeof(null) == ptr_size);
|
try testing.expect(sizeof(null) == ptr_size);
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ test "sizeof" {
|
|||||||
try testing.expect(sizeof(sizeof) == @sizeOf(@TypeOf(sizeof)));
|
try testing.expect(sizeof(sizeof) == @sizeOf(@TypeOf(sizeof)));
|
||||||
|
|
||||||
try testing.expect(sizeof(void) == 1);
|
try testing.expect(sizeof(void) == 1);
|
||||||
try testing.expect(sizeof(c_void) == 1);
|
try testing.expect(sizeof(anyopaque) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const CIntLiteralRadix = enum { decimal, octal, hexadecimal };
|
pub const CIntLiteralRadix = enum { decimal, octal, hexadecimal };
|
||||||
|
|||||||
@ -87,6 +87,29 @@ test "zig fmt: rewrite @byteOffsetOf to @offsetOf" {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Remove this after zig 0.10.0 is released.
|
||||||
|
test "zig fmt: rewrite c_void to anyopaque" {
|
||||||
|
try testTransform(
|
||||||
|
\\const Foo = struct {
|
||||||
|
\\ c_void: *c_void,
|
||||||
|
\\};
|
||||||
|
\\
|
||||||
|
\\fn foo(a: ?*c_void) !*c_void {
|
||||||
|
\\ return a orelse unreachable;
|
||||||
|
\\}
|
||||||
|
\\
|
||||||
|
,
|
||||||
|
\\const Foo = struct {
|
||||||
|
\\ c_void: *anyopaque,
|
||||||
|
\\};
|
||||||
|
\\
|
||||||
|
\\fn foo(a: ?*anyopaque) !*anyopaque {
|
||||||
|
\\ return a orelse unreachable;
|
||||||
|
\\}
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
test "zig fmt: simple top level comptime block" {
|
test "zig fmt: simple top level comptime block" {
|
||||||
try testCanonical(
|
try testCanonical(
|
||||||
\\// line comment
|
\\// line comment
|
||||||
|
|||||||
@ -183,7 +183,21 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index,
|
|||||||
const node_tags = tree.nodes.items(.tag);
|
const node_tags = tree.nodes.items(.tag);
|
||||||
const datas = tree.nodes.items(.data);
|
const datas = tree.nodes.items(.data);
|
||||||
switch (node_tags[node]) {
|
switch (node_tags[node]) {
|
||||||
.identifier,
|
// TODO remove this c_void -> anyopaque rewrite after the 0.10.0 release.
|
||||||
|
// Also get rid of renderSpace() as it will no longer be necessary.
|
||||||
|
.identifier => {
|
||||||
|
const token_index = main_tokens[node];
|
||||||
|
|
||||||
|
const lexeme = tokenSliceForRender(tree, token_index);
|
||||||
|
if (mem.eql(u8, lexeme, "c_void")) {
|
||||||
|
try ais.writer().writeAll("anyopaque");
|
||||||
|
} else {
|
||||||
|
try ais.writer().writeAll(lexeme);
|
||||||
|
}
|
||||||
|
|
||||||
|
return renderSpace(ais, tree, token_index, lexeme.len, space);
|
||||||
|
},
|
||||||
|
|
||||||
.integer_literal,
|
.integer_literal,
|
||||||
.float_literal,
|
.float_literal,
|
||||||
.char_literal,
|
.char_literal,
|
||||||
@ -2284,13 +2298,16 @@ const Space = enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
fn renderToken(ais: *Ais, tree: Ast, token_index: Ast.TokenIndex, space: Space) Error!void {
|
fn renderToken(ais: *Ais, tree: Ast, token_index: Ast.TokenIndex, space: Space) Error!void {
|
||||||
|
const lexeme = tokenSliceForRender(tree, token_index);
|
||||||
|
try ais.writer().writeAll(lexeme);
|
||||||
|
try renderSpace(ais, tree, token_index, lexeme.len, space);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn renderSpace(ais: *Ais, tree: Ast, token_index: Ast.TokenIndex, lexeme_len: usize, space: Space) Error!void {
|
||||||
const token_tags = tree.tokens.items(.tag);
|
const token_tags = tree.tokens.items(.tag);
|
||||||
const token_starts = tree.tokens.items(.start);
|
const token_starts = tree.tokens.items(.start);
|
||||||
|
|
||||||
const token_start = token_starts[token_index];
|
const token_start = token_starts[token_index];
|
||||||
const lexeme = tokenSliceForRender(tree, token_index);
|
|
||||||
|
|
||||||
try ais.writer().writeAll(lexeme);
|
|
||||||
|
|
||||||
if (space == .skip) return;
|
if (space == .skip) return;
|
||||||
|
|
||||||
@ -2298,7 +2315,7 @@ fn renderToken(ais: *Ais, tree: Ast, token_index: Ast.TokenIndex, space: Space)
|
|||||||
try ais.writer().writeByte(',');
|
try ais.writer().writeByte(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
const comment = try renderComments(ais, tree, token_start + lexeme.len, token_starts[token_index + 1]);
|
const comment = try renderComments(ais, tree, token_start + lexeme_len, token_starts[token_index + 1]);
|
||||||
switch (space) {
|
switch (space) {
|
||||||
.none => {},
|
.none => {},
|
||||||
.space => if (!comment) try ais.writer().writeByte(' '),
|
.space => if (!comment) try ais.writer().writeByte(' '),
|
||||||
|
|||||||
@ -7597,6 +7597,7 @@ fn calleeExpr(
|
|||||||
const primitives = std.ComptimeStringMap(Zir.Inst.Ref, .{
|
const primitives = std.ComptimeStringMap(Zir.Inst.Ref, .{
|
||||||
.{ "anyerror", .anyerror_type },
|
.{ "anyerror", .anyerror_type },
|
||||||
.{ "anyframe", .anyframe_type },
|
.{ "anyframe", .anyframe_type },
|
||||||
|
.{ "anyopaque", .anyopaque_type },
|
||||||
.{ "bool", .bool_type },
|
.{ "bool", .bool_type },
|
||||||
.{ "c_int", .c_int_type },
|
.{ "c_int", .c_int_type },
|
||||||
.{ "c_long", .c_long_type },
|
.{ "c_long", .c_long_type },
|
||||||
@ -7607,7 +7608,6 @@ const primitives = std.ComptimeStringMap(Zir.Inst.Ref, .{
|
|||||||
.{ "c_ulong", .c_ulong_type },
|
.{ "c_ulong", .c_ulong_type },
|
||||||
.{ "c_ulonglong", .c_ulonglong_type },
|
.{ "c_ulonglong", .c_ulonglong_type },
|
||||||
.{ "c_ushort", .c_ushort_type },
|
.{ "c_ushort", .c_ushort_type },
|
||||||
.{ "c_void", .c_void_type },
|
|
||||||
.{ "comptime_float", .comptime_float_type },
|
.{ "comptime_float", .comptime_float_type },
|
||||||
.{ "comptime_int", .comptime_int_type },
|
.{ "comptime_int", .comptime_int_type },
|
||||||
.{ "f128", .f128_type },
|
.{ "f128", .f128_type },
|
||||||
@ -8324,7 +8324,7 @@ fn rvalue(
|
|||||||
as_ty | @enumToInt(Zir.Inst.Ref.f32_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.f32_type),
|
||||||
as_ty | @enumToInt(Zir.Inst.Ref.f64_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.f64_type),
|
||||||
as_ty | @enumToInt(Zir.Inst.Ref.f128_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.f128_type),
|
||||||
as_ty | @enumToInt(Zir.Inst.Ref.c_void_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.anyopaque_type),
|
||||||
as_ty | @enumToInt(Zir.Inst.Ref.bool_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.bool_type),
|
||||||
as_ty | @enumToInt(Zir.Inst.Ref.void_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.void_type),
|
||||||
as_ty | @enumToInt(Zir.Inst.Ref.type_type),
|
as_ty | @enumToInt(Zir.Inst.Ref.type_type),
|
||||||
|
|||||||
@ -12354,9 +12354,9 @@ fn coerce(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// cast from *T and [*]T to *c_void
|
// cast from *T and [*]T to *anyopaque
|
||||||
// but don't do it if the source type is a double pointer
|
// but don't do it if the source type is a double pointer
|
||||||
if (dest_info.pointee_type.tag() == .c_void and inst_ty.zigTypeTag() == .Pointer and
|
if (dest_info.pointee_type.tag() == .anyopaque and inst_ty.zigTypeTag() == .Pointer and
|
||||||
inst_ty.childType().zigTypeTag() != .Pointer)
|
inst_ty.childType().zigTypeTag() != .Pointer)
|
||||||
{
|
{
|
||||||
return sema.coerceCompatiblePtrs(block, dest_ty, inst, inst_src);
|
return sema.coerceCompatiblePtrs(block, dest_ty, inst, inst_src);
|
||||||
@ -14809,7 +14809,7 @@ fn typeHasOnePossibleValue(
|
|||||||
.const_slice_u8,
|
.const_slice_u8,
|
||||||
.const_slice,
|
.const_slice,
|
||||||
.mut_slice,
|
.mut_slice,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.optional,
|
.optional,
|
||||||
.optional_single_mut_pointer,
|
.optional_single_mut_pointer,
|
||||||
.optional_single_const_pointer,
|
.optional_single_const_pointer,
|
||||||
@ -15026,7 +15026,7 @@ pub fn addType(sema: *Sema, ty: Type) !Air.Inst.Ref {
|
|||||||
.f32 => return .f32_type,
|
.f32 => return .f32_type,
|
||||||
.f64 => return .f64_type,
|
.f64 => return .f64_type,
|
||||||
.f128 => return .f128_type,
|
.f128 => return .f128_type,
|
||||||
.c_void => return .c_void_type,
|
.anyopaque => return .anyopaque_type,
|
||||||
.bool => return .bool_type,
|
.bool => return .bool_type,
|
||||||
.void => return .void_type,
|
.void => return .void_type,
|
||||||
.type => return .type_type,
|
.type => return .type_type,
|
||||||
|
|||||||
@ -1632,7 +1632,7 @@ pub const Inst = struct {
|
|||||||
f32_type,
|
f32_type,
|
||||||
f64_type,
|
f64_type,
|
||||||
f128_type,
|
f128_type,
|
||||||
c_void_type,
|
anyopaque_type,
|
||||||
bool_type,
|
bool_type,
|
||||||
void_type,
|
void_type,
|
||||||
type_type,
|
type_type,
|
||||||
@ -1805,9 +1805,9 @@ pub const Inst = struct {
|
|||||||
.ty = Type.initTag(.type),
|
.ty = Type.initTag(.type),
|
||||||
.val = Value.initTag(.f128_type),
|
.val = Value.initTag(.f128_type),
|
||||||
},
|
},
|
||||||
.c_void_type = .{
|
.anyopaque_type = .{
|
||||||
.ty = Type.initTag(.type),
|
.ty = Type.initTag(.type),
|
||||||
.val = Value.initTag(.c_void_type),
|
.val = Value.initTag(.anyopaque_type),
|
||||||
},
|
},
|
||||||
.bool_type = .{
|
.bool_type = .{
|
||||||
.ty = Type.initTag(.type),
|
.ty = Type.initTag(.type),
|
||||||
|
|||||||
@ -9,7 +9,7 @@ pub const SourceLocation = extern struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const QualType = extern struct {
|
pub const QualType = extern struct {
|
||||||
ptr: ?*c_void,
|
ptr: ?*anyopaque,
|
||||||
|
|
||||||
pub const getCanonicalType = ZigClangQualType_getCanonicalType;
|
pub const getCanonicalType = ZigClangQualType_getCanonicalType;
|
||||||
extern fn ZigClangQualType_getCanonicalType(QualType) QualType;
|
extern fn ZigClangQualType_getCanonicalType(QualType) QualType;
|
||||||
@ -37,7 +37,7 @@ pub const QualType = extern struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const APValueLValueBase = extern struct {
|
pub const APValueLValueBase = extern struct {
|
||||||
Ptr: ?*c_void,
|
Ptr: ?*anyopaque,
|
||||||
CallIndex: c_uint,
|
CallIndex: c_uint,
|
||||||
Version: c_uint,
|
Version: c_uint,
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ pub const APValue = extern struct {
|
|||||||
pub const ExprEvalResult = extern struct {
|
pub const ExprEvalResult = extern struct {
|
||||||
HasSideEffects: bool,
|
HasSideEffects: bool,
|
||||||
HasUndefinedBehavior: bool,
|
HasUndefinedBehavior: bool,
|
||||||
SmallVectorImpl: ?*c_void,
|
SmallVectorImpl: ?*anyopaque,
|
||||||
Val: APValue,
|
Val: APValue,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ pub const ASTUnit = opaque {
|
|||||||
extern fn ZigClangASTUnit_getSourceManager(*ASTUnit) *SourceManager;
|
extern fn ZigClangASTUnit_getSourceManager(*ASTUnit) *SourceManager;
|
||||||
|
|
||||||
pub const visitLocalTopLevelDecls = ZigClangASTUnit_visitLocalTopLevelDecls;
|
pub const visitLocalTopLevelDecls = ZigClangASTUnit_visitLocalTopLevelDecls;
|
||||||
extern fn ZigClangASTUnit_visitLocalTopLevelDecls(*ASTUnit, context: ?*c_void, Fn: ?fn (?*c_void, *const Decl) callconv(.C) bool) bool;
|
extern fn ZigClangASTUnit_visitLocalTopLevelDecls(*ASTUnit, context: ?*anyopaque, Fn: ?fn (?*anyopaque, *const Decl) callconv(.C) bool) bool;
|
||||||
|
|
||||||
pub const getLocalPreprocessingEntities_begin = ZigClangASTUnit_getLocalPreprocessingEntities_begin;
|
pub const getLocalPreprocessingEntities_begin = ZigClangASTUnit_getLocalPreprocessingEntities_begin;
|
||||||
extern fn ZigClangASTUnit_getLocalPreprocessingEntities_begin(*ASTUnit) PreprocessingRecord.iterator;
|
extern fn ZigClangASTUnit_getLocalPreprocessingEntities_begin(*ASTUnit) PreprocessingRecord.iterator;
|
||||||
@ -418,7 +418,7 @@ pub const EnumDecl = opaque {
|
|||||||
extern fn ZigClangEnumDecl_enumerator_end(*const EnumDecl) enumerator_iterator;
|
extern fn ZigClangEnumDecl_enumerator_end(*const EnumDecl) enumerator_iterator;
|
||||||
|
|
||||||
pub const enumerator_iterator = extern struct {
|
pub const enumerator_iterator = extern struct {
|
||||||
ptr: *c_void,
|
ptr: *anyopaque,
|
||||||
|
|
||||||
pub const next = ZigClangEnumDecl_enumerator_iterator_next;
|
pub const next = ZigClangEnumDecl_enumerator_iterator_next;
|
||||||
extern fn ZigClangEnumDecl_enumerator_iterator_next(enumerator_iterator) enumerator_iterator;
|
extern fn ZigClangEnumDecl_enumerator_iterator_next(enumerator_iterator) enumerator_iterator;
|
||||||
@ -778,7 +778,7 @@ pub const RecordDecl = opaque {
|
|||||||
extern fn ZigClangRecordDecl_field_end(*const RecordDecl) field_iterator;
|
extern fn ZigClangRecordDecl_field_end(*const RecordDecl) field_iterator;
|
||||||
|
|
||||||
pub const field_iterator = extern struct {
|
pub const field_iterator = extern struct {
|
||||||
ptr: *c_void,
|
ptr: *anyopaque,
|
||||||
|
|
||||||
pub const next = ZigClangRecordDecl_field_iterator_next;
|
pub const next = ZigClangRecordDecl_field_iterator_next;
|
||||||
extern fn ZigClangRecordDecl_field_iterator_next(field_iterator) field_iterator;
|
extern fn ZigClangRecordDecl_field_iterator_next(field_iterator) field_iterator;
|
||||||
|
|||||||
@ -179,7 +179,7 @@ pub fn attachSegfaultHandler() void {
|
|||||||
os.sigaction(os.SIG.BUS, &act, null);
|
os.sigaction(os.SIG.BUS, &act, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const c_void) callconv(.C) noreturn {
|
fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) noreturn {
|
||||||
// TODO: use alarm() here to prevent infinite loops
|
// TODO: use alarm() here to prevent infinite loops
|
||||||
PanicSwitch.preDispatch();
|
PanicSwitch.preDispatch();
|
||||||
|
|
||||||
|
|||||||
@ -2076,7 +2076,7 @@ struct CodeGen {
|
|||||||
ZigType *entry_bool;
|
ZigType *entry_bool;
|
||||||
ZigType *entry_c_int[CIntTypeCount];
|
ZigType *entry_c_int[CIntTypeCount];
|
||||||
ZigType *entry_c_longdouble;
|
ZigType *entry_c_longdouble;
|
||||||
ZigType *entry_c_void;
|
ZigType *entry_anyopaque;
|
||||||
ZigType *entry_u8;
|
ZigType *entry_u8;
|
||||||
ZigType *entry_u16;
|
ZigType *entry_u16;
|
||||||
ZigType *entry_u32;
|
ZigType *entry_u32;
|
||||||
|
|||||||
@ -9014,9 +9014,9 @@ static void define_builtin_types(CodeGen *g) {
|
|||||||
g->builtin_types.entry_i64 = get_int_type(g, true, 64);
|
g->builtin_types.entry_i64 = get_int_type(g, true, 64);
|
||||||
|
|
||||||
{
|
{
|
||||||
g->builtin_types.entry_c_void = get_opaque_type(g, nullptr, nullptr, "c_void",
|
g->builtin_types.entry_anyopaque = get_opaque_type(g, nullptr, nullptr, "anyopaque",
|
||||||
buf_create_from_str("c_void"));
|
buf_create_from_str("anyopaque"));
|
||||||
g->primitive_type_table.put(&g->builtin_types.entry_c_void->name, g->builtin_types.entry_c_void);
|
g->primitive_type_table.put(&g->builtin_types.entry_anyopaque->name, g->builtin_types.entry_anyopaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@ -7884,18 +7884,18 @@ static Stage1AirInst *ir_analyze_cast(IrAnalyze *ira, Scope *scope, AstNode *sou
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// cast from *T and [*]T to *c_void and ?*c_void
|
// cast from *T and [*]T to *anyopaque and ?*anyopaque
|
||||||
// but don't do it if the actual type is a double pointer
|
// but don't do it if the actual type is a double pointer
|
||||||
if (is_pointery_and_elem_is_not_pointery(actual_type)) {
|
if (is_pointery_and_elem_is_not_pointery(actual_type)) {
|
||||||
ZigType *dest_ptr_type = nullptr;
|
ZigType *dest_ptr_type = nullptr;
|
||||||
if (wanted_type->id == ZigTypeIdPointer &&
|
if (wanted_type->id == ZigTypeIdPointer &&
|
||||||
actual_type->id != ZigTypeIdOptional &&
|
actual_type->id != ZigTypeIdOptional &&
|
||||||
wanted_type->data.pointer.child_type == ira->codegen->builtin_types.entry_c_void)
|
wanted_type->data.pointer.child_type == ira->codegen->builtin_types.entry_anyopaque)
|
||||||
{
|
{
|
||||||
dest_ptr_type = wanted_type;
|
dest_ptr_type = wanted_type;
|
||||||
} else if (wanted_type->id == ZigTypeIdOptional &&
|
} else if (wanted_type->id == ZigTypeIdOptional &&
|
||||||
wanted_type->data.maybe.child_type->id == ZigTypeIdPointer &&
|
wanted_type->data.maybe.child_type->id == ZigTypeIdPointer &&
|
||||||
wanted_type->data.maybe.child_type->data.pointer.child_type == ira->codegen->builtin_types.entry_c_void)
|
wanted_type->data.maybe.child_type->data.pointer.child_type == ira->codegen->builtin_types.entry_anyopaque)
|
||||||
{
|
{
|
||||||
dest_ptr_type = wanted_type->data.maybe.child_type;
|
dest_ptr_type = wanted_type->data.maybe.child_type;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -284,14 +284,14 @@ extern fn ___tracy_emit_zone_name(ctx: ___tracy_c_zone_context, txt: [*]const u8
|
|||||||
extern fn ___tracy_emit_zone_color(ctx: ___tracy_c_zone_context, color: u32) void;
|
extern fn ___tracy_emit_zone_color(ctx: ___tracy_c_zone_context, color: u32) void;
|
||||||
extern fn ___tracy_emit_zone_value(ctx: ___tracy_c_zone_context, value: u64) void;
|
extern fn ___tracy_emit_zone_value(ctx: ___tracy_c_zone_context, value: u64) void;
|
||||||
extern fn ___tracy_emit_zone_end(ctx: ___tracy_c_zone_context) void;
|
extern fn ___tracy_emit_zone_end(ctx: ___tracy_c_zone_context) void;
|
||||||
extern fn ___tracy_emit_memory_alloc(ptr: *const c_void, size: usize, secure: c_int) void;
|
extern fn ___tracy_emit_memory_alloc(ptr: *const anyopaque, size: usize, secure: c_int) void;
|
||||||
extern fn ___tracy_emit_memory_alloc_callstack(ptr: *const c_void, size: usize, depth: c_int, secure: c_int) void;
|
extern fn ___tracy_emit_memory_alloc_callstack(ptr: *const anyopaque, size: usize, depth: c_int, secure: c_int) void;
|
||||||
extern fn ___tracy_emit_memory_free(ptr: *const c_void, secure: c_int) void;
|
extern fn ___tracy_emit_memory_free(ptr: *const anyopaque, secure: c_int) void;
|
||||||
extern fn ___tracy_emit_memory_free_callstack(ptr: *const c_void, depth: c_int, secure: c_int) void;
|
extern fn ___tracy_emit_memory_free_callstack(ptr: *const anyopaque, depth: c_int, secure: c_int) void;
|
||||||
extern fn ___tracy_emit_memory_alloc_named(ptr: *const c_void, size: usize, secure: c_int, name: [*:0]const u8) void;
|
extern fn ___tracy_emit_memory_alloc_named(ptr: *const anyopaque, size: usize, secure: c_int, name: [*:0]const u8) void;
|
||||||
extern fn ___tracy_emit_memory_alloc_callstack_named(ptr: *const c_void, size: usize, depth: c_int, secure: c_int, name: [*:0]const u8) void;
|
extern fn ___tracy_emit_memory_alloc_callstack_named(ptr: *const anyopaque, size: usize, depth: c_int, secure: c_int, name: [*:0]const u8) void;
|
||||||
extern fn ___tracy_emit_memory_free_named(ptr: *const c_void, secure: c_int, name: [*:0]const u8) void;
|
extern fn ___tracy_emit_memory_free_named(ptr: *const anyopaque, secure: c_int, name: [*:0]const u8) void;
|
||||||
extern fn ___tracy_emit_memory_free_callstack_named(ptr: *const c_void, depth: c_int, secure: c_int, name: [*:0]const u8) void;
|
extern fn ___tracy_emit_memory_free_callstack_named(ptr: *const anyopaque, depth: c_int, secure: c_int, name: [*:0]const u8) void;
|
||||||
extern fn ___tracy_emit_message(txt: [*]const u8, size: usize, callstack: c_int) void;
|
extern fn ___tracy_emit_message(txt: [*]const u8, size: usize, callstack: c_int) void;
|
||||||
extern fn ___tracy_emit_messageL(txt: [*:0]const u8, callstack: c_int) void;
|
extern fn ___tracy_emit_messageL(txt: [*:0]const u8, callstack: c_int) void;
|
||||||
extern fn ___tracy_emit_messageC(txt: [*]const u8, size: usize, color: u32, callstack: c_int) void;
|
extern fn ___tracy_emit_messageC(txt: [*]const u8, size: usize, color: u32, callstack: c_int) void;
|
||||||
|
|||||||
@ -448,13 +448,13 @@ fn prepopulateGlobalNameTable(ast_unit: *clang.ASTUnit, c: *Context) !void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn declVisitorNamesOnlyC(context: ?*c_void, decl: *const clang.Decl) callconv(.C) bool {
|
fn declVisitorNamesOnlyC(context: ?*anyopaque, decl: *const clang.Decl) callconv(.C) bool {
|
||||||
const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
|
const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
|
||||||
declVisitorNamesOnly(c, decl) catch return false;
|
declVisitorNamesOnly(c, decl) catch return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn declVisitorC(context: ?*c_void, decl: *const clang.Decl) callconv(.C) bool {
|
fn declVisitorC(context: ?*anyopaque, decl: *const clang.Decl) callconv(.C) bool {
|
||||||
const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
|
const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
|
||||||
declVisitor(c, decl) catch return false;
|
declVisitor(c, decl) catch return false;
|
||||||
return true;
|
return true;
|
||||||
@ -698,7 +698,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const clang.FunctionDecl) Error!void {
|
|||||||
// add return statement if the function didn't have one
|
// add return statement if the function didn't have one
|
||||||
blk: {
|
blk: {
|
||||||
const maybe_body = try block_scope.complete(c);
|
const maybe_body = try block_scope.complete(c);
|
||||||
if (fn_ty.getNoReturnAttr() or isCVoid(return_qt) or maybe_body.isNoreturn(false)) {
|
if (fn_ty.getNoReturnAttr() or isAnyopaque(return_qt) or maybe_body.isNoreturn(false)) {
|
||||||
proto_node.data.body = maybe_body;
|
proto_node.data.body = maybe_body;
|
||||||
break :blk;
|
break :blk;
|
||||||
}
|
}
|
||||||
@ -4618,7 +4618,7 @@ fn transType(c: *Context, scope: *Scope, ty: *const clang.Type, source_loc: clan
|
|||||||
.Builtin => {
|
.Builtin => {
|
||||||
const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
|
const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
|
||||||
return Tag.type.create(c.arena, switch (builtin_ty.getKind()) {
|
return Tag.type.create(c.arena, switch (builtin_ty.getKind()) {
|
||||||
.Void => "c_void",
|
.Void => "anyopaque",
|
||||||
.Bool => "bool",
|
.Bool => "bool",
|
||||||
.Char_U, .UChar, .Char_S, .Char8 => "u8",
|
.Char_U, .UChar, .Char_S, .Char8 => "u8",
|
||||||
.SChar => "i8",
|
.SChar => "i8",
|
||||||
@ -4822,7 +4822,7 @@ fn qualTypeWasDemotedToOpaque(c: *Context, qt: clang.QualType) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn isCVoid(qt: clang.QualType) bool {
|
fn isAnyopaque(qt: clang.QualType) bool {
|
||||||
const ty = qt.getTypePtr();
|
const ty = qt.getTypePtr();
|
||||||
if (ty.getTypeClass() == .Builtin) {
|
if (ty.getTypeClass() == .Builtin) {
|
||||||
const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
|
const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
|
||||||
@ -4955,8 +4955,8 @@ fn finishTransFnProto(
|
|||||||
break :blk Tag.noreturn_type.init();
|
break :blk Tag.noreturn_type.init();
|
||||||
} else {
|
} else {
|
||||||
const return_qt = fn_ty.getReturnType();
|
const return_qt = fn_ty.getReturnType();
|
||||||
if (isCVoid(return_qt)) {
|
if (isAnyopaque(return_qt)) {
|
||||||
// convert primitive c_void to actual void (only for return type)
|
// convert primitive anyopaque to actual void (only for return type)
|
||||||
break :blk Tag.void_type.init();
|
break :blk Tag.void_type.init();
|
||||||
} else {
|
} else {
|
||||||
break :blk transQualType(c, scope, return_qt, source_loc) catch |err| switch (err) {
|
break :blk transQualType(c, scope, return_qt, source_loc) catch |err| switch (err) {
|
||||||
@ -6096,7 +6096,7 @@ fn parseCSpecifierQualifierList(c: *Context, m: *MacroCtx, scope: *Scope, allow_
|
|||||||
return try Tag.identifier.create(c.arena, mangled_name);
|
return try Tag.identifier.create(c.arena, mangled_name);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.Keyword_void => return try Tag.type.create(c.arena, "c_void"),
|
.Keyword_void => return try Tag.type.create(c.arena, "anyopaque"),
|
||||||
.Keyword_bool => return try Tag.type.create(c.arena, "bool"),
|
.Keyword_bool => return try Tag.type.create(c.arena, "bool"),
|
||||||
.Keyword_char,
|
.Keyword_char,
|
||||||
.Keyword_int,
|
.Keyword_int,
|
||||||
|
|||||||
26
src/type.zig
26
src/type.zig
@ -68,7 +68,7 @@ pub const Type = extern union {
|
|||||||
.error_set_merged,
|
.error_set_merged,
|
||||||
=> return .ErrorSet,
|
=> return .ErrorSet,
|
||||||
|
|
||||||
.c_void, .@"opaque" => return .Opaque,
|
.anyopaque, .@"opaque" => return .Opaque,
|
||||||
.bool => return .Bool,
|
.bool => return .Bool,
|
||||||
.void => return .Void,
|
.void => return .Void,
|
||||||
.type => return .Type,
|
.type => return .Type,
|
||||||
@ -764,7 +764,7 @@ pub const Type = extern union {
|
|||||||
.c_longlong,
|
.c_longlong,
|
||||||
.c_ulonglong,
|
.c_ulonglong,
|
||||||
.c_longdouble,
|
.c_longdouble,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.f16,
|
.f16,
|
||||||
.f32,
|
.f32,
|
||||||
.f64,
|
.f64,
|
||||||
@ -965,7 +965,7 @@ pub const Type = extern union {
|
|||||||
.c_longlong,
|
.c_longlong,
|
||||||
.c_ulonglong,
|
.c_ulonglong,
|
||||||
.c_longdouble,
|
.c_longdouble,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.f16,
|
.f16,
|
||||||
.f32,
|
.f32,
|
||||||
.f64,
|
.f64,
|
||||||
@ -1257,7 +1257,7 @@ pub const Type = extern union {
|
|||||||
.c_longlong,
|
.c_longlong,
|
||||||
.c_ulonglong,
|
.c_ulonglong,
|
||||||
.c_longdouble,
|
.c_longdouble,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.f16,
|
.f16,
|
||||||
.f32,
|
.f32,
|
||||||
.f64,
|
.f64,
|
||||||
@ -1365,7 +1365,7 @@ pub const Type = extern union {
|
|||||||
.f32,
|
.f32,
|
||||||
.f64,
|
.f64,
|
||||||
.f128,
|
.f128,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.bool,
|
.bool,
|
||||||
.void,
|
.void,
|
||||||
.anyerror,
|
.anyerror,
|
||||||
@ -1476,7 +1476,7 @@ pub const Type = extern union {
|
|||||||
.c_longlong => return Value.initTag(.c_longlong_type),
|
.c_longlong => return Value.initTag(.c_longlong_type),
|
||||||
.c_ulonglong => return Value.initTag(.c_ulonglong_type),
|
.c_ulonglong => return Value.initTag(.c_ulonglong_type),
|
||||||
.c_longdouble => return Value.initTag(.c_longdouble_type),
|
.c_longdouble => return Value.initTag(.c_longdouble_type),
|
||||||
.c_void => return Value.initTag(.c_void_type),
|
.anyopaque => return Value.initTag(.anyopaque_type),
|
||||||
.f16 => return Value.initTag(.f16_type),
|
.f16 => return Value.initTag(.f16_type),
|
||||||
.f32 => return Value.initTag(.f32_type),
|
.f32 => return Value.initTag(.f32_type),
|
||||||
.f64 => return Value.initTag(.f64_type),
|
.f64 => return Value.initTag(.f64_type),
|
||||||
@ -1653,7 +1653,7 @@ pub const Type = extern union {
|
|||||||
return payload.error_set.hasCodeGenBits() or payload.payload.hasCodeGenBits();
|
return payload.error_set.hasCodeGenBits() or payload.payload.hasCodeGenBits();
|
||||||
},
|
},
|
||||||
|
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.void,
|
.void,
|
||||||
.type,
|
.type,
|
||||||
.comptime_int,
|
.comptime_int,
|
||||||
@ -1897,7 +1897,7 @@ pub const Type = extern union {
|
|||||||
|
|
||||||
.empty_struct,
|
.empty_struct,
|
||||||
.void,
|
.void,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
=> return 0,
|
=> return 0,
|
||||||
|
|
||||||
.empty_struct_literal,
|
.empty_struct_literal,
|
||||||
@ -1942,7 +1942,7 @@ pub const Type = extern union {
|
|||||||
.extern_options => unreachable, // missing call to resolveTypeFields
|
.extern_options => unreachable, // missing call to resolveTypeFields
|
||||||
.type_info => unreachable, // missing call to resolveTypeFields
|
.type_info => unreachable, // missing call to resolveTypeFields
|
||||||
|
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.type,
|
.type,
|
||||||
.comptime_int,
|
.comptime_int,
|
||||||
.comptime_float,
|
.comptime_float,
|
||||||
@ -2116,7 +2116,7 @@ pub const Type = extern union {
|
|||||||
.fn_naked_noreturn_no_args => unreachable, // represents machine code; not a pointer
|
.fn_naked_noreturn_no_args => unreachable, // represents machine code; not a pointer
|
||||||
.fn_ccc_void_no_args => unreachable, // represents machine code; not a pointer
|
.fn_ccc_void_no_args => unreachable, // represents machine code; not a pointer
|
||||||
.function => unreachable, // represents machine code; not a pointer
|
.function => unreachable, // represents machine code; not a pointer
|
||||||
.c_void => unreachable,
|
.anyopaque => unreachable,
|
||||||
.void => unreachable,
|
.void => unreachable,
|
||||||
.type => unreachable,
|
.type => unreachable,
|
||||||
.comptime_int => unreachable,
|
.comptime_int => unreachable,
|
||||||
@ -3283,7 +3283,7 @@ pub const Type = extern union {
|
|||||||
.const_slice_u8,
|
.const_slice_u8,
|
||||||
.const_slice,
|
.const_slice,
|
||||||
.mut_slice,
|
.mut_slice,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.optional,
|
.optional,
|
||||||
.optional_single_mut_pointer,
|
.optional_single_mut_pointer,
|
||||||
.optional_single_const_pointer,
|
.optional_single_const_pointer,
|
||||||
@ -3860,7 +3860,7 @@ pub const Type = extern union {
|
|||||||
f32,
|
f32,
|
||||||
f64,
|
f64,
|
||||||
f128,
|
f128,
|
||||||
c_void,
|
anyopaque,
|
||||||
bool,
|
bool,
|
||||||
void,
|
void,
|
||||||
type,
|
type,
|
||||||
@ -3975,7 +3975,7 @@ pub const Type = extern union {
|
|||||||
.f32,
|
.f32,
|
||||||
.f64,
|
.f64,
|
||||||
.f128,
|
.f128,
|
||||||
.c_void,
|
.anyopaque,
|
||||||
.bool,
|
.bool,
|
||||||
.void,
|
.void,
|
||||||
.type,
|
.type,
|
||||||
|
|||||||
@ -48,7 +48,7 @@ pub const Value = extern union {
|
|||||||
f32_type,
|
f32_type,
|
||||||
f64_type,
|
f64_type,
|
||||||
f128_type,
|
f128_type,
|
||||||
c_void_type,
|
anyopaque_type,
|
||||||
bool_type,
|
bool_type,
|
||||||
void_type,
|
void_type,
|
||||||
type_type,
|
type_type,
|
||||||
@ -204,7 +204,7 @@ pub const Value = extern union {
|
|||||||
.f32_type,
|
.f32_type,
|
||||||
.f64_type,
|
.f64_type,
|
||||||
.f128_type,
|
.f128_type,
|
||||||
.c_void_type,
|
.anyopaque_type,
|
||||||
.bool_type,
|
.bool_type,
|
||||||
.void_type,
|
.void_type,
|
||||||
.type_type,
|
.type_type,
|
||||||
@ -395,7 +395,7 @@ pub const Value = extern union {
|
|||||||
.f32_type,
|
.f32_type,
|
||||||
.f64_type,
|
.f64_type,
|
||||||
.f128_type,
|
.f128_type,
|
||||||
.c_void_type,
|
.anyopaque_type,
|
||||||
.bool_type,
|
.bool_type,
|
||||||
.void_type,
|
.void_type,
|
||||||
.type_type,
|
.type_type,
|
||||||
@ -625,7 +625,7 @@ pub const Value = extern union {
|
|||||||
.f32_type => return out_stream.writeAll("f32"),
|
.f32_type => return out_stream.writeAll("f32"),
|
||||||
.f64_type => return out_stream.writeAll("f64"),
|
.f64_type => return out_stream.writeAll("f64"),
|
||||||
.f128_type => return out_stream.writeAll("f128"),
|
.f128_type => return out_stream.writeAll("f128"),
|
||||||
.c_void_type => return out_stream.writeAll("c_void"),
|
.anyopaque_type => return out_stream.writeAll("anyopaque"),
|
||||||
.bool_type => return out_stream.writeAll("bool"),
|
.bool_type => return out_stream.writeAll("bool"),
|
||||||
.void_type => return out_stream.writeAll("void"),
|
.void_type => return out_stream.writeAll("void"),
|
||||||
.type_type => return out_stream.writeAll("type"),
|
.type_type => return out_stream.writeAll("type"),
|
||||||
@ -804,7 +804,7 @@ pub const Value = extern union {
|
|||||||
.f32_type => Type.initTag(.f32),
|
.f32_type => Type.initTag(.f32),
|
||||||
.f64_type => Type.initTag(.f64),
|
.f64_type => Type.initTag(.f64),
|
||||||
.f128_type => Type.initTag(.f128),
|
.f128_type => Type.initTag(.f128),
|
||||||
.c_void_type => Type.initTag(.c_void),
|
.anyopaque_type => Type.initTag(.anyopaque),
|
||||||
.bool_type => Type.initTag(.bool),
|
.bool_type => Type.initTag(.bool),
|
||||||
.void_type => Type.initTag(.void),
|
.void_type => Type.initTag(.void),
|
||||||
.type_type => Type.initTag(.type),
|
.type_type => Type.initTag(.type),
|
||||||
|
|||||||
@ -1631,9 +1631,9 @@ test "nosuspend resume async function calls" {
|
|||||||
try expectEqual(@as(i32, 42), (try await frame_d).b);
|
try expectEqual(@as(i32, 42), (try await frame_d).b);
|
||||||
}
|
}
|
||||||
|
|
||||||
test "avoid forcing frame alignment resolution implicit cast to *c_void" {
|
test "avoid forcing frame alignment resolution implicit cast to *anyopaque" {
|
||||||
const S = struct {
|
const S = struct {
|
||||||
var x: ?*c_void = null;
|
var x: ?*anyopaque = null;
|
||||||
|
|
||||||
fn foo() bool {
|
fn foo() bool {
|
||||||
suspend {
|
suspend {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ const Foo = struct {
|
|||||||
var foo: Foo = undefined;
|
var foo: Foo = undefined;
|
||||||
const t = &foo;
|
const t = &foo;
|
||||||
|
|
||||||
fn bar(pointer: ?*c_void) void {
|
fn bar(pointer: ?*anyopaque) void {
|
||||||
_ = pointer;
|
_ = pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,14 +31,14 @@ fn expectFloatToInt(comptime F: type, f: F, comptime I: type, i: I) !void {
|
|||||||
try expect(@floatToInt(I, f) == i);
|
try expect(@floatToInt(I, f) == i);
|
||||||
}
|
}
|
||||||
|
|
||||||
test "implicit cast from [*]T to ?*c_void" {
|
test "implicit cast from [*]T to ?*anyopaque" {
|
||||||
var a = [_]u8{ 3, 2, 1 };
|
var a = [_]u8{ 3, 2, 1 };
|
||||||
var runtime_zero: usize = 0;
|
var runtime_zero: usize = 0;
|
||||||
incrementVoidPtrArray(a[runtime_zero..].ptr, 3);
|
incrementVoidPtrArray(a[runtime_zero..].ptr, 3);
|
||||||
try expect(std.mem.eql(u8, &a, &[_]u8{ 4, 3, 2 }));
|
try expect(std.mem.eql(u8, &a, &[_]u8{ 4, 3, 2 }));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn incrementVoidPtrArray(array: ?*c_void, len: usize) void {
|
fn incrementVoidPtrArray(array: ?*anyopaque, len: usize) void {
|
||||||
var n: usize = 0;
|
var n: usize = 0;
|
||||||
while (n < len) : (n += 1) {
|
while (n < len) : (n += 1) {
|
||||||
@ptrCast([*]u8, array.?)[n] += 1;
|
@ptrCast([*]u8, array.?)[n] += 1;
|
||||||
@ -50,18 +50,18 @@ test "compile time int to ptr of function" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub const FUNCTION_CONSTANT = @intToPtr(PFN_void, maxInt(usize));
|
pub const FUNCTION_CONSTANT = @intToPtr(PFN_void, maxInt(usize));
|
||||||
pub const PFN_void = fn (*c_void) callconv(.C) void;
|
pub const PFN_void = fn (*anyopaque) callconv(.C) void;
|
||||||
|
|
||||||
fn foobar(func: PFN_void) !void {
|
fn foobar(func: PFN_void) !void {
|
||||||
try std.testing.expect(@ptrToInt(func) == maxInt(usize));
|
try std.testing.expect(@ptrToInt(func) == maxInt(usize));
|
||||||
}
|
}
|
||||||
|
|
||||||
test "implicit ptr to *c_void" {
|
test "implicit ptr to *anyopaque" {
|
||||||
var a: u32 = 1;
|
var a: u32 = 1;
|
||||||
var ptr: *align(@alignOf(u32)) c_void = &a;
|
var ptr: *align(@alignOf(u32)) anyopaque = &a;
|
||||||
var b: *u32 = @ptrCast(*u32, ptr);
|
var b: *u32 = @ptrCast(*u32, ptr);
|
||||||
try expect(b.* == 1);
|
try expect(b.* == 1);
|
||||||
var ptr2: ?*align(@alignOf(u32)) c_void = &a;
|
var ptr2: ?*align(@alignOf(u32)) anyopaque = &a;
|
||||||
var c: *u32 = @ptrCast(*u32, ptr2.?);
|
var c: *u32 = @ptrCast(*u32, ptr2.?);
|
||||||
try expect(c.* == 1);
|
try expect(c.* == 1);
|
||||||
}
|
}
|
||||||
@ -135,13 +135,13 @@ test "implicit cast from *[N]T to ?[*]T" {
|
|||||||
try expect(std.mem.eql(u16, x.?[0..4], y[0..4]));
|
try expect(std.mem.eql(u16, x.?[0..4], y[0..4]));
|
||||||
}
|
}
|
||||||
|
|
||||||
test "implicit cast from *T to ?*c_void" {
|
test "implicit cast from *T to ?*anyopaque" {
|
||||||
var a: u8 = 1;
|
var a: u8 = 1;
|
||||||
incrementVoidPtrValue(&a);
|
incrementVoidPtrValue(&a);
|
||||||
try std.testing.expect(a == 2);
|
try std.testing.expect(a == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn incrementVoidPtrValue(value: ?*c_void) void {
|
fn incrementVoidPtrValue(value: ?*anyopaque) void {
|
||||||
@ptrCast(*u8, value.?).* += 1;
|
@ptrCast(*u8, value.?).* += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,8 +188,8 @@ test "cast between [*c]T and ?[*:0]T on fn parameter" {
|
|||||||
|
|
||||||
var global_struct: struct { f0: usize } = undefined;
|
var global_struct: struct { f0: usize } = undefined;
|
||||||
test "assignment to optional pointer result loc" {
|
test "assignment to optional pointer result loc" {
|
||||||
var foo: struct { ptr: ?*c_void } = .{ .ptr = &global_struct };
|
var foo: struct { ptr: ?*anyopaque } = .{ .ptr = &global_struct };
|
||||||
try expect(foo.ptr.? == @ptrCast(*c_void, &global_struct));
|
try expect(foo.ptr.? == @ptrCast(*anyopaque, &global_struct));
|
||||||
}
|
}
|
||||||
|
|
||||||
test "cast between *[N]void and []void" {
|
test "cast between *[N]void and []void" {
|
||||||
|
|||||||
@ -64,10 +64,10 @@ test "comptime ptrcast keeps larger alignment" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test "implicit optional pointer to optional c_void pointer" {
|
test "implicit optional pointer to optional anyopaque pointer" {
|
||||||
var buf: [4]u8 = "aoeu".*;
|
var buf: [4]u8 = "aoeu".*;
|
||||||
var x: ?[*]u8 = &buf;
|
var x: ?[*]u8 = &buf;
|
||||||
var y: ?*c_void = x;
|
var y: ?*anyopaque = x;
|
||||||
var z = @ptrCast(*[4]u8, y);
|
var z = @ptrCast(*[4]u8, y);
|
||||||
try expect(std.mem.eql(u8, z, "aoeu"));
|
try expect(std.mem.eql(u8, z, "aoeu"));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,5 +22,5 @@ test "reference to a struct type" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test "cast negative integer to pointer" {
|
test "cast negative integer to pointer" {
|
||||||
try expectEqual(@intToPtr(?*c_void, @bitCast(usize, @as(isize, -1))), h.MAP_FAILED);
|
try expectEqual(@intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1))), h.MAP_FAILED);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -227,13 +227,13 @@ fn testUnion() !void {
|
|||||||
try expect(notag_union_info.Union.fields[1].alignment == @alignOf(u32));
|
try expect(notag_union_info.Union.fields[1].alignment == @alignOf(u32));
|
||||||
|
|
||||||
const TestExternUnion = extern union {
|
const TestExternUnion = extern union {
|
||||||
foo: *c_void,
|
foo: *anyopaque,
|
||||||
};
|
};
|
||||||
|
|
||||||
const extern_union_info = @typeInfo(TestExternUnion);
|
const extern_union_info = @typeInfo(TestExternUnion);
|
||||||
try expect(extern_union_info.Union.layout == .Extern);
|
try expect(extern_union_info.Union.layout == .Extern);
|
||||||
try expect(extern_union_info.Union.tag_type == null);
|
try expect(extern_union_info.Union.tag_type == null);
|
||||||
try expect(extern_union_info.Union.fields[0].field_type == *c_void);
|
try expect(extern_union_info.Union.fields[0].field_type == *anyopaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
test "type info: struct info" {
|
test "type info: struct info" {
|
||||||
@ -407,7 +407,7 @@ test "data field is a compile-time value" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test "sentinel of opaque pointer type" {
|
test "sentinel of opaque pointer type" {
|
||||||
const c_void_info = @typeInfo(*c_void);
|
const c_void_info = @typeInfo(*anyopaque);
|
||||||
try expect(c_void_info.Pointer.sentinel == null);
|
try expect(c_void_info.Pointer.sentinel == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -179,7 +179,7 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
|
|||||||
cases.addC("expose function pointer to C land",
|
cases.addC("expose function pointer to C land",
|
||||||
\\const c = @cImport(@cInclude("stdlib.h"));
|
\\const c = @cImport(@cInclude("stdlib.h"));
|
||||||
\\
|
\\
|
||||||
\\export fn compare_fn(a: ?*const c_void, b: ?*const c_void) c_int {
|
\\export fn compare_fn(a: ?*const anyopaque, b: ?*const anyopaque) c_int {
|
||||||
\\ const a_int = @ptrCast(*const i32, @alignCast(@alignOf(i32), a));
|
\\ const a_int = @ptrCast(*const i32, @alignCast(@alignOf(i32), a));
|
||||||
\\ const b_int = @ptrCast(*const i32, @alignCast(@alignOf(i32), b));
|
\\ const b_int = @ptrCast(*const i32, @alignCast(@alignOf(i32), b));
|
||||||
\\ if (a_int.* < b_int.*) {
|
\\ if (a_int.* < b_int.*) {
|
||||||
@ -194,7 +194,7 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
|
|||||||
\\pub export fn main() c_int {
|
\\pub export fn main() c_int {
|
||||||
\\ var array = [_]u32{ 1, 7, 3, 2, 0, 9, 4, 8, 6, 5 };
|
\\ var array = [_]u32{ 1, 7, 3, 2, 0, 9, 4, 8, 6, 5 };
|
||||||
\\
|
\\
|
||||||
\\ c.qsort(@ptrCast(?*c_void, &array), @intCast(c_ulong, array.len), @sizeOf(i32), compare_fn);
|
\\ c.qsort(@ptrCast(?*anyopaque, &array), @intCast(c_ulong, array.len), @sizeOf(i32), compare_fn);
|
||||||
\\
|
\\
|
||||||
\\ for (array) |item, i| {
|
\\ for (array) |item, i| {
|
||||||
\\ if (item != i) {
|
\\ if (item != i) {
|
||||||
|
|||||||
@ -3058,10 +3058,10 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
"tmp.zig:1:15: error: parameter of type 'anytype' not allowed in function with calling convention 'C'",
|
"tmp.zig:1:15: error: parameter of type 'anytype' not allowed in function with calling convention 'C'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("C pointer to c_void",
|
ctx.objErrStage1("C pointer to anyopaque",
|
||||||
\\export fn a() void {
|
\\export fn a() void {
|
||||||
\\ var x: *c_void = undefined;
|
\\ var x: *anyopaque = undefined;
|
||||||
\\ var y: [*c]c_void = x;
|
\\ var y: [*c]anyopaque = x;
|
||||||
\\ _ = y;
|
\\ _ = y;
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
@ -3305,7 +3305,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
|
|
||||||
ctx.objErrStage1("compile log a pointer to an opaque value",
|
ctx.objErrStage1("compile log a pointer to an opaque value",
|
||||||
\\export fn entry() void {
|
\\export fn entry() void {
|
||||||
\\ @compileLog(@ptrCast(*const c_void, &entry));
|
\\ @compileLog(@ptrCast(*const anyopaque, &entry));
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
"tmp.zig:2:5: error: found compile log statement",
|
"tmp.zig:2:5: error: found compile log statement",
|
||||||
@ -3465,16 +3465,16 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
"tmp.zig:2:11: error: use of undeclared identifier 'SymbolThatDoesNotExist'",
|
"tmp.zig:2:11: error: use of undeclared identifier 'SymbolThatDoesNotExist'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("don't implicit cast double pointer to *c_void",
|
ctx.objErrStage1("don't implicit cast double pointer to *anyopaque",
|
||||||
\\export fn entry() void {
|
\\export fn entry() void {
|
||||||
\\ var a: u32 = 1;
|
\\ var a: u32 = 1;
|
||||||
\\ var ptr: *align(@alignOf(u32)) c_void = &a;
|
\\ var ptr: *align(@alignOf(u32)) anyopaque = &a;
|
||||||
\\ var b: *u32 = @ptrCast(*u32, ptr);
|
\\ var b: *u32 = @ptrCast(*u32, ptr);
|
||||||
\\ var ptr2: *c_void = &b;
|
\\ var ptr2: *anyopaque = &b;
|
||||||
\\ _ = ptr2;
|
\\ _ = ptr2;
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
"tmp.zig:5:26: error: expected type '*c_void', found '**u32'",
|
"tmp.zig:5:29: error: expected type '*anyopaque', found '**u32'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("runtime index into comptime type slice",
|
ctx.objErrStage1("runtime index into comptime type slice",
|
||||||
@ -4045,9 +4045,9 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
"tmp.zig:8:9: error: integer value '256' cannot be stored in type 'u8'",
|
"tmp.zig:8:9: error: integer value '256' cannot be stored in type 'u8'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("use c_void as return type of fn ptr",
|
ctx.objErrStage1("use anyopaque as return type of fn ptr",
|
||||||
\\export fn entry() void {
|
\\export fn entry() void {
|
||||||
\\ const a: fn () c_void = undefined;
|
\\ const a: fn () anyopaque = undefined;
|
||||||
\\ _ = a;
|
\\ _ = a;
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
@ -7469,10 +7469,10 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
\\extern fn bar(d: *Derp) void;
|
\\extern fn bar(d: *Derp) void;
|
||||||
\\export fn foo() void {
|
\\export fn foo() void {
|
||||||
\\ var x = @as(u8, 1);
|
\\ var x = @as(u8, 1);
|
||||||
\\ bar(@ptrCast(*c_void, &x));
|
\\ bar(@ptrCast(*anyopaque, &x));
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
"tmp.zig:5:9: error: expected type '*Derp', found '*c_void'",
|
"tmp.zig:5:9: error: expected type '*Derp', found '*anyopaque'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("non-const variables of things that require const variables",
|
ctx.objErrStage1("non-const variables of things that require const variables",
|
||||||
@ -8765,10 +8765,10 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
|
|
||||||
ctx.objErrStage1("integer underflow error",
|
ctx.objErrStage1("integer underflow error",
|
||||||
\\export fn entry() void {
|
\\export fn entry() void {
|
||||||
\\ _ = @intToPtr(*c_void, ~@as(usize, @import("std").math.maxInt(usize)) - 1);
|
\\ _ = @intToPtr(*anyopaque, ~@as(usize, @import("std").math.maxInt(usize)) - 1);
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
":2:75: error: operation caused overflow",
|
":2:78: error: operation caused overflow",
|
||||||
});
|
});
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -8864,14 +8864,14 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||||||
"tmp.zig:8:12: error: negation of type 'u32'",
|
"tmp.zig:8:12: error: negation of type 'u32'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("Issue #5618: coercion of ?*c_void to *c_void must fail.",
|
ctx.objErrStage1("Issue #5618: coercion of ?*anyopaque to *anyopaque must fail.",
|
||||||
\\export fn foo() void {
|
\\export fn foo() void {
|
||||||
\\ var u: ?*c_void = null;
|
\\ var u: ?*anyopaque = null;
|
||||||
\\ var v: *c_void = undefined;
|
\\ var v: *anyopaque = undefined;
|
||||||
\\ v = u;
|
\\ v = u;
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
"tmp.zig:4:9: error: expected type '*c_void', found '?*c_void'",
|
"tmp.zig:4:9: error: expected type '*anyopaque', found '?*anyopaque'",
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.objErrStage1("Issue #6823: don't allow .* to be followed by **",
|
ctx.objErrStage1("Issue #6823: don't allow .* to be followed by **",
|
||||||
|
|||||||
@ -97,13 +97,13 @@ export fn zig_f64(x: f64) void {
|
|||||||
expect(x == 56.78) catch @panic("test failure");
|
expect(x == 56.78) catch @panic("test failure");
|
||||||
}
|
}
|
||||||
|
|
||||||
extern fn c_ptr(*c_void) void;
|
extern fn c_ptr(*anyopaque) void;
|
||||||
|
|
||||||
test "C ABI pointer" {
|
test "C ABI pointer" {
|
||||||
c_ptr(@intToPtr(*c_void, 0xdeadbeef));
|
c_ptr(@intToPtr(*anyopaque, 0xdeadbeef));
|
||||||
}
|
}
|
||||||
|
|
||||||
export fn zig_ptr(x: *c_void) void {
|
export fn zig_ptr(x: *anyopaque) void {
|
||||||
expect(@ptrToInt(x) == 0xdeadbeef) catch @panic("test failure");
|
expect(@ptrToInt(x) == 0xdeadbeef) catch @panic("test failure");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -99,7 +99,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\ .b = @import("std").mem.zeroes(struct_Bar),
|
\\ .b = @import("std").mem.zeroes(struct_Bar),
|
||||||
\\};
|
\\};
|
||||||
,
|
,
|
||||||
\\pub const PTR = ?*c_void;
|
\\pub const PTR = ?*anyopaque;
|
||||||
});
|
});
|
||||||
|
|
||||||
cases.add("scoped record",
|
cases.add("scoped record",
|
||||||
@ -199,8 +199,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\#define SYS_BASE_CACHED 0
|
\\#define SYS_BASE_CACHED 0
|
||||||
\\#define MEM_PHYSICAL_TO_K0(x) (void*)((uint32_t)(x) + SYS_BASE_CACHED)
|
\\#define MEM_PHYSICAL_TO_K0(x) (void*)((uint32_t)(x) + SYS_BASE_CACHED)
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub inline fn MEM_PHYSICAL_TO_K0(x: anytype) ?*c_void {
|
\\pub inline fn MEM_PHYSICAL_TO_K0(x: anytype) ?*anyopaque {
|
||||||
\\ return @import("std").zig.c_translation.cast(?*c_void, @import("std").zig.c_translation.cast(u32, x) + SYS_BASE_CACHED);
|
\\ return @import("std").zig.c_translation.cast(?*anyopaque, @import("std").zig.c_translation.cast(u32, x) + SYS_BASE_CACHED);
|
||||||
\\}
|
\\}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -511,9 +511,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\void ((f1)) (void *L);
|
\\void ((f1)) (void *L);
|
||||||
\\void (((f2))) (void *L);
|
\\void (((f2))) (void *L);
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub extern fn f0(L: ?*c_void) void;
|
\\pub extern fn f0(L: ?*anyopaque) void;
|
||||||
\\pub extern fn f1(L: ?*c_void) void;
|
\\pub extern fn f1(L: ?*anyopaque) void;
|
||||||
\\pub extern fn f2(L: ?*c_void) void;
|
\\pub extern fn f2(L: ?*anyopaque) void;
|
||||||
});
|
});
|
||||||
|
|
||||||
cases.add("array initializer w/ typedef",
|
cases.add("array initializer w/ typedef",
|
||||||
@ -812,7 +812,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\typedef void Foo;
|
\\typedef void Foo;
|
||||||
\\Foo fun(Foo *a);
|
\\Foo fun(Foo *a);
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub const Foo = c_void;
|
\\pub const Foo = anyopaque;
|
||||||
,
|
,
|
||||||
\\pub extern fn fun(a: ?*Foo) Foo;
|
\\pub extern fn fun(a: ?*Foo) Foo;
|
||||||
});
|
});
|
||||||
@ -837,7 +837,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub extern fn foo() void;
|
\\pub extern fn foo() void;
|
||||||
\\pub export fn bar() void {
|
\\pub export fn bar() void {
|
||||||
\\ var func_ptr: ?*c_void = @ptrCast(?*c_void, foo);
|
\\ var func_ptr: ?*anyopaque = @ptrCast(?*anyopaque, foo);
|
||||||
\\ var typed_func_ptr: ?fn () callconv(.C) void = @intToPtr(?fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr)));
|
\\ var typed_func_ptr: ?fn () callconv(.C) void = @intToPtr(?fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr)));
|
||||||
\\ _ = typed_func_ptr;
|
\\ _ = typed_func_ptr;
|
||||||
\\}
|
\\}
|
||||||
@ -1264,9 +1264,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\ return x;
|
\\ return x;
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub export fn foo() ?*c_void {
|
\\pub export fn foo() ?*anyopaque {
|
||||||
\\ var x: [*c]c_ushort = undefined;
|
\\ var x: [*c]c_ushort = undefined;
|
||||||
\\ return @ptrCast(?*c_void, x);
|
\\ return @ptrCast(?*anyopaque, x);
|
||||||
\\}
|
\\}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1410,7 +1410,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub export fn test_ptr_cast() void {
|
\\pub export fn test_ptr_cast() void {
|
||||||
\\ var p: ?*c_void = undefined;
|
\\ var p: ?*anyopaque = undefined;
|
||||||
\\ {
|
\\ {
|
||||||
\\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p));
|
\\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p));
|
||||||
\\ _ = to_char;
|
\\ _ = to_char;
|
||||||
@ -1448,7 +1448,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\pub export fn while_none_bool() c_int {
|
\\pub export fn while_none_bool() c_int {
|
||||||
\\ var a: c_int = undefined;
|
\\ var a: c_int = undefined;
|
||||||
\\ var b: f32 = undefined;
|
\\ var b: f32 = undefined;
|
||||||
\\ var c: ?*c_void = undefined;
|
\\ var c: ?*anyopaque = undefined;
|
||||||
\\ while (a != 0) return 0;
|
\\ while (a != 0) return 0;
|
||||||
\\ while (b != 0) return 1;
|
\\ while (b != 0) return 1;
|
||||||
\\ while (c != null) return 2;
|
\\ while (c != null) return 2;
|
||||||
@ -1470,7 +1470,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\pub export fn for_none_bool() c_int {
|
\\pub export fn for_none_bool() c_int {
|
||||||
\\ var a: c_int = undefined;
|
\\ var a: c_int = undefined;
|
||||||
\\ var b: f32 = undefined;
|
\\ var b: f32 = undefined;
|
||||||
\\ var c: ?*c_void = undefined;
|
\\ var c: ?*anyopaque = undefined;
|
||||||
\\ while (a != 0) return 0;
|
\\ while (a != 0) return 0;
|
||||||
\\ while (b != 0) return 1;
|
\\ while (b != 0) return 1;
|
||||||
\\ while (c != null) return 2;
|
\\ while (c != null) return 2;
|
||||||
@ -1551,7 +1551,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\pub export fn foo() c_int {
|
\\pub export fn foo() c_int {
|
||||||
\\ var a: c_int = undefined;
|
\\ var a: c_int = undefined;
|
||||||
\\ var b: f32 = undefined;
|
\\ var b: f32 = undefined;
|
||||||
\\ var c: ?*c_void = undefined;
|
\\ var c: ?*anyopaque = undefined;
|
||||||
\\ return @boolToInt(!(a == @as(c_int, 0)));
|
\\ return @boolToInt(!(a == @as(c_int, 0)));
|
||||||
\\ return @boolToInt(!(a != 0));
|
\\ return @boolToInt(!(a != 0));
|
||||||
\\ return @boolToInt(!(b != 0));
|
\\ return @boolToInt(!(b != 0));
|
||||||
@ -2200,7 +2200,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
cases.add("restrict -> noalias",
|
cases.add("restrict -> noalias",
|
||||||
\\void foo(void *restrict bar, void *restrict);
|
\\void foo(void *restrict bar, void *restrict);
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub extern fn foo(noalias bar: ?*c_void, noalias ?*c_void) void;
|
\\pub extern fn foo(noalias bar: ?*anyopaque, noalias ?*anyopaque) void;
|
||||||
});
|
});
|
||||||
|
|
||||||
cases.add("assign",
|
cases.add("assign",
|
||||||
@ -2362,7 +2362,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
++ " " ++ default_enum_type ++
|
++ " " ++ default_enum_type ++
|
||||||
\\;
|
\\;
|
||||||
\\pub const SomeTypedef = c_int;
|
\\pub const SomeTypedef = c_int;
|
||||||
\\pub export fn and_or_non_bool(arg_a: c_int, arg_b: f32, arg_c: ?*c_void) c_int {
|
\\pub export fn and_or_non_bool(arg_a: c_int, arg_b: f32, arg_c: ?*anyopaque) c_int {
|
||||||
\\ var a = arg_a;
|
\\ var a = arg_a;
|
||||||
\\ var b = arg_b;
|
\\ var b = arg_b;
|
||||||
\\ var c = arg_c;
|
\\ var c = arg_c;
|
||||||
@ -2686,7 +2686,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\pub const enum_SomeEnum =
|
\\pub const enum_SomeEnum =
|
||||||
++ " " ++ default_enum_type ++
|
++ " " ++ default_enum_type ++
|
||||||
\\;
|
\\;
|
||||||
\\pub export fn if_none_bool(arg_a: c_int, arg_b: f32, arg_c: ?*c_void, arg_d: enum_SomeEnum) c_int {
|
\\pub export fn if_none_bool(arg_a: c_int, arg_b: f32, arg_c: ?*anyopaque, arg_d: enum_SomeEnum) c_int {
|
||||||
\\ var a = arg_a;
|
\\ var a = arg_a;
|
||||||
\\ var b = arg_b;
|
\\ var b = arg_b;
|
||||||
\\ var c = arg_c;
|
\\ var c = arg_c;
|
||||||
@ -3089,7 +3089,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\pub extern fn fn_f64(x: f64) void;
|
\\pub extern fn fn_f64(x: f64) void;
|
||||||
\\pub extern fn fn_char(x: u8) void;
|
\\pub extern fn fn_char(x: u8) void;
|
||||||
\\pub extern fn fn_bool(x: bool) void;
|
\\pub extern fn fn_bool(x: bool) void;
|
||||||
\\pub extern fn fn_ptr(x: ?*c_void) void;
|
\\pub extern fn fn_ptr(x: ?*anyopaque) void;
|
||||||
\\pub export fn call() void {
|
\\pub export fn call() void {
|
||||||
\\ fn_int(@floatToInt(c_int, 3.0));
|
\\ fn_int(@floatToInt(c_int, 3.0));
|
||||||
\\ fn_int(@floatToInt(c_int, 3.0));
|
\\ fn_int(@floatToInt(c_int, 3.0));
|
||||||
@ -3105,7 +3105,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\ fn_bool(@as(c_int, 0) != 0);
|
\\ fn_bool(@as(c_int, 0) != 0);
|
||||||
\\ fn_bool(@ptrToInt(fn_int) != 0);
|
\\ fn_bool(@ptrToInt(fn_int) != 0);
|
||||||
\\ fn_int(@intCast(c_int, @ptrToInt(fn_int)));
|
\\ fn_int(@intCast(c_int, @ptrToInt(fn_int)));
|
||||||
\\ fn_ptr(@intToPtr(?*c_void, @as(c_int, 42)));
|
\\ fn_ptr(@intToPtr(?*anyopaque, @as(c_int, 42)));
|
||||||
\\}
|
\\}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -3161,12 +3161,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\#define BAZ (uint32_t)(2)
|
\\#define BAZ (uint32_t)(2)
|
||||||
\\#define a 2
|
\\#define a 2
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub inline fn FOO(bar: anytype) @TypeOf(baz(@import("std").zig.c_translation.cast(?*c_void, baz))) {
|
\\pub inline fn FOO(bar: anytype) @TypeOf(baz(@import("std").zig.c_translation.cast(?*anyopaque, baz))) {
|
||||||
\\ _ = bar;
|
\\ _ = bar;
|
||||||
\\ return baz(@import("std").zig.c_translation.cast(?*c_void, baz));
|
\\ return baz(@import("std").zig.c_translation.cast(?*anyopaque, baz));
|
||||||
\\}
|
\\}
|
||||||
,
|
,
|
||||||
\\pub const BAR = @import("std").zig.c_translation.cast(?*c_void, a);
|
\\pub const BAR = @import("std").zig.c_translation.cast(?*anyopaque, a);
|
||||||
,
|
,
|
||||||
\\pub const BAZ = @import("std").zig.c_translation.cast(u32, @as(c_int, 2));
|
\\pub const BAZ = @import("std").zig.c_translation.cast(u32, @as(c_int, 2));
|
||||||
});
|
});
|
||||||
@ -3404,7 +3404,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\#define NULL ((void*)0)
|
\\#define NULL ((void*)0)
|
||||||
\\#define FOO ((int)0x8000)
|
\\#define FOO ((int)0x8000)
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub const NULL = @import("std").zig.c_translation.cast(?*c_void, @as(c_int, 0));
|
\\pub const NULL = @import("std").zig.c_translation.cast(?*anyopaque, @as(c_int, 0));
|
||||||
,
|
,
|
||||||
\\pub const FOO = @import("std").zig.c_translation.cast(c_int, @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8000, .hexadecimal));
|
\\pub const FOO = @import("std").zig.c_translation.cast(c_int, @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8000, .hexadecimal));
|
||||||
});
|
});
|
||||||
@ -3623,8 +3623,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\typedef long long LONG_PTR;
|
\\typedef long long LONG_PTR;
|
||||||
\\#define INVALID_HANDLE_VALUE ((void *)(LONG_PTR)-1)
|
\\#define INVALID_HANDLE_VALUE ((void *)(LONG_PTR)-1)
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub const MAP_FAILED = @import("std").zig.c_translation.cast(?*c_void, -@as(c_int, 1));
|
\\pub const MAP_FAILED = @import("std").zig.c_translation.cast(?*anyopaque, -@as(c_int, 1));
|
||||||
\\pub const INVALID_HANDLE_VALUE = @import("std").zig.c_translation.cast(?*c_void, @import("std").zig.c_translation.cast(LONG_PTR, -@as(c_int, 1)));
|
\\pub const INVALID_HANDLE_VALUE = @import("std").zig.c_translation.cast(?*anyopaque, @import("std").zig.c_translation.cast(LONG_PTR, -@as(c_int, 1)));
|
||||||
});
|
});
|
||||||
|
|
||||||
cases.add("discard unused local variables and function parameters",
|
cases.add("discard unused local variables and function parameters",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user