Jason Edmeades : cmd.exe: Prompt during del *.* and del *.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Feb 28 08:19:13 CST 2007
Module: wine
Branch: master
Commit: 409368eb4c9be42ddb7c4299bfa0ae008e323408
URL: http://source.winehq.org/git/wine.git/?a=commit;h=409368eb4c9be42ddb7c4299bfa0ae008e323408
Author: Jason Edmeades <us at edmeades.me.uk>
Date: Tue Feb 27 23:19:24 2007 +0000
cmd.exe: Prompt during del *.* and del *.
---
programs/cmd/batch.c | 6 +++---
programs/cmd/builtins.c | 29 +++++++++++++++++++++++++++++
programs/cmd/wcmd.h | 1 +
3 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/programs/cmd/batch.c b/programs/cmd/batch.c
index 03ecdaf..5a854f7 100644
--- a/programs/cmd/batch.c
+++ b/programs/cmd/batch.c
@@ -230,8 +230,8 @@ char *p;
return p;
}
-/* _splitpath - copied from winefile as no obvious way to use it otherwise */
-void _splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext)
+/* WCMD_splitpath - copied from winefile as no obvious way to use it otherwise */
+void WCMD_splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext)
{
const CHAR* end; /* end of processed string */
const CHAR* p; /* search pointer */
@@ -528,7 +528,7 @@ void WCMD_HandleTildaModifiers(char **start, char *forVariable) {
if (finaloutput[0] != 0x00) strcat(finaloutput, " ");
/* Split into components */
- _splitpath(fullfilename, drive, dir, fname, ext);
+ WCMD_splitpath(fullfilename, drive, dir, fname, ext);
/* 5. Handle 'd' : Drive Letter */
if (memchr(firstModifier, 'd', modifierLen) != NULL) {
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 500c27e..771bcbb 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -237,6 +237,35 @@ char *p;
WCMD_output ("Argument missing\n");
return;
}
+
+ /* If filename part of parameter is * or *.*, prompt unless
+ /Q supplied. */
+ if (strstr (quals, "/Q") == NULL) {
+
+ char drive[10];
+ char dir[MAX_PATH];
+ char fname[MAX_PATH];
+ char ext[MAX_PATH];
+
+ /* Convert path into actual directory spec */
+ GetFullPathName (param1, sizeof(fpath), fpath, NULL);
+ WCMD_splitpath(fpath, drive, dir, fname, ext);
+
+ /* Only prompt for * and *.*, not *a, a*, *.a* etc */
+ if ((strcmp(fname, "*") == 0) &&
+ (*ext == 0x00 || (strcmp(ext, ".*") == 0))) {
+ BOOL ok;
+ char question[MAXSTRING];
+
+ /* Ask for confirmation */
+ sprintf(question, "%s, ", fpath);
+ ok = WCMD_ask_confirm(question);
+
+ /* Abort if answer is 'N' */
+ if (!ok) return;
+ }
+ }
+
hff = FindFirstFile (param1, &fd);
if (hff == INVALID_HANDLE_VALUE) {
WCMD_output ("%s :File Not Found\n",param1);
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index f27824a..75079f1 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -82,6 +82,7 @@ void WCMD_opt_s_strip_quotes(char *cmd);
void WCMD_HandleTildaModifiers(char **start, char *forVariable);
BOOL WCMD_ask_confirm (char *message);
+void WCMD_splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext);
/* Data structure to hold context when executing batch files */
More information about the wine-cvs
mailing list