diff --git a/pcid/src/main.rs b/pcid/src/main.rs index b3017391c3bfdd563814c479e95488dc33b5429e..2cd365928d662d8f312fe295475d8e0857349122 100644 --- a/pcid/src/main.rs +++ b/pcid/src/main.rs @@ -41,11 +41,13 @@ fn main() { if let Some(header) = func.header() { let pci_class = PciClass::from(header.class); - let mut string = format!("PCI {:>02X}/{:>02X}/{:>02X} {:>04X}:{:>04X} {:>02X}.{:>02X}.{:>02X}.{:>02X} {:?}", - bus.num, dev.num, func.num, - header.vendor_id, header.device_id, - header.class, header.subclass, header.interface, header.revision, - pci_class); + let mut string = unsafe { + format!("PCI {:>02X}/{:>02X}/{:>02X} {:>04X}:{:>04X} {:>02X}.{:>02X}.{:>02X}.{:>02X} {:?}", + bus.num, dev.num, func.num, + header.vendor_id, header.device_id, + header.class, header.subclass, header.interface, header.revision, + pci_class) + }; match pci_class { PciClass::Storage => match header.subclass { @@ -78,14 +80,16 @@ fn main() { _ => () } - for i in 0..header.bars.len() { - match PciBar::from(header.bars[i]) { - PciBar::None => (), - PciBar::Memory(address) => string.push_str(&format!(" {}={:>08X}", i, address)), - PciBar::Port(address) => string.push_str(&format!(" {}={:>04X}", i, address)) + unsafe { + for i in 0..header.bars.len() { + match PciBar::from(header.bars[i]) { + PciBar::None => (), + PciBar::Memory(address) => string.push_str(&format!(" {}={:>08X}", i, address)), + PciBar::Port(address) => string.push_str(&format!(" {}={:>04X}", i, address)) + } } } - + string.push('\n'); print!("{}", string); @@ -124,27 +128,31 @@ fn main() { let mut command = Command::new(program); for arg in args { let bar_arg = |i| -> String { - match PciBar::from(header.bars[i]) { - PciBar::None => String::new(), - PciBar::Memory(address) => format!("{:>08X}", address), - PciBar::Port(address) => format!("{:>04X}", address) + unsafe { + match PciBar::from(header.bars[i]) { + PciBar::None => String::new(), + PciBar::Memory(address) => format!("{:>08X}", address), + PciBar::Port(address) => format!("{:>04X}", address) + } } }; - let arg = match arg.as_str() { - "$BUS" => format!("{:>02X}", bus.num), - "$DEV" => format!("{:>02X}", dev.num), - "$FUNC" => format!("{:>02X}", func.num), - "$NAME" => format!("pci-{:>02X}.{:>02X}.{:>02X}", bus.num, dev.num, func.num), - "$BAR0" => bar_arg(0), - "$BAR1" => bar_arg(1), - "$BAR2" => bar_arg(2), - "$BAR3" => bar_arg(3), - "$BAR4" => bar_arg(4), - "$BAR5" => bar_arg(5), - "$IRQ" => format!("{}", header.interrupt_line), - "$VENID" => format!("{:>04X}",header.vendor_id), - "$DEVID" => format!("{:>04X}",header.device_id), - _ => arg.clone() + let arg = unsafe { + match arg.as_str() { + "$BUS" => format!("{:>02X}", bus.num), + "$DEV" => format!("{:>02X}", dev.num), + "$FUNC" => format!("{:>02X}", func.num), + "$NAME" => format!("pci-{:>02X}.{:>02X}.{:>02X}", bus.num, dev.num, func.num), + "$BAR0" => bar_arg(0), + "$BAR1" => bar_arg(1), + "$BAR2" => bar_arg(2), + "$BAR3" => bar_arg(3), + "$BAR4" => bar_arg(4), + "$BAR5" => bar_arg(5), + "$IRQ" => format!("{}", header.interrupt_line), + "$VENID" => format!("{:>04X}",header.vendor_id), + "$DEVID" => format!("{:>04X}",header.device_id), + _ => arg.clone() + } }; command.arg(&arg); } diff --git a/pcid/src/pci/header.rs b/pcid/src/pci/header.rs index 2cc335e388c4e1017820cdca369142d0a82be512..332542a5690e7e7cfea8f8a53c34103502e214a6 100644 --- a/pcid/src/pci/header.rs +++ b/pcid/src/pci/header.rs @@ -1,7 +1,7 @@ use std::ops::{Deref, DerefMut}; use std::{slice, mem}; -#[derive(Debug, Default)] +#[derive(Default)] #[repr(packed)] pub struct PciHeader { pub vendor_id: u16,