diff options
Diffstat (limited to 'src/controller.rs')
-rw-r--r-- | src/controller.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/controller.rs b/src/controller.rs index 8dd73986..a1e3f119 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -1,3 +1,4 @@ +use std::convert::TryFrom; use std::io::{self, Write}; use crate::assets::HighlightingAssets; @@ -66,6 +67,14 @@ impl<'b> Controller<'b> { } let attached_to_pager = output_type.is_pager(); + let rw_cycle_detected = !attached_to_pager && { + let identifiers: Vec<_> = inputs + .iter() + .flat_map(clircle::Identifier::try_from) + .collect(); + clircle::stdout_among_inputs(&identifiers) + }; + let writer = output_type.handle()?; let mut no_errors: bool = true; @@ -78,6 +87,11 @@ impl<'b> Controller<'b> { } }; + if rw_cycle_detected { + print_error(&"The output file is also an input!".into(), writer); + return Ok(false); + } + for (index, input) in inputs.into_iter().enumerate() { match input.open(io::stdin().lock()) { Err(error) => { |