diff options
Diffstat (limited to '')
| -rw-r--r-- | rsdos/Cargo.toml | 3 | ||||
| -rw-r--r-- | rsdos/src/main.rs | 26 | ||||
| -rw-r--r-- | rsdosedit/Cargo.toml | 3 | ||||
| -rw-r--r-- | rsdosedit/src/lib.rs | 7 |
4 files changed, 19 insertions, 20 deletions
diff --git a/rsdos/Cargo.toml b/rsdos/Cargo.toml index 5bf83fe..d09bd70 100644 --- a/rsdos/Cargo.toml +++ b/rsdos/Cargo.toml | |||
| @@ -3,6 +3,9 @@ name = "rsdos" | |||
| 3 | version.workspace = true | 3 | version.workspace = true |
| 4 | edition.workspace = true | 4 | edition.workspace = true |
| 5 | 5 | ||
| 6 | [lints] | ||
| 7 | workspace = true | ||
| 8 | |||
| 6 | [dependencies] | 9 | [dependencies] |
| 7 | rsnix = { path = "../rsnix" } | 10 | rsnix = { path = "../rsnix" } |
| 8 | shell = { path = "../shell" } | 11 | shell = { path = "../shell" } |
diff --git a/rsdos/src/main.rs b/rsdos/src/main.rs index e6b7d2a..2ba5d32 100644 --- a/rsdos/src/main.rs +++ b/rsdos/src/main.rs | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | #![no_std] | 1 | #![no_std] |
| 2 | #![no_main] | 2 | #![no_main] |
| 3 | #![allow(static_mut_refs, unsafe_code)] | 3 | #![allow(unsafe_code)] |
| 4 | 4 | ||
| 5 | use core::panic::PanicInfo; | 5 | use core::panic::PanicInfo; |
| 6 | use rsnix::uefi::*; | 6 | use rsnix::uefi::*; |
| @@ -31,8 +31,15 @@ fn panic(info: &PanicInfo) -> ! { | |||
| 31 | // --------------------------------------------------------------------------- | 31 | // --------------------------------------------------------------------------- |
| 32 | // EFI entry point | 32 | // EFI entry point |
| 33 | // --------------------------------------------------------------------------- | 33 | // --------------------------------------------------------------------------- |
| 34 | /// EFI entry point. | ||
| 35 | /// | ||
| 36 | /// # Safety | ||
| 37 | /// | ||
| 38 | /// The firmware hands us raw pointers (image handle, system table) that | ||
| 39 | /// must remain valid for the lifetime of the call — a contract guaranteed | ||
| 40 | /// by the UEFI loader. | ||
| 34 | #[no_mangle] | 41 | #[no_mangle] |
| 35 | pub extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut SystemTable) -> ! { | 42 | pub unsafe extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut SystemTable) -> ! { |
| 36 | let st = unsafe { &mut *system_table }; | 43 | let st = unsafe { &mut *system_table }; |
| 37 | let bs = unsafe { &mut *st.boot_services }; | 44 | let bs = unsafe { &mut *st.boot_services }; |
| 38 | let con_out = unsafe { &mut *st.con_out }; | 45 | let con_out = unsafe { &mut *st.con_out }; |
| @@ -83,22 +90,13 @@ pub extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut SystemT | |||
| 83 | rsnix::serial_println!("gop: not found (0x{:x})", gop_result); | 90 | rsnix::serial_println!("gop: not found (0x{:x})", gop_result); |
| 84 | } | 91 | } |
| 85 | rsnix::vt::init(); | 92 | rsnix::vt::init(); |
| 86 | rsnix::serial_println!( | 93 | let (rows, cols) = rsnix::vt::size(); |
| 87 | "vt: terminal ready ({}x{})", | 94 | rsnix::serial_println!("vt: terminal ready ({}x{})", rows, cols); |
| 88 | { | ||
| 89 | let (rows, cols) = rsnix::vt::size(); | ||
| 90 | rows | ||
| 91 | }, | ||
| 92 | { | ||
| 93 | let (rows, cols) = rsnix::vt::size(); | ||
| 94 | cols | ||
| 95 | } | ||
| 96 | ); | ||
| 97 | 95 | ||
| 98 | // ExitBootServices — we now own the machine | 96 | // ExitBootServices — we now own the machine |
| 99 | if unsafe { (bs.exit_boot_services)(image_handle, map_key) } != EFI_SUCCESS { | 97 | if unsafe { (bs.exit_boot_services)(image_handle, map_key) } != EFI_SUCCESS { |
| 100 | rsnix::serial_println!("WARN: ExitBootServices failed, retrying..."); | 98 | rsnix::serial_println!("WARN: ExitBootServices failed, retrying..."); |
| 101 | match rsnix::memory::refresh_and_exit(bs, image_handle) { | 99 | match unsafe { rsnix::memory::refresh_and_exit(bs, image_handle) } { |
| 102 | Ok(_) => {} | 100 | Ok(_) => {} |
| 103 | Err(e) => { | 101 | Err(e) => { |
| 104 | rsnix::serial_println!("FATAL: cannot ExitBootServices (0x{:x})", e); | 102 | rsnix::serial_println!("FATAL: cannot ExitBootServices (0x{:x})", e); |
diff --git a/rsdosedit/Cargo.toml b/rsdosedit/Cargo.toml index a15375c..b271eef 100644 --- a/rsdosedit/Cargo.toml +++ b/rsdosedit/Cargo.toml | |||
| @@ -3,5 +3,8 @@ name = "rsdosedit" | |||
| 3 | version = "0.1.0" | 3 | version = "0.1.0" |
| 4 | edition = "2021" | 4 | edition = "2021" |
| 5 | 5 | ||
| 6 | [lints] | ||
| 7 | workspace = true | ||
| 8 | |||
| 6 | [dependencies] | 9 | [dependencies] |
| 7 | rsnix = { path = "../rsnix" } | 10 | rsnix = { path = "../rsnix" } |
diff --git a/rsdosedit/src/lib.rs b/rsdosedit/src/lib.rs index 2d04da2..cfb3b0e 100644 --- a/rsdosedit/src/lib.rs +++ b/rsdosedit/src/lib.rs | |||
| @@ -321,12 +321,7 @@ impl Editor { | |||
| 321 | fn run(&mut self) { | 321 | fn run(&mut self) { |
| 322 | self.draw_full(); | 322 | self.draw_full(); |
| 323 | 323 | ||
| 324 | loop { | 324 | while let Some(b) = self.read_byte() { |
| 325 | let b = match self.read_byte() { | ||
| 326 | Some(b) => b, | ||
| 327 | None => break, | ||
| 328 | }; | ||
| 329 | |||
| 330 | self.key_count += 1; | 325 | self.key_count += 1; |
| 331 | self.status_msg.clear(); | 326 | self.status_msg.clear(); |
| 332 | 327 | ||
