diff options
author | sharkdp <davidpeter@web.de> | 2018-05-08 23:22:27 +0200 |
---|---|---|
committer | sharkdp <davidpeter@web.de> | 2018-05-08 23:23:41 +0200 |
commit | f90b9d1accac7ba429cd541c1af7312b088d27de (patch) | |
tree | 3aa86c90008893fe701922402e9c77da357bda7a | |
parent | f7af53701896cf672bcec10bfd7aadccceed0fa3 (diff) |
Do not peek at FIFOs, closes #80
-rw-r--r-- | src/main.rs | 19 |
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, }; |