Skip to content

Commit 62d7165

Browse files
authored
Merge pull request #68 from ntegan/64-num-enum-pr
Use num_enum crate for try_from(..)
2 parents 56b1533 + 220e1f6 commit 62d7165

File tree

13 files changed

+91
-103
lines changed

13 files changed

+91
-103
lines changed

Cargo.lock

Lines changed: 49 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mythril_core/Cargo.lock

Lines changed: 0 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mythril_core/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ std = []
1313
[dependencies]
1414
arrayvec = { version = "0.5.1", default-features = false }
1515
byteorder = { version = "1", default-features = false }
16-
derive-try-from-primitive = "0.1.0"
16+
num_enum = { version = "0.5.0", default-features = false }
1717
x86 = "0.27.0"
1818
log = { version = "0.4.8", default-features = false }
1919
bitflags = "1.2.0"
@@ -27,4 +27,4 @@ default-features = false
2727
features = ["no_std", "decoder"]
2828

2929
[build-dependencies]
30-
nasm-rs = "0.1.7"
30+
nasm-rs = "0.1.7"

mythril_core/src/acpi/hpet.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
use super::rsdt::SDT;
22
use super::GenericAddressStructure;
3-
use crate::error::{Error, Result};
3+
use crate::error::Result;
44
use byteorder::{ByteOrder, NativeEndian};
5+
use core::convert::TryFrom;
56
use core::fmt;
67
use core::ops::Range;
7-
use derive_try_from_primitive::TryFromPrimitive;
8+
use num_enum::TryFromPrimitive;
89

910
mod offsets {
1011
use super::*;
@@ -68,14 +69,9 @@ impl<'a> HPET<'a> {
6869
let minimum_tick =
6970
NativeEndian::read_u16(&sdt.table[offsets::MIN_CLOCK_TICK]);
7071

71-
let page_protection =
72-
PageProtection::try_from(sdt.table[offsets::PAGE_PROTECTION] & 0xF)
73-
.ok_or_else(|| {
74-
Error::InvalidValue(format!(
75-
"Invalid HPET Page Protection type: {}",
76-
sdt.table[offsets::PAGE_PROTECTION] & 0xF
77-
))
78-
})?;
72+
let page_protection = PageProtection::try_from(
73+
sdt.table[offsets::PAGE_PROTECTION] & 0xF,
74+
)?;
7975

8076
let hardware_rev_id = (event_timer_block_id & 0xFF) as u8;
8177
let comparator_count = ((event_timer_block_id >> 8) & 0x1F) as u8;

mythril_core/src/acpi/madt.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ use super::rsdt::SDT;
22
use crate::error::{Error, Result};
33
use bitflags::bitflags;
44
use byteorder::{ByteOrder, NativeEndian};
5+
use core::convert::TryFrom;
56
use core::fmt;
67
use core::ops::Range;
7-
use derive_try_from_primitive::TryFromPrimitive;
8+
use num_enum::TryFromPrimitive;
89

910
/// See Table 5-43 in the ACPI spcification.
1011
///
@@ -334,8 +335,8 @@ impl<'a> Iterator for IcsIterator<'a> {
334335
}
335336

336337
let ty = match IcsType::try_from(self.bytes[0]) {
337-
Some(ty) => ty,
338-
None => {
338+
Ok(ty) => ty,
339+
_ => {
339340
return Some(Err(Error::InvalidValue(format!(
340341
"Invalid ICS type: {}",
341342
self.bytes[0]

mythril_core/src/acpi/mod.rs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
1111
use crate::error::{Error, Result};
1212
use byteorder::{ByteOrder, NativeEndian};
13-
use derive_try_from_primitive::TryFromPrimitive;
13+
use core::convert::TryFrom;
14+
use num_enum::TryFromPrimitive;
1415
use raw_cpuid::CpuId;
1516

1617
/// Support for the High Precision Event Timer (HPET)
@@ -132,24 +133,13 @@ impl GenericAddressStructure {
132133
}
133134

134135
let address_space =
135-
AddressSpaceID::try_from(bytes[offsets::GAS_ADDRESS_SPACE])
136-
.ok_or_else(|| {
137-
Error::InvalidValue(format!(
138-
"Invalid Address Space ID: {}",
139-
bytes[offsets::GAS_ADDRESS_SPACE]
140-
))
141-
})?;
136+
AddressSpaceID::try_from(bytes[offsets::GAS_ADDRESS_SPACE])?;
142137

143138
let bit_width = bytes[offsets::GAS_BIT_WIDTH];
144139
let bit_offset = bytes[offsets::GAS_BIT_OFFSET];
145140

146-
let access_size = AccessSize::try_from(bytes[offsets::GAS_ACCESS_SIZE])
147-
.ok_or_else(|| {
148-
Error::InvalidValue(format!(
149-
"Invalid Access Size: {}",
150-
bytes[offsets::GAS_ACCESS_SIZE]
151-
))
152-
})?;
141+
let access_size =
142+
AccessSize::try_from(bytes[offsets::GAS_ACCESS_SIZE])?;
153143

154144
let address = NativeEndian::read_u64(&bytes[offsets::GAS_ADDRESS]);
155145

mythril_core/src/device/pci.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use alloc::boxed::Box;
77
use alloc::collections::btree_map::BTreeMap;
88
use alloc::vec::Vec;
99
use core::convert::TryInto;
10-
use derive_try_from_primitive::TryFromPrimitive;
10+
use num_enum::TryFromPrimitive;
1111
use ux;
1212

1313
#[derive(Clone, Copy, Debug, TryFromPrimitive)]

mythril_core/src/device/pit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::memory::GuestAddressSpaceViewMut;
66
use alloc::boxed::Box;
77
use alloc::vec::Vec;
88
use core::convert::TryFrom;
9-
use derive_try_from_primitive::TryFromPrimitive;
9+
use num_enum::TryFromPrimitive;
1010

1111
#[derive(Clone, Copy, Debug, TryFromPrimitive)]
1212
#[repr(u8)]

mythril_core/src/device/rtc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use crate::error::Result;
55
use crate::memory::GuestAddressSpaceViewMut;
66
use alloc::boxed::Box;
77
use alloc::vec::Vec;
8-
use core::convert::TryInto;
9-
use derive_try_from_primitive::TryFromPrimitive;
8+
use core::convert::{TryFrom, TryInto};
9+
use num_enum::TryFromPrimitive;
1010

1111
#[derive(Copy, Clone, Debug, TryFromPrimitive)]
1212
#[repr(u8)]

mythril_core/src/device/vga.rs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use crate::error::{Error, Result};
55
use crate::memory::GuestAddressSpaceViewMut;
66
use alloc::boxed::Box;
77
use alloc::vec::Vec;
8-
use core::convert::TryInto;
9-
use derive_try_from_primitive::TryFromPrimitive;
8+
use core::convert::{TryFrom, TryInto};
9+
use num_enum::TryFromPrimitive;
1010

1111
#[derive(Clone, Copy, Debug, TryFromPrimitive)]
1212
#[repr(u8)]
@@ -104,13 +104,7 @@ impl EmulatedDevice for VgaController {
104104
match port {
105105
Self::VGA_INDEX => match val {
106106
PortWriteRequest::OneByte(b) => {
107-
self.index =
108-
VgaRegister::try_from(b[0]).ok_or_else(|| {
109-
Error::InvalidValue(format!(
110-
"Invalid vga register 0x{:x}",
111-
b[0]
112-
))
113-
})?
107+
self.index = VgaRegister::try_from(b[0])?;
114108
}
115109

116110
// The VGA controller allows a register update and data write
@@ -119,13 +113,7 @@ impl EmulatedDevice for VgaController {
119113
PortWriteRequest::TwoBytes(bytes) => {
120114
let index = bytes[1];
121115
let data = bytes[0];
122-
self.index =
123-
VgaRegister::try_from(index).ok_or_else(|| {
124-
Error::InvalidValue(format!(
125-
"Invalid vga register 0x{:x}",
126-
index
127-
))
128-
})?;
116+
self.index = VgaRegister::try_from(index)?;
129117
self.registers[self.index as usize] = data;
130118
}
131119
_ => {

0 commit comments

Comments
 (0)