Jason Edmeades : cmd.exe: Add rd /s support.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Feb 27 06:46:12 CST 2007
Module: wine
Branch: master
Commit: 69194ce0d786349d17286d333f7d3252ec0584e5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=69194ce0d786349d17286d333f7d3252ec0584e5
Author: Jason Edmeades <us at 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 ();
+ }
}
/****************************************************************************
More information about the wine-cvs
mailing list