// Deno-specific ffi code import { IFFI } from '../common/runtime.ts'; let suffix = ''; switch (Deno.build.os) { case 'windows': suffix = 'dll'; break; case 'darwin': suffix = 'dylib'; break; default: suffix = 'so.6'; break; } const cSharedLib = `libc.${suffix}`; const cStdLib = Deno.dlopen( cSharedLib, { tcgetattr: { parameters: ['i32', 'pointer'], result: 'i32', }, tcsetattr: { parameters: ['i32', 'i32', 'pointer'], result: 'i32', }, cfmakeraw: { parameters: ['pointer'], result: 'void', }, } as const, ); const { tcgetattr, tcsetattr, cfmakeraw } = cStdLib.symbols; let closed = false; const DenoFFI: IFFI = { tcgetattr, tcsetattr, cfmakeraw, getPointer: Deno.UnsafePointer.of, close: () => { if (!closed) { cStdLib.close(); closed = true; } // Do nothing if FFI library was already closed }, }; export default DenoFFI;