/** * This is all the nasty ffi setup for the bun runtime */ import { dlopen, ptr, suffix } from 'bun:ffi'; import { IFFI } from '../common/runtime.ts'; const getLib = (name: string) => { return dlopen( name, { tcgetattr: { args: ['i32', 'pointer'], returns: 'i32', }, tcsetattr: { args: ['i32', 'i32', 'pointer'], returns: 'i32', }, cfmakeraw: { args: ['pointer'], returns: 'void', }, }, ); }; let cStdLib: any = { symbols: {} }; try { cStdLib = getLib(`libc.${suffix}`); } catch { try { cStdLib = getLib(`libc.${suffix}.6`); } catch { throw new Error('Could not find c standard library'); } } const { tcgetattr, tcsetattr, cfmakeraw } = cStdLib.symbols; const BunFFI: IFFI = { tcgetattr, tcsetattr, cfmakeraw, getPointer: ptr, }; export default BunFFI;