summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsharkdp <davidpeter@web.de>2018-05-08 23:22:27 +0200
committersharkdp <davidpeter@web.de>2018-05-08 23:23:41 +0200
commitf90b9d1accac7ba429cd541c1af7312b088d27de (patch)
tree3aa86c90008893fe701922402e9c77da357bda7a
parentf7af53701896cf672bcec10bfd7aadccceed0fa3 (diff)
Do not peek at FIFOs, closes #80
-rw-r--r--src/main.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 227c75a5..78c794cb 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -27,6 +27,9 @@ use std::io::{self, BufRead, BufReader, Write};
use std::path::{Path, PathBuf};
use std::process::{self, Child, Command, Stdio};
+#[cfg(unix)]
+use std::os::unix::fs::FileTypeExt;
+
use ansi_term::Colour::{Fixed, Green, Red, White, Yellow};
use ansi_term::Style;
use atty::Stream;
@@ -163,7 +166,21 @@ fn print_file(
let syntax = match (options.language, filename) {
(Some(language), _) => syntax_set.find_syntax_by_token(language),
- (None, Some(filename)) => syntax_set.find_syntax_for_file(filename)?,
+ (None, Some(filename)) => {
+ #[cfg(not(unix))]
+ let may_read_from_file = true;
+
+ // Do not peek at the file (to determine the syntax) if it is a FIFO because they can
+ // only be read once.
+ #[cfg(unix)]
+ let may_read_from_file = !fs::metadata(filename)?.file_type().is_fifo();
+
+ if may_read_from_file {
+ syntax_set.find_syntax_for_file(filename)?
+ } else {
+ None
+ }
+ }
(None, None) => None,
};