summaryrefslogtreecommitdiffstats
path: root/src/controller.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/controller.rs')
-rw-r--r--src/controller.rs14
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) => {