mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 19:47:45 +00:00
tee: remove unnecessary memory indirection
This removes two layers of Box<NamedWriter<...>>. The indirection appears to be unintentional, and makes it harder to understand and change the code.
This commit is contained in:
parent
0ef06bd82d
commit
5c36ed92b8
1 changed files with 22 additions and 28 deletions
|
@ -150,12 +150,7 @@ fn tee(options: &Options) -> Result<()> {
|
|||
.files
|
||||
.clone()
|
||||
.into_iter()
|
||||
.map(|file| {
|
||||
Ok(NamedWriter {
|
||||
name: file.clone(),
|
||||
inner: open(file, options.append, options.output_error.as_ref())?,
|
||||
})
|
||||
})
|
||||
.map(|file| open(file, options.append, options.output_error.as_ref()))
|
||||
.collect::<Result<Vec<NamedWriter>>>()?;
|
||||
|
||||
writers.insert(
|
||||
|
@ -188,13 +183,8 @@ fn tee(options: &Options) -> Result<()> {
|
|||
}
|
||||
}
|
||||
|
||||
fn open(
|
||||
name: String,
|
||||
append: bool,
|
||||
output_error: Option<&OutputErrorMode>,
|
||||
) -> Result<Box<dyn Write>> {
|
||||
fn open(name: String, append: bool, output_error: Option<&OutputErrorMode>) -> Result<NamedWriter> {
|
||||
let path = PathBuf::from(name.clone());
|
||||
let inner: Box<dyn Write> = {
|
||||
let mut options = OpenOptions::new();
|
||||
let mode = if append {
|
||||
options.append(true)
|
||||
|
@ -202,17 +192,21 @@ fn open(
|
|||
options.truncate(true)
|
||||
};
|
||||
match mode.write(true).create(true).open(path.as_path()) {
|
||||
Ok(file) => Box::new(file),
|
||||
Ok(file) => Ok(NamedWriter {
|
||||
inner: Box::new(file),
|
||||
name,
|
||||
}),
|
||||
Err(f) => {
|
||||
show_error!("{}: {}", name.maybe_quote(), f);
|
||||
match output_error {
|
||||
Some(OutputErrorMode::Exit | OutputErrorMode::ExitNoPipe) => return Err(f),
|
||||
_ => Box::new(sink()),
|
||||
Some(OutputErrorMode::Exit | OutputErrorMode::ExitNoPipe) => Err(f),
|
||||
_ => Ok(NamedWriter {
|
||||
inner: Box::new(sink()),
|
||||
name,
|
||||
}),
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Ok(Box::new(NamedWriter { inner, name }) as Box<dyn Write>)
|
||||
}
|
||||
|
||||
struct MultiWriter {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue