From 300c0acbd7ab3fae8596ff839c39d9a17c70c68d Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 27 Aug 2026 16:58:31 +0200 Subject: streams: per-invocation channel, pumping mode, filter pipeline wiring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit exec: LineChannel bounded ring (cap=16) with abort/eof/marker fields. Shell 'pumping mode' assembles canonical lines from its queue into the channel while the command runs; ^C marks the channel aborted. Shell-side grammar: USE/TIL pre-drain into the channel before spawn; TIL sugar drains paths until the marker line. Interactive TIL: pump_key checks each submitted line against the marker and closes the channel when it matches. Exports callbacks run in the command task but touch shell-owned state: this is safe by construction — the shell blocks in exec_external until the command completes. put_line feeds Pipeline::line directly; get_line pops from the channel (yield-poll when empty). load: drop NX from image mapping (single-privilege kernel, NX bit 63 reserved when EFER.NXE is set by OVMF); compute image span from section RVAs not file size. bins/count: gate binary — reads lines via get_line, reports count via put_line. Verified: count USE file → 6; count TIL END → 2; interactive count TIL DONE → 3; -h filter across task boundary; ^C abort. v1 stream exports: put_line → Pipeline, get_line ← channel, log_line → klog append, exit → abort_current. Accounting: print_one_line → pipe.line() returns false (head kill / pager ^C) → the binary should wrap up promptly; accepted: binary does not check the return value in v1 (phase 3 simplification). --- bins/hello/src/main.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'bins/hello') diff --git a/bins/hello/src/main.rs b/bins/hello/src/main.rs index d1d58df..2904351 100644 --- a/bins/hello/src/main.rs +++ b/bins/hello/src/main.rs @@ -19,15 +19,15 @@ fn panic(_info: &core::panic::PanicInfo) -> ! { /// (exports table, argc, argv). The conventional UEFI name is kept so /// the PE looks normal; the signature is the rs-dos ABI. #[unsafe(no_mangle)] -pub extern "C" fn efi_main(exports: &'static Exports, _argc: usize, _argv: *const rsapi::Arg) -> i32 { +pub extern "C" fn efi_main( + exports: &'static Exports, + _argc: usize, + _argv: *const rsapi::Arg, +) -> i32 { let msg = b"hello, world - from an external binary"; let line = rsapi::Line { ptr: msg.as_ptr(), len: msg.len(), }; - if (exports.put_line)(line) { - 0 - } else { - 1 - } + if (exports.put_line)(line) { 0 } else { 1 } } -- cgit v1.2.3