@@ -54,20 +54,30 @@ impl<'a> InputFileReader<'a> {
55#[derive(Debug, Clone, Copy, PartialEq)]
55#[derive(Debug, Clone, Copy, PartialEq)]
56pub struct OrdinaryFile<'a> {
56pub struct OrdinaryFile<'a> {
57− filename: &'a OsStr,
57+ path: &'a OsStr,
58 user_provided_name: Option<&'a OsStr>,
58 user_provided_name: Option<&'a OsStr>,
61impl<'a> OrdinaryFile<'a> {
61impl<'a> OrdinaryFile<'a> {
62− pub fn new(filename: &'a OsStr, user_provided_name: Option<&'a OsStr>) -> OrdinaryFile<'a> {
62+ pub fn from_path(path: &'a OsStr) -> OrdinaryFile<'a> {
63 OrdinaryFile {
63 OrdinaryFile {
64− filename: filename,
64+ path,
65+ user_provided_name: None,
69+ pub fn from_path_with_name(
71+ user_provided_name: Option<&'a OsStr>,
72+ ) -> OrdinaryFile<'a> {
65− user_provided_name: user_provided_name,
75+ user_provided_name,
69 pub fn filename(&self) -> &'a OsStr {
79 pub fn filename(&self) -> &'a OsStr {
70− self.user_provided_name.unwrap_or_else(|| self.filename)
80+ self.user_provided_name.unwrap_or_else(|| self.path)
@@ -83,12 +93,12 @@ impl<'a> InputFile<'a> {
83 match self {
93 match self {
84 InputFile::StdIn(_) => Ok(InputFileReader::new(stdin.lock())),
94 InputFile::StdIn(_) => Ok(InputFileReader::new(stdin.lock())),
85 InputFile::Ordinary(ofile) => {
95 InputFile::Ordinary(ofile) => {
86− let file = File::open(ofile.filename)
96+ let file = File::open(ofile.path)
87− .map_err(|e| format!("'{}': {}", ofile.filename.to_string_lossy(), e))?;
97+ .map_err(|e| format!("'{}': {}", ofile.path.to_string_lossy(), e))?;
89 if file.metadata()?.is_dir() {
99 if file.metadata()?.is_dir() {
90 return Err(
100 return Err(
91− format!("'{}' is a directory.", ofile.filename.to_string_lossy()).into(),
101+ format!("'{}' is a directory.", ofile.path.to_string_lossy()).into(),