diff --git a/clibs/chibrax/syscall.cc b/clibs/chibrax/syscall.cc index 4d0794d..caf2b3b 100644 --- a/clibs/chibrax/syscall.cc +++ b/clibs/chibrax/syscall.cc @@ -3,18 +3,6 @@ #include #include - -#ifdef RB_HALT_SYSTEM -# define BMAGIC_HALT RB_HALT_SYSTEM -#else -# define BMAGIC_HALT RB_HALT -#endif - -#define BMAGIC_REBOOT RB_AUTOBOOT - -#define BMAGIC_POWEROFF RB_POWER_OFF - - namespace syscallNode { void nodeSyscall(const v8::FunctionCallbackInfo& args) { v8::Isolate* isolate = args.GetIsolate(); @@ -29,23 +17,22 @@ namespace syscallNode { syscall(argsValue); } - void nodeHalt(const v8::FunctionCallbackInfo& args) { - reboot(BMAGIC_HALT); - } - void nodeReboot(const v8::FunctionCallbackInfo& args) { - reboot(BMAGIC_REBOOT); + v8::Isolate* isolate = args.GetIsolate(); + if (!args[0]->IsNumber()) { + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, "Argument must be a number").ToLocalChecked())); + return; + } + + long argsValue = args[0].As()->Value(); + reboot(argsValue); } - void nodePoweroff(const v8::FunctionCallbackInfo& args) { - reboot(BMAGIC_POWEROFF); - } void Initialize(v8::Local exports) { - NODE_SET_METHOD(exports, "halt", nodeHalt); NODE_SET_METHOD(exports, "reboot", nodeReboot); NODE_SET_METHOD(exports, "syscall", nodeSyscall); - NODE_SET_METHOD(exports, "poweroff", nodePoweroff); } NODE_MODULE(syscall_api, Initialize) diff --git a/rootfs overrides/chibrax/.gitignore b/rootfs overrides/chibrax/.gitignore new file mode 100644 index 0000000..8114c0e --- /dev/null +++ b/rootfs overrides/chibrax/.gitignore @@ -0,0 +1 @@ +syscall.node \ No newline at end of file diff --git a/rootfs overrides/chibrax/index.js b/rootfs overrides/chibrax/index.js index 287cb9e..1e9c935 100644 --- a/rootfs overrides/chibrax/index.js +++ b/rootfs overrides/chibrax/index.js @@ -7,8 +7,7 @@ function panic() { async function main() { try { const audio = require('./audio.js') - //@ts-expect-error - const { poweroff, halt } = require('./shutdown.js') + const reboot = require('./reboot.js') const input = require('./input.js') const { fHook } = require("./hook.js") @@ -40,11 +39,12 @@ async function main() { //chainload into sheebr await fHook("/usr/bin/sheebr.js") - poweroff() + reboot.disableCtrlAltSupr() + reboot.powerOff() - /*while(1){} console.log("End of init reached") - panic()*/ + reboot.enableCtrlAltSupr() + panic() } catch(e) { console.log(e) panic() diff --git a/rootfs overrides/chibrax/reboot.js b/rootfs overrides/chibrax/reboot.js new file mode 100644 index 0000000..39fed1c --- /dev/null +++ b/rootfs overrides/chibrax/reboot.js @@ -0,0 +1,56 @@ +//@ts-check +/* Perform a hard reset now. */ +const RB_AUTOBOOT = 0x01234567 + +/* Halt the system. */ +const RB_HALT_SYSTEM = 0xcdef0123 + +/* Enable reboot using Ctrl-Alt-Delete keystroke. */ +const RB_ENABLE_CAD = 0x89abcdef + +/* Disable reboot using Ctrl-Alt-Delete keystroke. */ +const RB_DISABLE_CAD = 0 + +/* Stop system and switch power off if possible. */ +const RB_POWER_OFF = 0x4321fedc + +/* Suspend system using software suspend. */ +const RB_SW_SUSPEND = 0xd000fce2 + +/* Reboot system into new kernel. */ //no idea how to use that but hey +const RB_KEXEC = 0x45584543 + +/** + @type {{ + reboot: (rebootid: number) => void //https://unix.superglobalmegacorp.com/Net2/newsrc/sys/syscall.h.html + syscall: (syscallid: number) => void + }} +*///@ts-expect-error +const syscalls = require('./syscall.node') + +function disableCtrlAltSupr() { + syscalls.reboot(RB_DISABLE_CAD) +} + +function enableCtrlAltSupr() { + syscalls.reboot(RB_ENABLE_CAD) +} + +function halt() { + syscalls.reboot(RB_HALT_SYSTEM) +} + +function reboot() { + syscalls.reboot(RB_AUTOBOOT) +} + +function powerOff() { + syscalls.reboot(RB_POWER_OFF) +} + +function suspend() { + syscalls.reboot(RB_SW_SUSPEND) +} + + +module.exports = { disableCtrlAltSupr, enableCtrlAltSupr, halt, reboot, powerOff, suspend } \ No newline at end of file diff --git a/rootfs overrides/chibrax/shutdown.js b/rootfs overrides/chibrax/shutdown.js deleted file mode 100644 index bcb676a..0000000 --- a/rootfs overrides/chibrax/shutdown.js +++ /dev/null @@ -1,2 +0,0 @@ -syscalls = require('./syscall.node') -module.exports = syscalls \ No newline at end of file diff --git a/rootfs overrides/chibrax/syscall.node b/rootfs overrides/chibrax/syscall.node deleted file mode 100755 index f1d198b..0000000 Binary files a/rootfs overrides/chibrax/syscall.node and /dev/null differ diff --git a/rootfs overrides/usr/lib/sheebr/environment.js b/rootfs overrides/usr/lib/sheebr/environment.js index 2f5ebbf..a44043e 100644 --- a/rootfs overrides/usr/lib/sheebr/environment.js +++ b/rootfs overrides/usr/lib/sheebr/environment.js @@ -1,5 +1,5 @@ let environment = { - path: ["/sheebr", "/usr/bin"] + path: ["/usr/lib/sheebr", "/usr/bin"] } module.exports = environment \ No newline at end of file