# HG changeset patch # User John W. Eaton # Date 1216919016 14400 # Node ID b6d4c644b4b61ada8f5f7ede36072a9b64005389 # Parent 4f9e8eeb2059cf6d20e821958233d4e773ef4cff Fmkdir: improve compatibility diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-07-24 John W. Eaton + + * dirfns.cc (Fmkdir): If directory already exists, return status = + true, but also set error message. + 2008-07-23 John W. Eaton * ov-usr_fcn.cc (octave_user_function::do_multi_index_op): diff --git a/src/dirfns.cc b/src/dirfns.cc --- a/src/dirfns.cc +++ b/src/dirfns.cc @@ -257,16 +257,31 @@ { std::string msg; - int status = file_ops::mkdir (file_ops::tilde_expand (dirname), - 0777, msg); + dirname = file_ops::tilde_expand (dirname); + + file_stat fs (dirname); - if (status < 0) + if (fs && fs.is_dir ()) { + // For compatibility with Matlab, we return true when the + // directory already exists. + retval(2) = "mkdir"; - retval(1) = msg; + retval(1) = "directory exists"; + retval(0) = true; } else - retval(0) = true; + { + int status = file_ops::mkdir (dirname, 0777, msg); + + if (status < 0) + { + retval(2) = "mkdir"; + retval(1) = msg; + } + else + retval(0) = true; + } } else print_usage ();