diff --git a/examples/simple.rs b/examples/simple.rs index 395706f4..16e0e71f 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -9,7 +9,7 @@ use console::Term; use std::process; fn main() { - let files = std::env::args().skip(1).collect::>(); + let files = std::env::args_os().skip(1).collect::>(); if files.is_empty() { eprintln!("No input files specified"); diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs index 23ac7a05..75e66854 100644 --- a/src/bin/bat/app.rs +++ b/src/bin/bat/app.rs @@ -227,7 +227,7 @@ impl App { fn files(&self) -> Vec { self.matches - .values_of("FILE") + .values_of_os("FILE") .map(|values| { values .map(|filename| { diff --git a/src/bin/bat/main.rs b/src/bin/bat/main.rs index 1176c7d4..33bd3b3c 100644 --- a/src/bin/bat/main.rs +++ b/src/bin/bat/main.rs @@ -13,6 +13,7 @@ use std::io; use std::io::Write; use std::path::Path; use std::process; +use std::ffi::OsStr; use ansi_term::Colour::Green; use ansi_term::Style; @@ -160,7 +161,7 @@ fn run() -> Result { Ok(true) } else { let mut config = app.config()?; - config.files = vec![InputFile::Ordinary(&"cache")]; + config.files = vec![InputFile::Ordinary(OsStr::new("cache"))]; run_controller(&config) } diff --git a/src/diff.rs b/src/diff.rs index 083e96d7..c6113166 100644 --- a/src/diff.rs +++ b/src/diff.rs @@ -1,7 +1,9 @@ -use git2::{DiffOptions, IntoCString, Repository}; use std::collections::HashMap; use std::fs; use std::path::Path; +use std::ffi::OsStr; + +use git2::{DiffOptions, IntoCString, Repository}; #[derive(Copy, Clone, Debug)] pub enum LineChange { @@ -13,7 +15,7 @@ pub enum LineChange { pub type LineChanges = HashMap; -pub fn get_git_diff(filename: &str) -> Option { +pub fn get_git_diff(filename: &OsStr) -> Option { let repo = Repository::discover(&filename).ok()?; let repo_path_absolute = fs::canonicalize(repo.workdir()?).ok()?; diff --git a/src/inputfile.rs b/src/inputfile.rs index 6fda8aea..2db2bd1a 100644 --- a/src/inputfile.rs +++ b/src/inputfile.rs @@ -1,5 +1,6 @@ use std::fs::File; use std::io::{self, BufRead, BufReader}; +use std::ffi::OsStr; use content_inspector::{self, ContentType}; @@ -54,7 +55,7 @@ impl<'a> InputFileReader<'a> { #[derive(Debug, Clone, Copy, PartialEq)] pub enum InputFile<'a> { StdIn, - Ordinary(&'a str), + Ordinary(&'a OsStr), ThemePreviewFile, } @@ -63,10 +64,10 @@ impl<'a> InputFile<'a> { match self { InputFile::StdIn => Ok(InputFileReader::new(stdin.lock())), InputFile::Ordinary(filename) => { - let file = File::open(filename).map_err(|e| format!("'{}': {}", filename, e))?; + let file = File::open(filename).map_err(|e| format!("'{}': {}", filename.to_string_lossy(), e))?; if file.metadata()?.is_dir() { - return Err(format!("'{}' is a directory.", filename).into()); + return Err(format!("'{}' is a directory.", filename.to_string_lossy()).into()); } Ok(InputFileReader::new(BufReader::new(file))) diff --git a/src/printer.rs b/src/printer.rs index ff4e59a8..49e6b3b7 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -1,5 +1,6 @@ use std::io::Write; use std::vec::Vec; +use std::borrow::Cow; use ansi_term::Colour::{Fixed, Green, Red, Yellow}; use ansi_term::Style; @@ -225,7 +226,7 @@ impl<'a> Printer for InteractivePrinter<'a> { if !self.config.output_components.header() { if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable { let input = match file { - InputFile::Ordinary(filename) => format!("file '{}'", filename), + InputFile::Ordinary(filename) => format!("file '{}'", filename.to_string_lossy()), _ => "STDIN".into(), }; @@ -261,8 +262,8 @@ impl<'a> Printer for InteractivePrinter<'a> { } let (prefix, name) = match file { - InputFile::Ordinary(filename) => ("File: ", filename), - _ => ("", "STDIN"), + InputFile::Ordinary(filename) => ("File: ", filename.to_string_lossy()), + _ => ("", Cow::from("STDIN")), }; let mode = match self.content_type {