cmd.exe: Add prompt for rd /s.
diff --git a/programs/cmd/Cs.rc b/programs/cmd/Cs.rc index d452bd8..390d875 100644 --- a/programs/cmd/Cs.rc +++ b/programs/cmd/Cs.rc
@@ -230,4 +230,8 @@ VOL\t\tUkáe jmenovku disku\n\ EXIT\t\tUkonèí CMD\n\n\ Zadejte HELP <pøíkaz> pro podrobnìjí informace o nìkterém z výe uvedených pøíkazù\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/De.rc b/programs/cmd/De.rc index 4fd40c8..50a69bc 100644 --- a/programs/cmd/De.rc +++ b/programs/cmd/De.rc
@@ -247,4 +247,8 @@ EXIT\t\tBeendet den CMD\n\n\ Geben Sie HELP <Befehl> ein, damit Sie weitere Informationen für einen der\n\ obigen Befehle erhalten.\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/En.rc b/programs/cmd/En.rc index 1a8877d..10891a5 100644 --- a/programs/cmd/En.rc +++ b/programs/cmd/En.rc
@@ -234,4 +234,8 @@ VOL\t\tShow the volume label of a disk device\n\ EXIT\t\tClose down CMD\n\n\ Enter HELP <command> for further information on any of the above commands\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Es.rc b/programs/cmd/Es.rc index 279ab71..4822007 100644 --- a/programs/cmd/Es.rc +++ b/programs/cmd/Es.rc
@@ -242,4 +242,8 @@ VOL\t\tMostrar la etiqueta de volumen de un dispositivo de disco\n\ EXIT\t\tConcluir CMD\n\n\ Introduzca HELP <comando> para más información sobre cualquiera de los comandos\nde arriba\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Fr.rc b/programs/cmd/Fr.rc index cc65abd..78f206d 100644 --- a/programs/cmd/Fr.rc +++ b/programs/cmd/Fr.rc
@@ -224,4 +224,8 @@ VOL\t\tAffiche le nom de volume d'un lecteur de disque\n\ EXIT\t\tQuitte CMD\n\n\ Entrez HELP <commande> pour plus d'informations sur les commandes ci-dessus\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Ja.rc b/programs/cmd/Ja.rc index 3e4f629..1937480 100644 --- a/programs/cmd/Ja.rc +++ b/programs/cmd/Ja.rc
@@ -228,4 +228,8 @@ VOL\t\tfBXNfoCXÌ{ [xð\¦\n\ EXIT\t\tCMDðI¹\n\n\ ãLÌR}hÉÖ·éÚ×ð\¦·éÉÍ HELP <R}h¼> Æü͵ĺ³¢B\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Ko.rc b/programs/cmd/Ko.rc index 32c6b51..fa6b83f 100644 --- a/programs/cmd/Ko.rc +++ b/programs/cmd/Ko.rc
@@ -219,4 +219,8 @@ VOL\t\tµð½ºÅ© ÀåÄ¡ÀÇ ºÒ·ý ¶óº§ º¸¿©ÁÖ±â\n\ EXIT\t\tCMD ´Ý±â\n\n\ HELP <¸í·É>À» Ä¡¸é ±× ¸í·ÉÀÇ »ó¼¼ÇÑ Á¤º¸¸¦ º¸¿©ÁÜ\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Nl.rc b/programs/cmd/Nl.rc index da09b09..8e8d1c4 100644 --- a/programs/cmd/Nl.rc +++ b/programs/cmd/Nl.rc
@@ -227,4 +227,8 @@ VOL\t\tToon het label van een schijf\n\ EXIT\t\tSluit CMD af\n\n\ type HELP <opdracht> voor meer informatie over bovengenoemde opdrachten\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/No.rc b/programs/cmd/No.rc index 2b01c47..c98dd15 100644 --- a/programs/cmd/No.rc +++ b/programs/cmd/No.rc
@@ -225,4 +225,8 @@ VOL\t\tViser volumnavnet til en stasjon\n\ EXIT\t\tAvslutter CMD\n\n\ Skriv «HELP <kommando>» for mer informasjon om kommandoene ovenfor\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Pl.rc b/programs/cmd/Pl.rc index b5a60eb..5b49433 100644 --- a/programs/cmd/Pl.rc +++ b/programs/cmd/Pl.rc
@@ -221,4 +221,8 @@ VOL\t\tWywietla etykietê dysku\n\ EXIT\t\tWy³¹cza CMD\n\n\ Wpisz HELP <komenda> dla dok³adniejszych informacji o komendzie\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Pt.rc b/programs/cmd/Pt.rc index 480e3d9..13a9b4c 100644 --- a/programs/cmd/Pt.rc +++ b/programs/cmd/Pt.rc
@@ -434,4 +434,8 @@ VOL\t\tMostra o rótulo do volume de uma unidade de disco\n\ EXIT\t\tFecha o CMD\n\n\ Digite HELP <comando> para mais informações sobre alguns dos comandos acima\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Ru.rc b/programs/cmd/Ru.rc index 61ab8ef..4118102 100644 --- a/programs/cmd/Ru.rc +++ b/programs/cmd/Ru.rc
@@ -225,4 +225,8 @@ VOL\t\tÏîêàçàòü ìåòêó òîìà äèñêîâîãî óñòðîéñòâà\n\ EXIT\t\tÂûéòè èç WCMD\n\n\ Âûïîëíèòå HELP <êîìàíäà> äëÿ äîïîëíèòåëüíîé èíôîðìàöèè ïî ïåðå÷èñëåííûì âûøå êîìàíäàì.\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Si.rc b/programs/cmd/Si.rc index a8fbb57..7623beb 100644 --- a/programs/cmd/Si.rc +++ b/programs/cmd/Si.rc
@@ -226,4 +226,8 @@ VOL\t\tShow the volume label of a disk device\n\ EXIT\t\tClose down CMD\n\n\ Enter HELP <command> for further information on any of the above commands\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
diff --git a/programs/cmd/Tr.rc b/programs/cmd/Tr.rc index 40c9fc2..bdecde3 100644 --- a/programs/cmd/Tr.rc +++ b/programs/cmd/Tr.rc
@@ -228,4 +228,8 @@ VOL\t\tDisk aygýtýnýn bölüm etiketini göster\n\ EXIT\t\tCMD'yi kapat\n\n\ Yukarýdaki komutlar hakkýnda daha fazla bilgi için HELP <komut> girin\n" + + WCMD_CONFIRM, "Are you sure" + WCMD_YES, "Y" + WCMD_NO, "N" }
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]); +}
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index d9127bf..f27824a 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h
@@ -80,6 +80,7 @@ void WCMD_strtrim_trailing_spaces (char *string); void WCMD_opt_s_strip_quotes(char *cmd); void WCMD_HandleTildaModifiers(char **start, char *forVariable); +BOOL WCMD_ask_confirm (char *message); /* Data structure to hold context when executing batch files */ @@ -154,5 +155,10 @@ extern const char version_string[]; extern const char anykey[]; +/* Translated messages */ +#define WCMD_CONFIRM 1001 +#define WCMD_YES 1002 +#define WCMD_NO 1003 + /* msdn specified max for Win XP */ #define MAXSTRING 8192