Skip to content

Commit d24c4e1

Browse files
committed
treewide: refactor mkdir, write_file and read_file
mkdir, read_file write_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 5d1fe17 commit d24c4e1

File tree

5 files changed

+46
-22
lines changed

5 files changed

+46
-22
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: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// SPDX-License-Identifier: GPL-2.0-only
22

3-
use std::fs::{read_dir, write};
3+
use std::fs::read_dir;
44
use std::os::unix::ffi::OsStrExt;
55
use std::os::unix::fs::symlink;
66
use std::{thread, time};
@@ -9,11 +9,8 @@ use log::debug;
99

1010
use crate::cmdline::CmdlineOptions;
1111
use crate::mount::mount_apivfs;
12-
use crate::{mkdir, Result};
13-
14-
fn write_file<C: AsRef<[u8]>>(path: &str, content: C) -> Result<()> {
15-
write(path, content).map_err(|e| format!("Failed to write to {path}: {e}").into())
16-
}
12+
use crate::util::{mkdir, write_file};
13+
use crate::Result;
1714

1815
fn setup_9pfs_gadget(device: &String) -> Result<()> {
1916
debug!("Initializing USB 9pfs gadget ...");

src/util.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::{
2+
fs::{create_dir_all, read_to_string, write},
3+
path::Path,
4+
};
5+
6+
use crate::Result;
7+
8+
pub(crate) fn mkdir(dir: impl AsRef<Path>) -> Result<()> {
9+
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+
.into()
15+
})
16+
}
17+
18+
pub(crate) fn read_file(filename: impl AsRef<Path>) -> Result<String> {
19+
read_to_string(filename.as_ref()).map_err(|e| {
20+
format!(
21+
"Failed to read {}: {e}",
22+
filename.as_ref().to_string_lossy()
23+
)
24+
.into()
25+
})
26+
}
27+
28+
pub(crate) fn write_file<C: AsRef<[u8]>>(path: impl AsRef<Path>, content: C) -> Result<()> {
29+
write(&path, content).map_err(|e| {
30+
format!(
31+
"Failed to write to {}: {e}",
32+
path.as_ref().to_string_lossy()
33+
)
34+
.into()
35+
})
36+
}

0 commit comments

Comments
 (0)