From ec95675837727e6468735cab0e57b8b5bb0f9629 Mon Sep 17 00:00:00 2001 From: Marc Date: Sat, 27 Nov 2021 17:26:49 +0100 Subject: [PATCH] Fix env + refacto/opti shutdown + gitignore comp --- clibs/chibrax/syscall.cc | 31 +++------- rootfs overrides/chibrax/.gitignore | 1 + rootfs overrides/chibrax/index.js | 10 ++-- rootfs overrides/chibrax/reboot.js | 56 ++++++++++++++++++ rootfs overrides/chibrax/shutdown.js | 2 - rootfs overrides/chibrax/syscall.node | Bin 17472 -> 0 bytes .../usr/lib/sheebr/environment.js | 2 +- 7 files changed, 72 insertions(+), 30 deletions(-) create mode 100644 rootfs overrides/chibrax/.gitignore create mode 100644 rootfs overrides/chibrax/reboot.js delete mode 100644 rootfs overrides/chibrax/shutdown.js delete mode 100755 rootfs overrides/chibrax/syscall.node 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 f1d198b1976f632a41e1a02df87b5cfa8231691a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17472 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