From 9e33c3a48c167fe3b7e1d6357df392943745421e Mon Sep 17 00:00:00 2001 From: Wim Hueskes Date: Sat, 13 Aug 2016 22:51:21 +0200 Subject: [PATCH] od: fix command-line parsing of file names --- src/od/od.rs | 7 +++---- tests/fixtures/od/-f | 1 + tests/fixtures/od/c | 1 + tests/fixtures/od/x | 1 + tests/test_od.rs | 18 +++++++++++++++++- 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/od/-f create mode 100644 tests/fixtures/od/c create mode 100644 tests/fixtures/od/x diff --git a/src/od/od.rs b/src/od/od.rs index c7aeed168..42546a638 100644 --- a/src/od/od.rs +++ b/src/od/od.rs @@ -134,12 +134,11 @@ pub fn uumain(args: Vec) -> i32 { } }; - // Gather up file names - args which don't start with '-' - let mut inputs = args[1..] + // Gather up file names + let mut inputs = matches.free .iter() .filter_map(|w| match w as &str { - "--" => Some(InputSource::Stdin), - o if o.starts_with("-") => None, + "-" => Some(InputSource::Stdin), x => Some(InputSource::FileName(x)), }) .collect::>(); diff --git a/tests/fixtures/od/-f b/tests/fixtures/od/-f new file mode 100644 index 000000000..370c31180 --- /dev/null +++ b/tests/fixtures/od/-f @@ -0,0 +1 @@ +minus lowercase f diff --git a/tests/fixtures/od/c b/tests/fixtures/od/c new file mode 100644 index 000000000..109c7e9b0 --- /dev/null +++ b/tests/fixtures/od/c @@ -0,0 +1 @@ +lowercase c diff --git a/tests/fixtures/od/x b/tests/fixtures/od/x new file mode 100644 index 000000000..584b8c5f2 --- /dev/null +++ b/tests/fixtures/od/x @@ -0,0 +1 @@ +lowercase x diff --git a/tests/test_od.rs b/tests/test_od.rs index 09fd79837..58567053c 100644 --- a/tests/test_od.rs +++ b/tests/test_od.rs @@ -117,7 +117,7 @@ fn test_from_mixed() { } } - let result = new_ucmd!().arg("--endian=little").arg(file1.as_os_str()).arg("--").arg(file3.as_os_str()).run_piped_stdin(data2.as_bytes()); + let result = new_ucmd!().arg("--endian=little").arg(file1.as_os_str()).arg("-").arg(file3.as_os_str()).run_piped_stdin(data2.as_bytes()); assert_empty_stderr!(result); assert!(result.success); @@ -548,3 +548,19 @@ fn test_ascii_dump(){ 0000026 ")); } + +#[test] +fn test_filename_parsing(){ + // files "a" and "x" both exists, but are no filenames in the commandline below + // "-f" must be treated as a filename, it contains the text: minus lowercase f + // so "-f" should not be interpreted as a formatting option. + let result = new_ucmd!().arg("--format").arg("a").arg("-A").arg("x").arg("--").arg("-f").run(); + + assert_empty_stderr!(result); + assert!(result.success); + assert_eq!(result.stdout, unindent(" + 000000 m i n u s sp l o w e r c a s e sp + 000010 f nl + 000012 + ")); +}