Module: wine Branch: master Commit: 69194ce0d786349d17286d333f7d3252ec0584e5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=69194ce0d786349d17286d333f...
Author: Jason Edmeades us@edmeades.me.uk Date: Mon Feb 26 23:04:40 2007 +0000
cmd.exe: Add rd /s support.
---
programs/cmd/builtins.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 9a8b513..4f73fd0 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -35,6 +35,7 @@ #define WIN32_LEAN_AND_MEAN
#include "wcmd.h" +#include <shellapi.h>
void WCMD_execute (char *orig_command, char *parameter, char *substitution);
@@ -633,7 +634,24 @@ void WCMD_remove_dir (void) { WCMD_output ("Argument missing\n"); return; } - if (!RemoveDirectory (param1)) WCMD_print_error (); + + /* If subdirectory search not supplied, just try to remove + and report error if it fails (eg if it contains a file) */ + if (strstr (quals, "/S") == NULL) { + if (!RemoveDirectory (param1)) WCMD_print_error (); + + /* Otherwise use ShFileOp to recursively remove a directory */ + } else { + + /* Do the delete */ + SHFILEOPSTRUCT lpDir; + lpDir.hwnd = NULL; + lpDir.pTo = NULL; + lpDir.pFrom = param1; + lpDir.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI; + lpDir.wFunc = FO_DELETE; + if (SHFileOperationA(&lpDir)) WCMD_print_error (); + } }
/****************************************************************************