Skip to content

Commit 6a7c011

Browse files
authored
Merge pull request #6853 from sylvestre/comm
comm: generate an error if the input is a directory
2 parents 2ad3c45 + 0cae322 commit 6a7c011

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

src/uu/comm/src/comm.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
// spell-checker:ignore (ToDO) delim mkdelim
77

88
use std::cmp::Ordering;
9-
use std::fs::File;
9+
use std::fs::{metadata, File};
1010
use std::io::{self, stdin, BufRead, BufReader, Stdin};
11-
use std::path::Path;
1211
use uucore::error::{FromIo, UResult, USimpleError};
1312
use uucore::line_ending::LineEnding;
1413
use uucore::{format_usage, help_about, help_usage};
@@ -130,7 +129,10 @@ fn open_file(name: &str, line_ending: LineEnding) -> io::Result<LineReader> {
130129
if name == "-" {
131130
Ok(LineReader::new(Input::Stdin(stdin()), line_ending))
132131
} else {
133-
let f = File::open(Path::new(name))?;
132+
if metadata(name)?.is_dir() {
133+
return Err(io::Error::new(io::ErrorKind::Other, "Is a directory"));
134+
}
135+
let f = File::open(name)?;
134136
Ok(LineReader::new(
135137
Input::FileIn(BufReader::new(f)),
136138
line_ending,

tests/by-util/test_comm.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,3 +292,36 @@ fn test_no_such_file() {
292292
.fails()
293293
.stderr_only("comm: bogus_file_1: No such file or directory\n");
294294
}
295+
296+
#[test]
297+
fn test_is_dir() {
298+
let scene = TestScenario::new(util_name!());
299+
let at = &scene.fixtures;
300+
301+
scene
302+
.ucmd()
303+
.args(&[".", "."])
304+
.fails()
305+
.stderr_only("comm: .: Is a directory\n");
306+
307+
at.mkdir("dir");
308+
scene
309+
.ucmd()
310+
.args(&["dir", "."])
311+
.fails()
312+
.stderr_only("comm: dir: Is a directory\n");
313+
314+
at.touch("file");
315+
scene
316+
.ucmd()
317+
.args(&[".", "file"])
318+
.fails()
319+
.stderr_only("comm: .: Is a directory\n");
320+
321+
at.touch("file");
322+
scene
323+
.ucmd()
324+
.args(&["file", "."])
325+
.fails()
326+
.stderr_only("comm: .: Is a directory\n");
327+
}

0 commit comments

Comments
 (0)