Jason Edmeades : cmd.exe: Add prompt for rd /s.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Feb 28 08:19:13 CST 2007


Module: wine
Branch: master
Commit: fda7229b50c06bb627761dbf6c76f54f641bfbb2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=fda7229b50c06bb627761dbf6c76f54f641bfbb2

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Tue Feb 27 23:18:57 2007 +0000

cmd.exe: Add prompt for rd /s.

---

 programs/cmd/Cs.rc      |    4 +++
 programs/cmd/De.rc      |    4 +++
 programs/cmd/En.rc      |    4 +++
 programs/cmd/Es.rc      |    4 +++
 programs/cmd/Fr.rc      |    4 +++
 programs/cmd/Ja.rc      |    4 +++
 programs/cmd/Ko.rc      |    4 +++
 programs/cmd/Nl.rc      |    4 +++
 programs/cmd/No.rc      |    4 +++
 programs/cmd/Pl.rc      |    4 +++
 programs/cmd/Pt.rc      |    4 +++
 programs/cmd/Ru.rc      |    4 +++
 programs/cmd/Si.rc      |    4 +++
 programs/cmd/Tr.rc      |    4 +++
 programs/cmd/builtins.c |   58 +++++++++++++++++++++++++++++++++++++++++++++-
 programs/cmd/wcmd.h     |    6 +++++
 16 files changed, 118 insertions(+), 2 deletions(-)

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 @@ VER\t\tZobrazí verzi CMD\n\
 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 @@ VOL\t\tZeigt die Bezeichnung eines Laufwerkes an\n\
 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 @@ VER\t\tShow the current version of CMD\n\
 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 @@ VER\t\tMostrar la versión actual de CMD\n\
 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 @@ VER\t\tAffiche la version de cmd actuellement en mémoire.\n\
 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 @@ VER\t\tCMD‚̃o[ƒWƒ‡ƒ“‚ð•\Ž¦\n\
 VOL\t\tƒfƒBƒXƒNƒfƒoƒCƒX‚̃{ƒŠƒ…[ƒ€ƒ‰ƒ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 @@ VER\t\tCMD ÇöÀç ¹öÁ¯ º¸¿©ÁÖ±â\n\
 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 @@ VER\t\tToon de versie van CMD\n\
 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 @@ VER\t\tViser CMDs versjonnummer\n\
 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 @@ VER\t\tWyœwietla wersjê CMD\n\
 VOL\t\tWyœwietla 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 @@ VER\t\tMostra a versão atual do CMD\n\
 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 @@ VER\t\tÏîêàçàòü òåêóùóþ âåðñèþ WCMD\n\
 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 @@ VER\t\tShow the current version of CMD\n\
 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 @@ VER\t\tGeçerli CMD sürümünü göster\n\
 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 @@ void WCMD_remove_dir (void) {
   /* 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 @@ void WCMD_endlocal (void) {
   }
   LocalFree (old);
   FreeEnvironmentStringsW (env);
-  
+
   /* restore old environment */
   env = temp->strings;
   len = 0;
@@ -1260,3 +1274,43 @@ void WCMD_exit (void) {
         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 @@ char *WCMD_strtrim_leading_spaces (char *string);
 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 newline[];
 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




More information about the wine-cvs mailing list