Skip to content

Commit a37192c

Browse files
committed
treewide: refactor mkdir and read_file
mkdir and read_file augment the error case with the path in the error case. This is useful as we otherwise don't know which location failed. This commit refactors the functions to take any argument that coerces into a Path - which is implemented by many types. mkdir now uses create_dir_all as it is not meant to fail if the directory already exists. Signed-off-by: Stefan Kerkmann <[email protected]>
1 parent d5cad5e commit a37192c

File tree

5 files changed

+33
-17
lines changed

5 files changed

+33
-17
lines changed

src/main.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::env;
55
use std::env::current_exe;
66
use std::ffi::CString;
77
use std::fmt::Write as _;
8-
use std::fs::{create_dir, read_to_string, File, OpenOptions};
8+
use std::fs::{File, OpenOptions};
99
use std::io;
1010
use std::io::Write as _;
1111
use std::os::fd::{AsFd, AsRawFd, RawFd};
@@ -25,6 +25,7 @@ use nix::unistd::{chdir, chroot, dup2, execv, unlink};
2525
use systemd::{mount_systemd, shutdown};
2626
#[cfg(feature = "usb9pfs")]
2727
use usbg_9pfs::prepare_9pfs_gadget;
28+
use util::read_file;
2829

2930
mod cmdline;
3031
#[cfg(feature = "dmverity")]
@@ -34,22 +35,10 @@ mod mount;
3435
mod systemd;
3536
#[cfg(feature = "usb9pfs")]
3637
mod usbg_9pfs;
38+
mod util;
3739

3840
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
3941

40-
pub fn mkdir(dir: &str) -> Result<()> {
41-
if let Err(e) = create_dir(dir) {
42-
if e.kind() != io::ErrorKind::AlreadyExists {
43-
return Err(format!("Failed to create {dir}: {e}",).into());
44-
}
45-
}
46-
Ok(())
47-
}
48-
49-
fn read_file(filename: &str) -> std::result::Result<String, String> {
50-
read_to_string(filename).map_err(|e| format!("Failed to read {filename}: {e}"))
51-
}
52-
5342
/*
5443
* Setup stdout/stderr. The kernel will create /dev/console in the
5544
* initramfs, so we can use that.

src/mount.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ use log::debug;
77
use nix::mount::{mount, MsFlags};
88

99
use crate::cmdline::CmdlineOptions;
10-
use crate::{mkdir, Result};
10+
use crate::util::mkdir;
11+
use crate::Result;
1112

1213
pub fn do_mount(
1314
src: Option<&str>,

src/systemd.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use nix::sys::reboot::{reboot, RebootMode};
1010

1111
use crate::cmdline::CmdlineOptions;
1212
use crate::mount::do_mount;
13-
use crate::{mkdir, Result};
13+
use crate::util::mkdir;
14+
use crate::Result;
1415

1516
pub fn mount_systemd(options: &mut CmdlineOptions) -> Result<()> {
1617
do_mount(

src/usbg_9pfs.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ use log::debug;
99

1010
use crate::cmdline::CmdlineOptions;
1111
use crate::mount::mount_apivfs;
12-
use crate::{mkdir, Result};
12+
use crate::util::mkdir;
13+
use crate::Result;
1314

1415
fn write_file<C: AsRef<[u8]>>(path: &str, content: C) -> Result<()> {
1516
write(path, content).map_err(|e| format!("Failed to write to {path}: {e}").into())

src/util.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use std::{
2+
fs::{create_dir_all, read_to_string},
3+
path::Path,
4+
};
5+
6+
use crate::Result;
7+
8+
pub(crate) fn mkdir(dir: impl AsRef<Path>) -> Result<()> {
9+
Ok(create_dir_all(dir.as_ref()).map_err(|e| {
10+
format!(
11+
"Failed to create directory {}: {e}",
12+
dir.as_ref().to_string_lossy()
13+
)
14+
})?)
15+
}
16+
17+
pub(crate) fn read_file(filename: impl AsRef<Path>) -> Result<String> {
18+
Ok(read_to_string(filename.as_ref()).map_err(|e| {
19+
format!(
20+
"Failed to read {}: {e}",
21+
filename.as_ref().to_string_lossy()
22+
)
23+
})?)
24+
}

0 commit comments

Comments
 (0)