scroll/src/bun/ffi.ts

48 lines
822 B
JavaScript
Raw Normal View History

2023-11-01 14:00:40 -04:00
/**
* This is all the nasty ffi setup for the bun runtime
*/
2023-11-01 15:27:31 -04:00
import { dlopen, ptr, suffix } from 'bun:ffi';
import { IFFI } from '../common/types.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',
},
},
);
2023-11-01 15:27:31 -04:00
};
let cStdLib: any = { symbols: {} };
try {
cStdLib = getLib(`libc.${suffix}`);
} catch {
2023-11-01 14:00:40 -04:00
try {
cStdLib = getLib(`libc.${suffix}.6`);
2023-11-01 15:27:31 -04:00
} catch {
2023-11-01 14:00:40 -04:00
throw new Error('Could not find c standard library');
}
}
2023-11-01 14:00:40 -04:00
const { tcgetattr, tcsetattr, cfmakeraw } = cStdLib.symbols;
const BunFFI: IFFI = {
tcgetattr,
tcsetattr,
cfmakeraw,
getPointer: ptr,
};
export default BunFFI;