[PATCH 05/18] XCOPY: Add support for COPYCMD override and fix /-y
Jason Edmeades
us at edmeades.me.uk
Thu Mar 29 16:21:03 CDT 2007
---
programs/xcopy/xcopy.c | 18 +++++++++++++++++-
1 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/programs/xcopy/xcopy.c b/programs/xcopy/xcopy.c
index 25995f2..0342d39 100644
--- a/programs/xcopy/xcopy.c
+++ b/programs/xcopy/xcopy.c
@@ -50,6 +50,8 @@
#define OPT_NOCOPY 0x00000080
#define OPT_NOPROMPT 0x00000100
+#define MAXSTRING 8192
+
WINE_DEFAULT_DEBUG_CHANNEL(xcopy);
/* Prototypes */
@@ -91,8 +93,13 @@ int main (int argc, char *argv[])
WCHAR sourcespec[MAX_PATH] = {0}; /* Filespec of source */
WCHAR destinationstem[MAX_PATH] = {0}; /* Stem of destination */
WCHAR destinationspec[MAX_PATH] = {0}; /* Filespec of destination */
+ WCHAR copyCmd[MAXSTRING]; /* COPYCMD env var */
DWORD flags = 0; /* Option flags */
LPWSTR *argvW = NULL;
+ const WCHAR PROMPTSTR1[] = {'/', 'Y', 0};
+ const WCHAR PROMPTSTR2[] = {'/', 'y', 0};
+ const WCHAR COPYCMD[] = {'C', 'O', 'P', 'Y', 'C', 'M', 'D', 0};
+
/*
* Parse the command line
*/
@@ -106,6 +113,14 @@ int main (int argc, char *argv[])
return RC_INITERROR;
}
+ /* Preinitialize flags based on COPYCMD */
+ if (GetEnvironmentVariable(COPYCMD, copyCmd, MAXSTRING)) {
+ if (wcsstr(copyCmd, PROMPTSTR1) != NULL ||
+ wcsstr(copyCmd, PROMPTSTR2) != NULL) {
+ flags |= OPT_NOPROMPT;
+ }
+ }
+
/* Skip first arg, which is the program name */
argvW++;
@@ -136,7 +151,8 @@ int main (int argc, char *argv[])
case 'W': flags |= OPT_PAUSE; break;
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
case 'Y': flags |= OPT_NOPROMPT; break;
- case '-': if (argvW[0][2]=='Y') flags &= ~OPT_NOPROMPT; break;
+ case '-': if (toupper(argvW[0][2])=='Y')
+ flags &= ~OPT_NOPROMPT; break;
default:
WINE_FIXME("Unhandled parameter '%s'\n", wine_dbgstr_w(*argvW));
}
--
1.5.0
More information about the wine-patches
mailing list