xcopy: Use wide-char string literals.

Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Michael Stefaniuc 2020-10-21 01:02:40 +02:00 committed by Alexandre Julliard
parent 78c2f08225
commit 73aed88c69
1 changed files with 20 additions and 37 deletions
programs/xcopy

View File

@ -63,10 +63,6 @@ typedef struct _EXCLUDELIST
static ULONG filesCopied = 0; /* Number of files copied */
static EXCLUDELIST *excludeList = NULL; /* Excluded strings list */
static FILETIME dateRange; /* Date range to copy after*/
static const WCHAR wchr_slash[] = {'\\', 0};
static const WCHAR wchr_star[] = {'*', 0};
static const WCHAR wchr_dot[] = {'.', 0};
static const WCHAR wchr_dotdot[] = {'.', '.', 0};
/* To minimize stack usage during recursion, some temporary variables
@ -81,11 +77,10 @@ static WCHAR copyTo[MAX_PATH];
* ========================================================================= */
static WCHAR *XCOPY_LoadMessage(UINT id) {
static WCHAR msg[MAXSTRING];
const WCHAR failedMsg[] = {'F', 'a', 'i', 'l', 'e', 'd', '!', 0};
if (!LoadStringW(GetModuleHandleW(NULL), id, msg, ARRAY_SIZE(msg))) {
WINE_FIXME("LoadString failed with %d\n", GetLastError());
lstrcpyW(msg, failedMsg);
lstrcpyW(msg, L"Failed!");
}
return msg;
}
@ -186,8 +181,7 @@ static void XCOPY_FailMessage(DWORD err) {
WINE_FIXME("FIXME: Cannot display message for error %d, status %d\n",
err, GetLastError());
} else {
const WCHAR infostr[] = {'%', '1', '\n', 0};
XCOPY_wprintf(infostr, lpMsgBuf);
XCOPY_wprintf(L"%1\n", lpMsgBuf);
LocalFree ((HLOCAL)lpMsgBuf);
}
}
@ -252,14 +246,13 @@ static BOOL XCOPY_ProcessExcludeFile(WCHAR* filename, WCHAR* endOfName) {
WCHAR endChar = *endOfName;
WCHAR buffer[MAXSTRING];
FILE *inFile = NULL;
const WCHAR readTextMode[] = {'r', 't', 0};
/* Null terminate the filename (temporarily updates the filename hence
parms not const) */
*endOfName = 0x00;
/* Open the file */
inFile = _wfopen(filename, readTextMode);
inFile = _wfopen(filename, L"rt");
if (inFile == NULL) {
XCOPY_wprintf(XCOPY_LoadMessage(STRING_OPENFAIL), filename);
*endOfName = endChar;
@ -371,8 +364,8 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
skipFile = FALSE;
/* Ignore . and .. */
if (lstrcmpW(finddata->cFileName, wchr_dot)==0 ||
lstrcmpW(finddata->cFileName, wchr_dotdot)==0 ||
if (lstrcmpW(finddata->cFileName, L".")==0 ||
lstrcmpW(finddata->cFileName, L"..")==0 ||
finddata->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
WINE_TRACE("Skipping directory, . or .. (%s)\n", wine_dbgstr_w(finddata->cFileName));
@ -606,7 +599,7 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
}
lstrcpyW(inputpath, srcstem);
lstrcatW(inputpath, wchr_star);
lstrcatW(inputpath, L"*");
findres = TRUE;
WINE_TRACE("Processing subdirs with spec: %s\n", wine_dbgstr_w(inputpath));
@ -615,20 +608,20 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
/* Only looking for dirs */
if ((finddata->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
(lstrcmpW(finddata->cFileName, wchr_dot) != 0) &&
(lstrcmpW(finddata->cFileName, wchr_dotdot) != 0)) {
(lstrcmpW(finddata->cFileName, L".") != 0) &&
(lstrcmpW(finddata->cFileName, L"..") != 0)) {
WINE_TRACE("Handling subdir: %s\n", wine_dbgstr_w(finddata->cFileName));
/* Make up recursive information */
lstrcpyW(inputpath, srcstem);
lstrcatW(inputpath, finddata->cFileName);
lstrcatW(inputpath, wchr_slash);
lstrcatW(inputpath, L"\\");
lstrcpyW(outputpath, deststem);
if (*destspec == 0x00) {
lstrcatW(outputpath, finddata->cFileName);
lstrcatW(outputpath, wchr_slash);
lstrcatW(outputpath, L"\\");
}
XCOPY_DoCopy(inputpath, srcspec, outputpath, destspec, flags);
@ -713,7 +706,6 @@ static void strip_quotes(WCHAR *word, WCHAR **end)
static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
WCHAR *supplieddestination, DWORD *pflags)
{
const WCHAR EXCLUDE[] = {'E', 'X', 'C', 'L', 'U', 'D', 'E', ':', 0};
DWORD flags = *pflags;
WCHAR *cmdline, *word, *end, *next;
int rc = RC_INITERROR;
@ -781,10 +773,8 @@ static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
OPT_REMOVEARCH; break;
/* E can be /E or /EXCLUDE */
case 'E': if (CompareStringW(LOCALE_USER_DEFAULT,
NORM_IGNORECASE | SORT_STRINGSORT,
&word[1], 8,
EXCLUDE, -1) == CSTR_EQUAL) {
case 'E': if (CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT,
&word[1], 8, L"EXCLUDE:", -1) == CSTR_EQUAL) {
if (XCOPY_ProcessExcludeList(&word[9])) {
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
goto out;
@ -889,7 +879,7 @@ static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
/* Default the destination if not supplied */
if (supplieddestination[0] == 0x00)
lstrcpyW(supplieddestination, wchr_dot);
lstrcpyW(supplieddestination, L".");
*pflags = flags;
rc = RC_OK;
@ -959,10 +949,9 @@ static int XCOPY_ProcessSourceParm(WCHAR *suppliedsource, WCHAR *stem,
WINE_TRACE("Directory supplied\n");
lstrcpyW(stem, suppliedsource);
lastChar = stem[lstrlenW(stem)-1];
if (lastChar != '\\' && lastChar != ':') {
lstrcatW(stem, wchr_slash);
}
lstrcpyW(spec, wchr_star);
if (lastChar != '\\' && lastChar != ':')
lstrcatW(stem, L"\\");
lstrcpyW(spec, L"*");
/* File or wildcard search:
stem should be:
@ -1062,9 +1051,8 @@ static int XCOPY_ProcessDestParm(WCHAR *supplieddestination, WCHAR *stem, WCHAR
*spec = 0x00;
/* Ensure ends with a '\' */
if (stem[lstrlenW(stem)-1] != '\\') {
lstrcatW(stem, wchr_slash);
}
if (stem[lstrlenW(stem)-1] != '\\')
lstrcatW(stem, L"\\");
} else {
WCHAR drive[MAX_PATH];
@ -1097,16 +1085,11 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
WCHAR destinationspec[MAX_PATH] = {0}; /* Filespec of destination */
WCHAR copyCmd[MAXSTRING]; /* COPYCMD env var */
DWORD flags = 0; /* Option flags */
const WCHAR PROMPTSTR1[] = {'/', 'Y', 0};
const WCHAR PROMPTSTR2[] = {'/', 'y', 0};
const WCHAR COPYCMD[] = {'C', 'O', 'P', 'Y', 'C', 'M', 'D', 0};
/* Preinitialize flags based on COPYCMD */
if (GetEnvironmentVariableW(COPYCMD, copyCmd, MAXSTRING)) {
if (wcsstr(copyCmd, PROMPTSTR1) != NULL ||
wcsstr(copyCmd, PROMPTSTR2) != NULL) {
if (GetEnvironmentVariableW(L"COPYCMD", copyCmd, MAXSTRING)) {
if (wcsstr(copyCmd, L"/Y") != NULL || wcsstr(copyCmd, L"/y") != NULL)
flags |= OPT_NOPROMPT;
}
}
/* FIXME: On UNIX, files starting with a '.' are treated as hidden under