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
|
.files
|
||||||
.clone()
|
.clone()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|file| {
|
.map(|file| open(file, options.append, options.output_error.as_ref()))
|
||||||
Ok(NamedWriter {
|
|
||||||
name: file.clone(),
|
|
||||||
inner: open(file, options.append, options.output_error.as_ref())?,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.collect::<Result<Vec<NamedWriter>>>()?;
|
.collect::<Result<Vec<NamedWriter>>>()?;
|
||||||
|
|
||||||
writers.insert(
|
writers.insert(
|
||||||
|
@ -188,31 +183,30 @@ fn tee(options: &Options) -> Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn open(
|
fn open(name: String, append: bool, output_error: Option<&OutputErrorMode>) -> Result<NamedWriter> {
|
||||||
name: String,
|
|
||||||
append: bool,
|
|
||||||
output_error: Option<&OutputErrorMode>,
|
|
||||||
) -> Result<Box<dyn Write>> {
|
|
||||||
let path = PathBuf::from(name.clone());
|
let path = PathBuf::from(name.clone());
|
||||||
let inner: Box<dyn Write> = {
|
let mut options = OpenOptions::new();
|
||||||
let mut options = OpenOptions::new();
|
let mode = if append {
|
||||||
let mode = if append {
|
options.append(true)
|
||||||
options.append(true)
|
} else {
|
||||||
} else {
|
options.truncate(true)
|
||||||
options.truncate(true)
|
};
|
||||||
};
|
match mode.write(true).create(true).open(path.as_path()) {
|
||||||
match mode.write(true).create(true).open(path.as_path()) {
|
Ok(file) => Ok(NamedWriter {
|
||||||
Ok(file) => Box::new(file),
|
inner: Box::new(file),
|
||||||
Err(f) => {
|
name,
|
||||||
show_error!("{}: {}", name.maybe_quote(), f);
|
}),
|
||||||
match output_error {
|
Err(f) => {
|
||||||
Some(OutputErrorMode::Exit | OutputErrorMode::ExitNoPipe) => return Err(f),
|
show_error!("{}: {}", name.maybe_quote(), f);
|
||||||
_ => Box::new(sink()),
|
match output_error {
|
||||||
}
|
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 {
|
struct MultiWriter {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue