Module: wine Branch: master Commit: fda7229b50c06bb627761dbf6c76f54f641bfbb2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fda7229b50c06bb627761dbf6c...
Author: Jason Edmeades us@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