Skip to content

Commit ad0f740

Browse files
veluca93Virv12
authored andcommitted
More general error types.
1 parent 158cd35 commit ad0f740

9 files changed

Lines changed: 41 additions & 70 deletions

File tree

pixie-uefi/Cargo.lock

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

pixie-uefi/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ coverage = ["dep:minicov"]
1616
anstyle = { version = "1.0.13", default-features = false }
1717
blake3 = { version = "1.8.2", default-features = false, features = ["prefer_intrinsics", "no_avx512", "pure"] }
1818
core_detect = "1.0.0"
19-
derive_more = { version = "2.0.1", features = ["from"], default-features = false }
2019
futures = { version = "0.3.29", default-features = false, features = ["alloc", "async-await"] }
2120
gpt_disk_io = "0.16.2"
2221
log = "0.4.28"

pixie-uefi/src/flash.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::{
55
},
66
MIN_MEMORY,
77
};
8-
use alloc::{boxed::Box, collections::BTreeMap, rc::Rc, string::ToString, vec::Vec};
8+
use alloc::{boxed::Box, collections::BTreeMap, rc::Rc, vec::Vec};
99
use core::{cell::RefCell, mem, net::SocketAddrV4};
1010
use futures::future::{select, Either};
1111
use log::info;
@@ -64,7 +64,7 @@ fn handle_packet(
6464
received.remove(&hash).unwrap();
6565
last_seen.retain(|x| x != &hash);
6666

67-
let data = decompress(&cdata, size).map_err(|e| Error::Generic(e.to_string()))?;
67+
let data = decompress(&cdata, size)?;
6868
assert_eq!(data.len(), size);
6969

7070
Ok(Some((pos, data)))

pixie-uefi/src/os/disk.rs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use super::{
2-
error::{Error, Result},
3-
UefiOS,
4-
};
1+
use super::{error::Result, UefiOS};
52
use alloc::{
63
string::{String, ToString},
74
vec::Vec,
@@ -170,19 +167,14 @@ impl Disk {
170167

171168
pub fn partitions(&mut self) -> Result<Vec<DiskPartition>> {
172169
let block_size = self.block_size().to_u64();
173-
let mut disk = gpt_disk_io::Disk::new(self).map_err(|e| Error::Generic(e.to_string()))?;
170+
let mut disk = gpt_disk_io::Disk::new(self)?;
174171
let mut buf = [0; 1 << 14];
175-
let header = disk
176-
.read_primary_gpt_header(&mut buf)
177-
.map_err(|e| Error::Generic(e.to_string()))?;
172+
let header = disk.read_primary_gpt_header(&mut buf)?;
178173
// TODO(veluca): bubble up this error.
179-
let part_array_layout = header
180-
.get_partition_entry_array_layout()
181-
.map_err(|e| Error::Generic(e.to_string()))?;
174+
let part_array_layout = header.get_partition_entry_array_layout()?;
182175
let mut buf = [0; 1 << 14];
183176
let x = disk
184-
.gpt_partition_entry_array_iter(part_array_layout, &mut buf)
185-
.map_err(|e| Error::Generic(e.to_string()))?
177+
.gpt_partition_entry_array_iter(part_array_layout, &mut buf)?
186178
.filter_map(|part| {
187179
let part = if let Err(err) = part {
188180
return Some(Err(err));
@@ -201,8 +193,7 @@ impl Disk {
201193
None
202194
}
203195
})
204-
.collect::<Result<_, _>>()
205-
.map_err(|e| Error::Generic(e.to_string()))?;
196+
.collect::<Result<_, _>>()?;
206197

207198
Ok(x)
208199
}

pixie-uefi/src/os/error.rs

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
11
use alloc::{borrow::ToOwned, string::String};
22
use core::fmt::{Display, Formatter};
3-
use derive_more::From;
4-
use smoltcp::socket::{
5-
tcp::{self, ConnectError, RecvError},
6-
udp::{self, BindError},
7-
};
3+
use gpt_disk_io::gpt_disk_types;
84

95
pub type Result<T, E = Error> = core::result::Result<T, E>;
106

11-
#[derive(Debug, From)]
12-
pub enum Error {
13-
Connect(#[from] ConnectError),
14-
TcpSend(#[from] tcp::SendError),
15-
UdpSend(#[from] udp::SendError),
16-
Recv(#[from] RecvError),
17-
Bind(#[from] BindError),
18-
Postcard(#[from] postcard::Error),
19-
Uefi(#[from] uefi::Error),
20-
Generic(String),
21-
}
7+
#[derive(Debug)]
8+
pub struct Error(pub String);
229

2310
impl Error {
2411
pub fn msg(s: &str) -> Error {
25-
Error::Generic(s.to_owned())
12+
Self(s.to_owned())
2613
}
2714
}
2815

16+
macro_rules! err {
17+
($ty: ty) => {
18+
impl From<$ty> for Error {
19+
fn from(value: $ty) -> Self {
20+
Self(format!("{}: {value}", stringify!($ty)))
21+
}
22+
}
23+
};
24+
}
25+
26+
err!(uefi::Error);
27+
err!(smoltcp::socket::tcp::ConnectError);
28+
err!(smoltcp::socket::tcp::RecvError);
29+
err!(smoltcp::socket::tcp::SendError);
30+
err!(smoltcp::socket::udp::BindError);
31+
err!(smoltcp::socket::udp::SendError);
32+
err!(postcard::Error);
33+
err!(lz4_flex::block::DecompressError);
34+
err!(gpt_disk_io::DiskError<Error>);
35+
err!(gpt_disk_types::GptPartitionEntrySizeError);
36+
2937
impl Display for Error {
3038
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), core::fmt::Error> {
3139
write!(fmt, "{self:?}")

pixie-uefi/src/os/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ impl UefiOS {
340340
let mut name_buf = vec![0u16; name.len() * 2 + 16];
341341
let name = CStr16::from_str_with_buf(name, &mut name_buf).unwrap();
342342
let (var, attrs) = uefi::runtime::get_variable_boxed(name, vendor)
343-
.map_err(|e| Error::Generic(format!("Error getting variable: {e:?}")))?;
343+
.map_err(|e| Error(format!("Error getting variable: {e:?}")))?;
344344
Ok((var.to_vec(), attrs))
345345
}
346346

@@ -355,7 +355,7 @@ impl UefiOS {
355355
let mut name_buf = vec![0u16; name.len() * 2 + 16];
356356
let name = CStr16::from_str_with_buf(name, &mut name_buf).unwrap();
357357
uefi::runtime::set_variable(name, vendor, attrs, data)
358-
.map_err(|e| Error::Generic(format!("Error setting variable: {e:?}")))?;
358+
.map_err(|e| Error(format!("Error setting variable: {e:?}")))?;
359359
Ok(())
360360
}
361361

pixie-uefi/src/os/net.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ impl TcpStream {
341341
let socket = net.socket_set.get_mut::<TcpSocket>(self.handle);
342342
let sent = socket.send_slice(&data[pos..]);
343343
if let Err(err) = sent {
344-
return Poll::Ready(Err(Error::TcpSend(err)));
344+
return Poll::Ready(Err(err.into()));
345345
}
346346
pos += sent.unwrap();
347347
if pos < data.len() {
@@ -374,7 +374,7 @@ impl TcpStream {
374374
return Poll::Ready(Ok(0));
375375
}
376376
if let Err(err) = recvd {
377-
return Poll::Ready(Err(Error::Recv(err)));
377+
return Poll::Ready(Err(err.into()));
378378
}
379379
if recvd.unwrap() == 0 {
380380
socket.register_recv_waker(cx.waker());

pixie-uefi/src/parse_disk/ntfs.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
use super::{le16, le32, le64};
22
use crate::{
3-
os::{
4-
disk::Disk,
5-
error::{Error, Result},
6-
},
3+
os::{disk::Disk, error::Result},
74
store::ChunkInfo,
85
};
96
use alloc::vec::Vec;
@@ -42,8 +39,7 @@ pub async fn get_ntfs_chunks(disk: &Disk, start: u64, end: u64) -> Result<Option
4239
let bitmap_entry_address = mft_address + 6 * bytes_per_file_record;
4340
let mut bitmap_entry = [0u8; 1024];
4441
disk.read(start + bitmap_entry_address as u64, &mut bitmap_entry)
45-
.await
46-
.map_err(|e| Error::Generic(format!("failed to read bitmap entry: {e}")))?;
42+
.await?;
4743

4844
let mut attribute_offset = le16(&bitmap_entry, 0x14) as usize;
4945
while le32(&bitmap_entry, attribute_offset) != 0x80 {
@@ -75,9 +71,7 @@ pub async fn get_ntfs_chunks(disk: &Disk, start: u64, end: u64) -> Result<Option
7571
let mut buf = vec![0u8; bytes_per_cluster];
7672
for i in 0..length {
7773
let x = start + (offset + i) as u64 * bytes_per_cluster as u64;
78-
disk.read(x, &mut buf).await.map_err(|e| {
79-
Error::Generic(format!("failed to read bitmap content at {x}: {e}"))
80-
})?;
74+
disk.read(x, &mut buf).await?;
8175

8276
for &byte in &buf {
8377
for bit in 0..8 {

pixie-uefi/src/register.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ pub async fn register(os: UefiOS, server_addr: SocketAddrV4) -> Result<()> {
115115
data.station.image = images[(images
116116
.iter()
117117
.position(|x| x == &data.station.image)
118-
.ok_or(Error::Generic("Invalid image name".into()))?
118+
.ok_or(Error::msg("Invalid image name"))?
119119
+ images.len()
120120
- 1)
121121
% images.len()]

0 commit comments

Comments
 (0)