From 962a6bbf2fcd32b683bbcfd486428d309888fad6 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 8 Jun 2014 01:37:02 -0700 Subject: [PATCH] Get test suite passing again by tweaking error handling in mkdir Replace `show_error!` with Result<(), int> and `display_error!` --- common/util.rs | 10 ++++++++++ mkdir/mkdir.rs | 19 +++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/common/util.rs b/common/util.rs index 14ae5d70d..401bad4cc 100644 --- a/common/util.rs +++ b/common/util.rs @@ -20,6 +20,16 @@ macro_rules! show_error( }) ) +// FIXME #211: Transitional until there are no further users of `show_error!`. +// Then this can be renamed. +#[macro_export] +macro_rules! display_error( + ($($args:expr),+) => ({ + safe_write!(&mut ::std::io::stderr(), "{}: error: ", ::NAME); + safe_writeln!(&mut ::std::io::stderr(), $($args),+); + }) +) + #[macro_export] macro_rules! show_warning( ($($args:expr),+) => ({ diff --git a/mkdir/mkdir.rs b/mkdir/mkdir.rs index 07a0fb6af..288591e42 100644 --- a/mkdir/mkdir.rs +++ b/mkdir/mkdir.rs @@ -84,9 +84,10 @@ pub fn uumain(args: Vec) -> int { if dirs.is_empty() { crash!(1, "missing operand"); } - exec(dirs, mk_parents, mode, verbose_flag); - - return 0; + match exec(dirs, mk_parents, mode, verbose_flag) { + Ok(()) => return 0, + Err(e) => return e + } } fn print_help(opts: &[getopts::OptGroup]) { @@ -99,7 +100,7 @@ fn print_help(opts: &[getopts::OptGroup]) { /** * Create the list of new directories */ -fn exec(dirs: Vec, mk_parents: bool, mode: FilePermission, verbose: bool) { +fn exec(dirs: Vec, mk_parents: bool, mode: FilePermission, verbose: bool) -> Result<(), int> { let mut parent_dirs = Vec::new(); if mk_parents { for dir in dirs.iter() { @@ -118,7 +119,10 @@ fn exec(dirs: Vec, mk_parents: bool, mode: FilePermission, verbose: bool } // Recursively build parent dirs that are needed if !parent_dirs.is_empty() { - exec(parent_dirs, mk_parents, mode, verbose); + match exec(parent_dirs, mk_parents, mode, verbose) { + Ok(()) => ( /* keep going */ ), + Err(e) => return Err(e) + } } for dir in dirs.iter() { @@ -140,9 +144,12 @@ fn exec(dirs: Vec, mk_parents: bool, mode: FilePermission, verbose: bool } else { format!("directory '{}' already exists", *dir) }; - show_error!(1, "{}", error_msg); + display_error!("{}", error_msg); + return Err(1); } } + + return Ok(()); } /**