grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026-- This sets up the table of C functions local require, error, assert, tonumber, tostring, setmetatable, pairs, ipairs, unpack, rawget, rawset, pcall, type, table, string = require, error, assert, tonumber, tostring, setmetatable, pairs, ipairs, unpack, rawget, rawset, pcall, type, table, string local abi = require "syscall.abi" local ffi = require "ffi" require "syscall.freebsd.ffi" local voidp = ffi.typeof("void *") local function void(x) return ffi.cast(voidp, x) end -- basically all types passed to syscalls are int or long, so we do not need to use nicely named types, so we can avoid importing t. local int, long = ffi.typeof("int"), ffi.typeof("long") local uint, ulong = ffi.typeof("unsigned int"), ffi.typeof("unsigned long") local function inlibc_fn(k) return ffi.C[k] end local C = setmetatable({}, { __index = function(C, k) if pcall(inlibc_fn, k) then C[k] = ffi.C[k] -- add to table, so no need for this slow path again return C[k] else return nil end end }) -- quite a few FreeBSD functions are weak aliases to __sys_ prefixed versions, some seem to resolve but others do not, odd. C.futimes = C.__sys_futimes C.lutimes = C.__sys_lutimes C.utimes = C.__sys_utimes C.wait4 = C.__sys_wait4 C.sigaction = C.__sys_sigaction return C