From 0ea11294abfcd69123143e7c48eef1fd23ba1ebe Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 30 Jul 2021 12:29:06 -0700 Subject: [PATCH] fixes for crcfix Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/Crcfix/crcfix.cpp | 87 +++++++++++++++++--------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/Code/Framework/Crcfix/crcfix.cpp b/Code/Framework/Crcfix/crcfix.cpp index ce599e9a63..778b9e2185 100644 --- a/Code/Framework/Crcfix/crcfix.cpp +++ b/Code/Framework/Crcfix/crcfix.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -23,11 +24,11 @@ int g_longestFixTimeMs = 0; class Filename { - char fullpath[MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; + wchar_t fullpath[MAX_PATH]; + wchar_t drive[_MAX_DRIVE]; + wchar_t dir[_MAX_DIR]; + wchar_t fname[_MAX_FNAME]; + wchar_t ext[_MAX_EXT]; public: Filename() @@ -35,21 +36,21 @@ public: fullpath[0] = drive[0] = dir[0] = fname[0] = ext[0] = 0; } - Filename(const AZStd::string& filename) + Filename(const AZStd::wstring& filename) { - _splitpath(filename.c_str(), drive, dir, fname, ext); - strcpy(fullpath, filename.c_str()); + _wsplitpath(filename.c_str(), drive, dir, fname, ext); + wcscpy(fullpath, filename.c_str()); } - void SetExt(const char* pExt) { strcpy(ext, pExt); _makepath(fullpath, drive, dir, fname, pExt); } - const char* GetFullPath() const { return fullpath; } - bool Exists() const { return _access(fullpath, 0) == 0; } - bool IsReadOnly() const { return _access(fullpath, 6) == -1; } - bool SetReadOnly() const { return _chmod(fullpath, _S_IREAD) == 0; } - bool SetWritable() const { return _chmod(fullpath, _S_IREAD | _S_IWRITE) == 0; } - bool Delete() const { return remove(fullpath) == 0; } - bool Rename(const char* fn2) const { return MoveFileEx(fullpath, fn2, MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING) == 0; } - bool Copy(const char* dest) const { return ::CopyFileA(fullpath, dest, FALSE) == TRUE; } + void SetExt(const wchar_t* pExt) { wcscpy(ext, pExt); _wmakepath(fullpath, drive, dir, fname, pExt); } + const wchar_t* GetFullPath() const { return fullpath; } + bool Exists() const { return _waccess(fullpath, 0) == 0; } + bool IsReadOnly() const { return _waccess(fullpath, 6) == -1; } + bool SetReadOnly() const { return _wchmod(fullpath, _S_IREAD) == 0; } + bool SetWritable() const { return _wchmod(fullpath, _S_IREAD | _S_IWRITE) == 0; } + bool Delete() const { return _wremove(fullpath) == 0; } + bool Rename(const wchar_t* fn2) const{ return MoveFileEx(fullpath, fn2, MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING) == 0; } + bool Copy(const wchar_t* dest) const { return ::CopyFile(fullpath, dest, FALSE) == TRUE; } }; class CRCfix @@ -64,7 +65,7 @@ public: int Fix(Filename srce); }; -void FixFiles(const AZStd::string& dir, const AZStd::string& files, FILETIME* pLastRun, bool verbose, int& nFound, int& nProcessed, int& nFixed, int& nFailed) +void FixFiles(const AZStd::wstring& dir, const AZStd::wstring& files, FILETIME* pLastRun, bool verbose, int& nFound, int& nProcessed, int& nFixed, int& nFailed) { CRCfix fixer; WIN32_FIND_DATA wfd; @@ -78,14 +79,14 @@ void FixFiles(const AZStd::string& dir, const AZStd::string& files, FILETIME* pL { if (verbose) { - AZ_TracePrintf("CrcFix", "\tProcessing %s ...", wfd.cFileName); + AZ_TracePrintf("CrcFix", "\tProcessing %ls ...", wfd.cFileName); } nFound++; int n = 0; if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0 && (!pLastRun || CompareFileTime(pLastRun, &wfd.ftLastWriteTime) <= 0)) { - n = fixer.Fix(Filename(dir + "\\" + wfd.cFileName)); + n = fixer.Fix(Filename(dir + L"\\" + wfd.cFileName)); nProcessed++; } if (n < 0) @@ -110,11 +111,11 @@ void FixFiles(const AZStd::string& dir, const AZStd::string& files, FILETIME* pL FindClose(hFind); } -void FixDirectories(const AZStd::string& dirs, const AZStd::string& files, FILETIME* pLastRun, bool verbose, int& nFound, int& nProcessed, int& nFixed, int& nFailed) +void FixDirectories(const AZStd::wstring& dirs, const AZStd::wstring& files, FILETIME* pLastRun, bool verbose, int& nFound, int& nProcessed, int& nFixed, int& nFailed) { if (verbose) { - AZ_TracePrintf("CrcFix", "Processing %s ...\n", dirs.c_str()); + AZ_TracePrintf("CrcFix", "Processing %ls ...\n", dirs.c_str()); } // do files @@ -123,7 +124,7 @@ void FixDirectories(const AZStd::string& dirs, const AZStd::string& files, FILET // do folders WIN32_FIND_DATA wfd; HANDLE hFind; - hFind = FindFirstFile((dirs + "\\*").c_str(), &wfd); + hFind = FindFirstFile((dirs + L"\\*").c_str(), &wfd); if (hFind != INVALID_HANDLE_VALUE) { do @@ -134,7 +135,7 @@ void FixDirectories(const AZStd::string& dirs, const AZStd::string& files, FILET { continue; } - FixDirectories(AZStd::string(dirs + "\\" + wfd.cFileName), files, pLastRun, verbose, nFound, nProcessed, nFixed, nFailed); + FixDirectories(AZStd::wstring(dirs + L"\\" + wfd.cFileName), files, pLastRun, verbose, nFound, nProcessed, nFixed, nFailed); } } while (FindNextFile(hFind, &wfd)); } @@ -161,9 +162,9 @@ int main(int argc, char* argv[]) char root[MAX_PATH]; AZ::Utils::GetExecutableDirectory(root, MAX_PATH); - AZStd::vector entries; + AZStd::vector entries; - const char* logfilename = NULL; + AZStd::wstring logfilename; FILETIME lastRun; FILETIME* pLastRun = NULL; @@ -176,10 +177,12 @@ int main(int argc, char* argv[]) { continue; } + AZStd::wstring pArgW; + AZStd::to_wstring(pArgW, pArg); if (_strnicmp(pArg, "-log:", 5) == 0) { - logfilename = pArg + 5; - HANDLE hFile = CreateFile(logfilename, 0, 0, NULL, OPEN_EXISTING, 0, NULL); + logfilename.assign(pArgW.begin() + 5, pArgW.end()); + HANDLE hFile = CreateFile(logfilename.data(), 0, 0, NULL, OPEN_EXISTING, 0, NULL); if (hFile != INVALID_HANDLE_VALUE) { pLastRun = &lastRun; @@ -193,7 +196,7 @@ int main(int argc, char* argv[]) } else { - entries.push_back(AZStd::string(pArg)); + entries.emplace_back(AZStd::move(pArgW)); } } @@ -202,10 +205,10 @@ int main(int argc, char* argv[]) int nProcessed = 0; int nFixed = 0; int nFailed = 0; - for (AZStd::vector::const_iterator iEntry = entries.begin(); iEntry != entries.end(); ++iEntry) + for (AZStd::vector::const_iterator iEntry = entries.begin(); iEntry != entries.end(); ++iEntry) { - AZStd::string entry = (iEntry->at(0) == '\\' || iEntry->find(":") != iEntry->npos) ? *iEntry : AZStd::string(root) + "\\" + *iEntry; - AZStd::string::size_type split = entry.find("*\\"); + AZStd::wstring entry = (iEntry->at(0) == L'\\' || iEntry->find(L":") != iEntry->npos) ? *iEntry : AZStd::wstring(root) + L"\\" + *iEntry; + AZStd::wstring::size_type split = entry.find(L"*\\"); bool doSubdirs = split != entry.npos; if (doSubdirs) { @@ -213,7 +216,7 @@ int main(int argc, char* argv[]) } else { - split = entry.rfind("\\"); + split = entry.rfind(L"\\"); if (split == entry.npos) { split = 0; @@ -223,9 +226,9 @@ int main(int argc, char* argv[]) } // update timestamp - if (logfilename) + if (!logfilename.empty()) { - HANDLE hFile = CreateFile(logfilename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); + HANDLE hFile = CreateFile(logfilename.data(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); GetSystemTimeAsFileTime(&lastRun); SetFileTime(hFile, NULL, NULL, &lastRun); char log[1024]; @@ -383,12 +386,12 @@ int CRCfix::Fix(Filename srce) bool changed = false; Filename dest(srce); - dest.SetExt("xxx"); + dest.SetExt(L"xxx"); linenum = 0; - FILE* infile = fopen(srce.GetFullPath(), "r"); - FILE* outfile = fopen(dest.GetFullPath(), "w"); + FILE* infile = _wfopen(srce.GetFullPath(), L"r"); + FILE* outfile = _wfopen(dest.GetFullPath(), L"w"); if (!infile || !outfile) { @@ -475,7 +478,7 @@ int CRCfix::Fix(Filename srce) if (changed) { Filename backup(srce); - backup.SetExt("crcfix_old"); + backup.SetExt(L"crcfix_old"); if (backup.Exists()) { @@ -486,7 +489,7 @@ int CRCfix::Fix(Filename srce) if (!srce.Copy(backup.GetFullPath())) { - AZ_TracePrintf("CrcFix", "Failed to copy %s to %s\n", srce, backup); + AZ_TracePrintf("CrcFix", "Failed to copy %ls to %ls\n", srce, backup); int dt = static_cast(AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now() - startTime).count()); g_totalFixTimeMs += dt; @@ -500,7 +503,7 @@ int CRCfix::Fix(Filename srce) if (!dest.Rename(srce.GetFullPath())) { - AZ_TracePrintf("CrcFix", "Failed to rename %s to %s\n", dest, srce); + AZ_TracePrintf("CrcFix", "Failed to rename %ls to %ls\n", dest, srce); int dt = static_cast(AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now() - startTime).count()); g_totalFixTimeMs += dt; @@ -514,7 +517,7 @@ int CRCfix::Fix(Filename srce) if (!backup.Delete()) { - AZ_TracePrintf("CrcFix", "Failed to delete %s\n", backup); + AZ_TracePrintf("CrcFix", "Failed to delete %ls\n", backup); } } else