xcopy: Add support for COPYCMD override and fix /-y.
This commit is contained in:
parent
70fe414c2a
commit
30fcdd9f07
|
@ -50,6 +50,8 @@
|
||||||
#define OPT_NOCOPY 0x00000080
|
#define OPT_NOCOPY 0x00000080
|
||||||
#define OPT_NOPROMPT 0x00000100
|
#define OPT_NOPROMPT 0x00000100
|
||||||
|
|
||||||
|
#define MAXSTRING 8192
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(xcopy);
|
WINE_DEFAULT_DEBUG_CHANNEL(xcopy);
|
||||||
|
|
||||||
/* Prototypes */
|
/* Prototypes */
|
||||||
|
@ -91,8 +93,13 @@ int main (int argc, char *argv[])
|
||||||
WCHAR sourcespec[MAX_PATH] = {0}; /* Filespec of source */
|
WCHAR sourcespec[MAX_PATH] = {0}; /* Filespec of source */
|
||||||
WCHAR destinationstem[MAX_PATH] = {0}; /* Stem of destination */
|
WCHAR destinationstem[MAX_PATH] = {0}; /* Stem of destination */
|
||||||
WCHAR destinationspec[MAX_PATH] = {0}; /* Filespec of destination */
|
WCHAR destinationspec[MAX_PATH] = {0}; /* Filespec of destination */
|
||||||
|
WCHAR copyCmd[MAXSTRING]; /* COPYCMD env var */
|
||||||
DWORD flags = 0; /* Option flags */
|
DWORD flags = 0; /* Option flags */
|
||||||
LPWSTR *argvW = NULL;
|
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
|
* Parse the command line
|
||||||
*/
|
*/
|
||||||
|
@ -106,6 +113,14 @@ int main (int argc, char *argv[])
|
||||||
return RC_INITERROR;
|
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 */
|
/* Skip first arg, which is the program name */
|
||||||
argvW++;
|
argvW++;
|
||||||
|
|
||||||
|
@ -136,7 +151,8 @@ int main (int argc, char *argv[])
|
||||||
case 'W': flags |= OPT_PAUSE; break;
|
case 'W': flags |= OPT_PAUSE; break;
|
||||||
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
|
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
|
||||||
case 'Y': flags |= OPT_NOPROMPT; 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:
|
default:
|
||||||
WINE_FIXME("Unhandled parameter '%s'\n", wine_dbgstr_w(*argvW));
|
WINE_FIXME("Unhandled parameter '%s'\n", wine_dbgstr_w(*argvW));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue