diff --git a/src/builtins/source.rs b/src/builtins/source.rs index 6b283eb4a..5acb73af6 100644 --- a/src/builtins/source.rs +++ b/src/builtins/source.rs @@ -1,5 +1,4 @@ use std::os::fd::AsRawFd; -use std::os::unix::fs::MetadataExt; use crate::{ common::{escape, scoped_push_replacer, FilenameRef}, @@ -7,9 +6,7 @@ nix::isatty, parser::Block, reader::reader_read, - wutil::fstat, }; -use libc::{S_IFMT, S_IFREG}; use nix::{fcntl::OFlag, sys::stat::Mode}; use super::prelude::*; @@ -70,27 +67,6 @@ pub fn source(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> O }; fd = opened_file.as_raw_fd(); - let md = match fstat(fd) { - Ok(md) => md, - Err(_) => { - let esc = escape(args[optind]); - streams.err.append(wgettext_fmt!( - "%ls: Error encountered while sourcing file '%ls':\n", - cmd, - &esc - )); - return STATUS_CMD_ERROR; - } - }; - - #[allow(clippy::useless_conversion)] - if md.mode() & u32::from(S_IFMT) != u32::from(S_IFREG) { - let esc = escape(args[optind]); - streams - .err - .append(wgettext_fmt!("%ls: '%ls' is not a file\n", cmd, esc)); - return STATUS_CMD_ERROR; - } func_filename = FilenameRef::new(args[optind].to_owned()); } diff --git a/tests/checks/source.fish b/tests/checks/source.fish new file mode 100644 index 000000000..e8f589416 --- /dev/null +++ b/tests/checks/source.fish @@ -0,0 +1,11 @@ +#RUN: %fish %s + +source /dev/null +echo $status +# CHECK: 0 + +source / +echo $status +# CHECKERR: error: Unable to read input file: Is a directory +# CHECKERR: source: Error while reading file '/' +# CHECK: 1