From ef2d8e354a91ef30e34e2ddb61381131a989591c Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 1 Nov 2026 15:52:39 +0100 Subject: bins: read user args from argv[1..]; fix date year digit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit exec::spawn passes C-style argv with argv[0] = the command name, but ls, cat, mkdir, touch and rm treated argv[0] as their first user argument. Every path they were given resolved to the literal command name ("ls", "mkdir", ...), so they failed silently: `mkdir .../sub` never created the directory, `cat` printed nothing. date formatted its last year digit as `y as u8 % 10`, which truncates before the modulo (2026 -> 234 -> '4'), printing "2024". Only visible now that the system image actually stages /bin — before, /bin was empty and every command fell back to a built-in. --- bins/touch/src/main.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'bins/touch/src') diff --git a/bins/touch/src/main.rs b/bins/touch/src/main.rs index 5cd61e3..59aa7fa 100644 --- a/bins/touch/src/main.rs +++ b/bins/touch/src/main.rs @@ -10,7 +10,8 @@ fn panic(_info: &core::panic::PanicInfo) -> ! { #[unsafe(no_mangle)] pub extern "C" fn efi_main(exports: &'static rsapi::Exports, argc: usize, argv: *const rsapi::Arg) -> i32 { - let args = unsafe { core::slice::from_raw_parts(argv, argc) }; + // C-style argv: argv[0] is the program name, user args start at 1. + let args = unsafe { core::slice::from_raw_parts(argv.add(1), argc.saturating_sub(1)) }; if args.is_empty() { return 1; } let path = unsafe { core::str::from_utf8_unchecked(core::slice::from_raw_parts(args[0].ptr, args[0].len)) }; (exports.fs_create)(rsapi::Line { ptr: path.as_ptr(), len: path.len() }, false) -- cgit v1.2.3