cmd.exe: Add prompt for rd /s.
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index a1d1154..500c27e 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -643,8 +643,22 @@
/* Otherwise use ShFileOp to recursively remove a directory */
} else {
- /* Do the delete */
SHFILEOPSTRUCT lpDir;
+
+ /* Ask first */
+ if (strstr (quals, "/Q") == NULL) {
+ BOOL ok;
+ char question[MAXSTRING];
+
+ /* Ask for confirmation */
+ sprintf(question, "%s, ", param1);
+ ok = WCMD_ask_confirm(question);
+
+ /* Abort if answer is 'N' */
+ if (!ok) return;
+ }
+
+ /* Do the delete */
lpDir.hwnd = NULL;
lpDir.pTo = NULL;
lpDir.pFrom = param1;
@@ -786,7 +800,7 @@
}
LocalFree (old);
FreeEnvironmentStringsW (env);
-
+
/* restore old environment */
env = temp->strings;
len = 0;
@@ -1260,3 +1274,43 @@
ExitProcess(rc);
}
}
+
+/**************************************************************************
+ * WCMD_ask_confirm
+ *
+ * Issue a message and ask 'Are you sure (Y/N)', waiting on a valid
+ * answer.
+ *
+ * Returns True if Y answer is selected
+ *
+ */
+BOOL WCMD_ask_confirm (char *message) {
+
+ char msgbuffer[MAXSTRING];
+ char Ybuffer[MAXSTRING];
+ char Nbuffer[MAXSTRING];
+ char answer[MAX_PATH] = "";
+ DWORD count = 0;
+
+ /* Load the translated 'Are you sure', plus valid answers */
+ LoadString (hinst, WCMD_CONFIRM, msgbuffer, sizeof(msgbuffer));
+ LoadString (hinst, WCMD_YES, Ybuffer, sizeof(Ybuffer));
+ LoadString (hinst, WCMD_NO, Nbuffer, sizeof(Nbuffer));
+
+ /* Loop waiting on a Y or N */
+ while (answer[0] != Ybuffer[0] && answer[0] != Nbuffer[0]) {
+ WCMD_output_asis (message);
+ WCMD_output_asis (msgbuffer);
+ WCMD_output_asis (" (");
+ WCMD_output_asis (Ybuffer);
+ WCMD_output_asis ("/");
+ WCMD_output_asis (Nbuffer);
+ WCMD_output_asis (")?");
+ ReadFile (GetStdHandle(STD_INPUT_HANDLE), answer, sizeof(answer),
+ &count, NULL);
+ answer[0] = toupper(answer[0]);
+ }
+
+ /* Return the answer */
+ return (answer[0] == Ybuffer[0]);
+}