From a37056499d9d71dcad002ddb6668ffcb15f936af Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 31 Aug 2020 21:22:45 +0300 Subject: Plugin Updater: - folder creation moved to CreateWorkFolders(); - TFileName type added to simplify life with C types; - code cleaning; --- plugins/PluginUpdater/src/DlgListNew.cpp | 96 ++++++------- plugins/PluginUpdater/src/DlgUpdate.cpp | 210 ++++++++++++++-------------- plugins/PluginUpdater/src/Events.cpp | 12 +- plugins/PluginUpdater/src/Notifications.cpp | 14 +- plugins/PluginUpdater/src/Options.cpp | 6 +- plugins/PluginUpdater/src/PluginUpdater.cpp | 8 +- plugins/PluginUpdater/src/Utils.cpp | 87 +++++++----- plugins/PluginUpdater/src/checksum.cpp | 4 +- plugins/PluginUpdater/src/stdafx.h | 32 +++-- plugins/PluginUpdater/src/unzipfile.cpp | 48 +++---- 10 files changed, 260 insertions(+), 257 deletions(-) (limited to 'plugins/PluginUpdater') diff --git a/plugins/PluginUpdater/src/DlgListNew.cpp b/plugins/PluginUpdater/src/DlgListNew.cpp index 8703fafc7a..13f116333e 100644 --- a/plugins/PluginUpdater/src/DlgListNew.cpp +++ b/plugins/PluginUpdater/src/DlgListNew.cpp @@ -29,8 +29,8 @@ bool FILEINFO::IsFiltered(const CMStringW &wszFilter) if (wszFilter.IsEmpty()) return false; - wchar_t pathLwr[MAX_PATH]; - wcsncpy_s(pathLwr, this->tszNewName, _TRUNCATE); + TFileName pathLwr; + wcsncpy_s(pathLwr, this->wszNewName, _TRUNCATE); wcslwr(pathLwr); return wcsstr(pathLwr, wszFilter) == 0; } @@ -56,12 +56,12 @@ static LRESULT CALLBACK PluginListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LP if (ListView_GetItem(hwnd, &lvi) && lvi.iGroupId == 1) { FILEINFO *info = (FILEINFO *)lvi.lParam; - wchar_t tszFileName[MAX_PATH]; - wcscpy(tszFileName, wcsrchr(info->tszNewName, L'\\') + 1); - wchar_t *p = wcschr(tszFileName, L'.'); *p = 0; + TFileName wszFileName; + wcscpy(wszFileName, wcsrchr(info->wszNewName, L'\\') + 1); + wchar_t *p = wcschr(wszFileName, L'.'); *p = 0; - wchar_t link[MAX_PATH]; - mir_snwprintf(link, PLUGIN_INFO_URL, tszFileName); + TFileName link; + mir_snwprintf(link, PLUGIN_INFO_URL, wszFileName); Utils_OpenUrlW(link); } } @@ -99,14 +99,14 @@ class CMissingPLuginsDlg : public CDlgBase continue; int groupId = 4; - if (wcschr(p->tszOldName, L'\\') != nullptr) - groupId = (wcsstr(p->tszOldName, L"Plugins") != nullptr) ? 1 : ((wcsstr(p->tszOldName, L"Languages") != nullptr) ? 3 : 2); + if (wcschr(p->wszOldName, L'\\') != nullptr) + groupId = (wcsstr(p->wszOldName, L"Plugins") != nullptr) ? 1 : ((wcsstr(p->wszOldName, L"Languages") != nullptr) ? 3 : 2); lvi.iItem = todo->indexOf(&p); lvi.lParam = (LPARAM)p; lvi.iGroupId = groupId; lvi.iImage = ((groupId == 1) ? 0 : -1); - lvi.pszText = p->tszOldName; + lvi.pszText = p->wszOldName; m_list.InsertItem(&lvi); if (p->bEnabled) { @@ -154,7 +154,7 @@ public: m_list.SetImageList(hIml, LVSIL_SMALL); if (IsWinVer7Plus()) { - wchar_t szPath[MAX_PATH]; + TFileName szPath; GetModuleFileNameW(nullptr, szPath, _countof(szPath)); wchar_t *ext = wcsrchr(szPath, '.'); if (ext != nullptr) @@ -294,15 +294,10 @@ public: AutoHandle pipe(hPipe); // create needed folders after escalating priviledges. Folders creates when we actually install updates - wchar_t tszFileTemp[MAX_PATH], tszFileBack[MAX_PATH]; + TFileName wszTempFolder, wszBackupFolder; + CreateWorkFolders(wszTempFolder, wszBackupFolder); - mir_snwprintf(tszFileBack, L"%s\\Backups", g_tszRoot); - SafeCreateDirectory(tszFileBack); - - mir_snwprintf(tszFileTemp, L"%s\\Temp", g_tszRoot); - SafeCreateDirectory(tszFileTemp); - - VARSW tszMirandaPath(L"%miranda_path%"); + VARSW wszMirandaPath(L"%miranda_path%"); HNETLIBCONN nlc = nullptr; int i = 0; @@ -317,9 +312,9 @@ public: if (DownloadFile(&p->File, nlc)) { m_list.SetItemText(i, 1, TranslateT("Succeeded.")); - if (!unzip(p->File.tszDiskPath, tszMirandaPath, tszFileBack, false)) - SafeDeleteFile(p->File.tszDiskPath); // remove .zip after successful update - db_unset(0, DB_MODULE_NEW_FILES, _T2A(p->tszOldName)); + if (!unzip(p->File.wszDiskPath, wszMirandaPath, wszBackupFolder, false)) + SafeDeleteFile(p->File.wszDiskPath); // remove .zip after successful update + db_unset(0, DB_MODULE_NEW_FILES, _T2A(p->wszOldName)); } else m_list.SetItemText(i, 1, TranslateT("Failed!")); } @@ -355,35 +350,35 @@ static void __stdcall LaunchListDialog(void *param) (new CMissingPLuginsDlg((OBJLIST *)param))->Show(); } -static FILEINFO* ServerEntryToFileInfo(const ServListEntry &hash, const wchar_t* tszBaseUrl, const wchar_t* tszPath) +static FILEINFO* ServerEntryToFileInfo(const ServListEntry &hash, const wchar_t* pwszBaseUrl, const wchar_t* pwszPath) { FILEINFO *FileInfo = new FILEINFO; FileInfo->bDeleteOnly = FALSE; // copy the relative old name - wcsncpy_s(FileInfo->tszOldName, hash.m_name, _TRUNCATE); - wcsncpy_s(FileInfo->tszNewName, hash.m_name, _TRUNCATE); + wcsncpy_s(FileInfo->wszOldName, hash.m_name, _TRUNCATE); + wcsncpy_s(FileInfo->wszNewName, hash.m_name, _TRUNCATE); - wchar_t tszFileName[MAX_PATH]; - wcsncpy_s(tszFileName, wcsrchr(tszPath, L'\\') + 1, _TRUNCATE); - if (auto *tp = wcschr(tszFileName, L'.')) + TFileName wszFileName; + wcsncpy_s(wszFileName, wcsrchr(pwszPath, L'\\') + 1, _TRUNCATE); + if (auto *tp = wcschr(wszFileName, L'.')) *tp = 0; - wchar_t tszRelFileName[MAX_PATH]; - wcsncpy_s(tszRelFileName, hash.m_name, _TRUNCATE); - if (auto *tp = wcsrchr(tszRelFileName, L'.')) + TFileName wszRelFileName; + wcsncpy_s(wszRelFileName, hash.m_name, _TRUNCATE); + if (auto *tp = wcsrchr(wszRelFileName, L'.')) *tp = 0; - if (auto *tp = wcschr(tszRelFileName, L'\\')) - wcslwr((tp) ? tp+1 : tszRelFileName); + if (auto *tp = wcschr(wszRelFileName, L'\\')) + wcslwr((tp) ? tp+1 : wszRelFileName); - mir_snwprintf(FileInfo->File.tszDiskPath, L"%s\\Temp\\%s.zip", g_tszRoot, tszFileName); - mir_snwprintf(FileInfo->File.tszDownloadURL, L"%s/%s.zip", tszBaseUrl, tszRelFileName); - for (auto *tp = wcschr(FileInfo->File.tszDownloadURL, '\\'); tp != nullptr; tp = wcschr(tp, '\\')) + mir_snwprintf(FileInfo->File.wszDiskPath, L"%s\\Temp\\%s.zip", g_wszRoot, wszFileName); + mir_snwprintf(FileInfo->File.wszDownloadURL, L"%s/%s.zip", pwszBaseUrl, wszRelFileName); + for (auto *tp = wcschr(FileInfo->File.wszDownloadURL, '\\'); tp != nullptr; tp = wcschr(tp, '\\')) *tp++ = '/'; FileInfo->File.CRCsum = hash.m_crc; // Load list of checked Plugins from database - Netlib_LogfW(hNetlibUser, L"File %s found", FileInfo->tszOldName); - FileInfo->bEnabled = db_get_b(0, DB_MODULE_NEW_FILES, _T2A(FileInfo->tszOldName)) != 0; + Netlib_LogfW(hNetlibUser, L"File %s found", FileInfo->wszOldName); + FileInfo->bEnabled = db_get_b(0, DB_MODULE_NEW_FILES, _T2A(FileInfo->wszOldName)) != 0; return FileInfo; } @@ -394,10 +389,10 @@ static void GetList(void *) { Thread_SetName("PluginUpdater: GetList"); - wchar_t tszTempPath[MAX_PATH]; - DWORD dwLen = GetTempPath(_countof(tszTempPath), tszTempPath); - if (tszTempPath[dwLen - 1] == '\\') - tszTempPath[dwLen - 1] = 0; + TFileName wszTempPath; + DWORD dwLen = GetTempPath(_countof(wszTempPath), wszTempPath); + if (wszTempPath[dwLen - 1] == '\\') + wszTempPath[dwLen - 1] = 0; ptrW updateUrl(GetDefaultUrl()), baseUrl; SERVLIST hashes(50, CompareHashes); @@ -410,11 +405,11 @@ static void GetList(void *) VARSW dirname(L"%miranda_path%"); for (auto &it : hashes) { - wchar_t tszPath[MAX_PATH]; - mir_snwprintf(tszPath, L"%s\\%s", dirname.get(), it->m_name); + TFileName pwszPath; + mir_snwprintf(pwszPath, L"%s\\%s", dirname.get(), it->m_name); - if (GetFileAttributes(tszPath) == INVALID_FILE_ATTRIBUTES) { - FILEINFO *FileInfo = ServerEntryToFileInfo(*it, baseUrl, tszPath); + if (GetFileAttributes(pwszPath) == INVALID_FILE_ATTRIBUTES) { + FILEINFO *FileInfo = ServerEntryToFileInfo(*it, baseUrl, pwszPath); UpdateFiles->insert(FileInfo); } } @@ -472,7 +467,7 @@ static INT_PTR ParseUriService(WPARAM, LPARAM lParam) if (p == nullptr) return 1; - wchar_t pluginPath[MAX_PATH]; + TFileName pluginPath; mir_wstrcpy(pluginPath, p + 1); p = wcschr(pluginPath, '/'); if (p) *p = '\\'; @@ -492,14 +487,13 @@ static INT_PTR ParseUriService(WPARAM, LPARAM lParam) return 0; VARSW dirName(L"%miranda_path%"); - wchar_t tszPath[MAX_PATH]; - mir_snwprintf(tszPath, L"%s\\%s", dirName.get(), hash->m_name); - FILEINFO *fileInfo = ServerEntryToFileInfo(*hash, baseUrl, tszPath); + TFileName pwszPath; + mir_snwprintf(pwszPath, L"%s\\%s", dirName.get(), hash->m_name); + FILEINFO *fileInfo = ServerEntryToFileInfo(*hash, baseUrl, pwszPath); FILELIST *fileList = new FILELIST(1); fileList->insert(fileInfo); CallFunctionAsync(LaunchListDialog, fileList); - return 0; } diff --git a/plugins/PluginUpdater/src/DlgUpdate.cpp b/plugins/PluginUpdater/src/DlgUpdate.cpp index 7b036cd70c..3d0b272284 100644 --- a/plugins/PluginUpdater/src/DlgUpdate.cpp +++ b/plugins/PluginUpdater/src/DlgUpdate.cpp @@ -44,16 +44,14 @@ class CUpdateDLg : public CDlgBase return; } - VARSW tszMirandaPath(L"%miranda_path%"); + VARSW wszMirandaPath(L"%miranda_path%"); { ThreadWatch threadId(pDlg->dwThreadId); AutoHandle pipe(hPipe); - //create needed folders after escalating priviledges. Folders creates when we actually install updates - wchar_t tszFileTemp[MAX_PATH], tszFileBack[MAX_PATH]; - mir_snwprintf(tszFileBack, L"%s\\Backups", g_tszRoot); - SafeCreateDirectory(tszFileBack); - mir_snwprintf(tszFileTemp, L"%s\\Temp", g_tszRoot); - SafeCreateDirectory(tszFileTemp); + + // Create needed folders after escalating priviledges. Folders creates when we actually install updates + TFileName wszTempFolder, wszBackupFolder; + CreateWorkFolders(wszTempFolder, wszBackupFolder); // 2) Download all plugins HNETLIBCONN nlc = nullptr; @@ -90,9 +88,9 @@ class CUpdateDLg : public CDlgBase if (it->bEnabled) { if (it->bDeleteOnly) { // we need only to backup the old file - wchar_t *ptszRelPath = it->tszNewName + wcslen(tszMirandaPath) + 1, tszBackFile[MAX_PATH]; - mir_snwprintf(tszBackFile, L"%s\\%s", tszFileBack, ptszRelPath); - if (dwErrorCode = BackupFile(it->tszNewName, tszBackFile)) { + TFileName wszBackFile; + mir_snwprintf(wszBackFile, L"%s\\%s", wszBackupFolder, it->wszNewName + wcslen(wszMirandaPath) + 1); + if (dwErrorCode = BackupFile(it->wszNewName, wszBackFile)) { LBL_Error: Skin_PlaySound("updatefailed"); CMStringW wszError(FORMAT, TranslateT("Unpack operation failed with error code=%d, update terminated"), dwErrorCode); @@ -104,18 +102,18 @@ LBL_Error: else { // if file name differs, we also need to backup the old file here // otherwise it would be replaced by unzip - if (_wcsicmp(it->tszOldName, it->tszNewName)) { - wchar_t tszSrcPath[MAX_PATH], tszBackFile[MAX_PATH]; - mir_snwprintf(tszSrcPath, L"%s\\%s", tszMirandaPath.get(), it->tszOldName); - mir_snwprintf(tszBackFile, L"%s\\%s", tszFileBack, it->tszOldName); - if (dwErrorCode = BackupFile(tszSrcPath, tszBackFile)) + if (_wcsicmp(it->wszOldName, it->wszNewName)) { + TFileName wszSrcPath, wszBackFile; + mir_snwprintf(wszSrcPath, L"%s\\%s", wszMirandaPath.get(), it->wszOldName); + mir_snwprintf(wszBackFile, L"%s\\%s", wszBackupFolder, it->wszOldName); + if (dwErrorCode = BackupFile(wszSrcPath, wszBackFile)) goto LBL_Error; } - if (dwErrorCode = unzip(it->File.tszDiskPath, tszMirandaPath, tszFileBack, true)) + if (dwErrorCode = unzip(it->File.wszDiskPath, wszMirandaPath, wszBackupFolder, true)) goto LBL_Error; - SafeDeleteFile(it->File.tszDiskPath); // remove .zip after successful update + SafeDeleteFile(it->File.wszDiskPath); // remove .zip after successful update } } } @@ -127,7 +125,7 @@ LBL_Error: CallService(MS_AB_BACKUP, 0, 0); if (g_plugin.bChangePlatform) { - wchar_t mirandaPath[MAX_PATH]; + TFileName mirandaPath; GetModuleFileName(nullptr, mirandaPath, _countof(mirandaPath)); g_plugin.setWString("OldBin2", mirandaPath); @@ -152,11 +150,11 @@ LBL_Error: pDlg->Close(); BOOL bRestartCurrentProfile = g_plugin.getBool("RestartCurrentProfile", true); if (g_plugin.bChangePlatform) { - wchar_t mirstartpath[MAX_PATH]; + TFileName mirstartpath; #ifdef _WIN64 - mir_snwprintf(mirstartpath, L"%s\\miranda32.exe", tszMirandaPath.get()); + mir_snwprintf(mirstartpath, L"%s\\miranda32.exe", wszMirandaPath.get()); #else - mir_snwprintf(mirstartpath, L"%s\\miranda64.exe", tszMirandaPath.get()); + mir_snwprintf(mirstartpath, L"%s\\miranda64.exe", wszMirandaPath.get()); #endif CallServiceSync(MS_SYSTEM_RESTART, bRestartCurrentProfile, (LPARAM)mirstartpath); } @@ -176,7 +174,7 @@ LBL_Error: for (auto &it : *m_todo) { m_list.SetCheckState(m_todo->indexOf(&it), bEnable); - CMStringA szSetting(it->tszOldName); + CMStringA szSetting(it->wszOldName); db_set_b(0, DB_MODULE_FILES, StrToLower(szSetting.GetBuffer()), it->bEnabled = bEnable); } } @@ -206,19 +204,19 @@ public: Window_SetIcon_IcoLib(m_hwnd, iconList[0].hIcolib); if (IsWinVerVistaPlus()) { - wchar_t szPath[MAX_PATH]; - GetModuleFileName(nullptr, szPath, _countof(szPath)); - wchar_t *ext = wcsrchr(szPath, '.'); + TFileName wszPath; + GetModuleFileName(nullptr, wszPath, _countof(wszPath)); + wchar_t *ext = wcsrchr(wszPath, '.'); if (ext != nullptr) *ext = '\0'; - wcscat(szPath, L".test"); - HANDLE hFile = CreateFile(szPath, GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + wcscat(wszPath, L".test"); + HANDLE hFile = CreateFileW(wszPath, GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile == INVALID_HANDLE_VALUE) // Running Windows Vista or later (major version >= 6). Button_SetElevationRequiredState(btnOk.GetHwnd(), !IsProcessElevated()); else { CloseHandle(hFile); - DeleteFile(szPath); + DeleteFileW(wszPath); } } @@ -268,12 +266,12 @@ public: for (auto &it : *m_todo) { LVITEM lvI = { 0 }; lvI.mask = LVIF_TEXT | LVIF_PARAM | LVIF_GROUPID | LVIF_NORECOMPUTE; - lvI.iGroupId = (wcsstr(it->tszOldName, L"Plugins") != nullptr) ? 1 : - ((wcsstr(it->tszOldName, L"Languages") != nullptr) ? 3 : - ((wcsstr(it->tszOldName, L"Icons") != nullptr) ? 4 : 2)); + lvI.iGroupId = (wcsstr(it->wszOldName, L"Plugins") != nullptr) ? 1 : + ((wcsstr(it->wszOldName, L"Languages") != nullptr) ? 3 : + ((wcsstr(it->wszOldName, L"Icons") != nullptr) ? 4 : 2)); lvI.iSubItem = 0; lvI.lParam = (LPARAM)it; - lvI.pszText = it->tszOldName; + lvI.pszText = it->wszOldName; lvI.iItem = m_todo->indexOf(&it); m_list.InsertItem(&lvI); @@ -328,7 +326,7 @@ public: m_list.GetItem(&lvI); FILEINFO *p = (FILEINFO *)lvI.lParam; - CMStringA szSetting(p->tszOldName); + CMStringA szSetting(p->wszOldName); db_set_b(0, DB_MODULE_FILES, StrToLower(szSetting.GetBuffer()), p->bEnabled = m_list.GetCheckState(nmlv->iItem)); // Toggle the Download button @@ -403,14 +401,10 @@ static void DlgUpdateSilent(void *param) } AutoHandle pipe(hPipe); - //create needed folders after escalating priviledges. Folders creates when we actually install updates - wchar_t tszFileTemp[MAX_PATH], tszFileBack[MAX_PATH]; - - mir_snwprintf(tszFileBack, L"%s\\Backups", g_tszRoot); - SafeCreateDirectory(tszFileBack); - mir_snwprintf(tszFileTemp, L"%s\\Temp", g_tszRoot); - SafeCreateDirectory(tszFileTemp); + // Create needed folders after escalating priviledges. Folders creates when we actually install updates + TFileName wszTempFolder, wszBackupFolder; + CreateWorkFolders(wszTempFolder, wszBackupFolder); // 2) Download all plugins HNETLIBCONN nlc = nullptr; @@ -441,14 +435,14 @@ static void DlgUpdateSilent(void *param) // 3) Unpack all zips DWORD dwErrorCode; - VARSW tszMirandaPath(L"%miranda_path%"); + VARSW wszMirandaPath(L"%miranda_path%"); for (auto &it : UpdateFiles) { if (it->bEnabled) { if (it->bDeleteOnly) { // we need only to backup the old file - wchar_t *ptszRelPath = it->tszNewName + wcslen(tszMirandaPath) + 1, tszBackFile[MAX_PATH]; - mir_snwprintf(tszBackFile, L"%s\\%s", tszFileBack, ptszRelPath); - if (dwErrorCode = BackupFile(it->tszNewName, tszBackFile)) { + TFileName wszBackFile; + mir_snwprintf(wszBackFile, L"%s\\%s", wszBackupFolder, it->wszNewName + wcslen(wszMirandaPath) + 1); + if (dwErrorCode = BackupFile(it->wszNewName, wszBackFile)) { LBL_Error: Skin_PlaySound("updatefailed"); delete &UpdateFiles; @@ -458,18 +452,18 @@ LBL_Error: else { // if file name differs, we also need to backup the old file here // otherwise it would be replaced by unzip - if (_wcsicmp(it->tszOldName, it->tszNewName)) { - wchar_t tszSrcPath[MAX_PATH], tszBackFile[MAX_PATH]; - mir_snwprintf(tszSrcPath, L"%s\\%s", tszMirandaPath.get(), it->tszOldName); - mir_snwprintf(tszBackFile, L"%s\\%s", tszFileBack, it->tszOldName); - if (dwErrorCode = BackupFile(tszSrcPath, tszBackFile)) + if (_wcsicmp(it->wszOldName, it->wszNewName)) { + TFileName wszSrcPath, wszBackFile; + mir_snwprintf(wszSrcPath, L"%s\\%s", wszMirandaPath.get(), it->wszOldName); + mir_snwprintf(wszBackFile, L"%s\\%s", wszBackupFolder, it->wszOldName); + if (dwErrorCode = BackupFile(wszSrcPath, wszBackFile)) goto LBL_Error; } // remove .zip after successful update - if (dwErrorCode = unzip(it->File.tszDiskPath, tszMirandaPath, tszFileBack, true)) + if (dwErrorCode = unzip(it->File.wszDiskPath, wszMirandaPath, wszBackupFolder, true)) goto LBL_Error; - SafeDeleteFile(it->File.tszDiskPath); + SafeDeleteFile(it->File.wszDiskPath); } } } @@ -493,13 +487,13 @@ LBL_Error: return; } - wchar_t tszTitle[100]; - mir_snwprintf(tszTitle, TranslateT("%d component(s) was updated"), count); + wchar_t wszTitle[100]; + mir_snwprintf(wszTitle, TranslateT("%d component(s) was updated"), count); if (Popup_Enabled()) - ShowPopup(tszTitle, TranslateT("You need to restart your Miranda to apply installed updates."), POPUP_TYPE_MSG); + ShowPopup(wszTitle, TranslateT("You need to restart your Miranda to apply installed updates."), POPUP_TYPE_MSG); else { - if (Clist_TrayNotifyW(MODULEA, tszTitle, TranslateT("You need to restart your Miranda to apply installed updates."), NIIF_INFO, 30000)) + if (Clist_TrayNotifyW(MODULEA, wszTitle, TranslateT("You need to restart your Miranda to apply installed updates."), NIIF_INFO, 30000)) // Error, let's try to show MessageBox as last way to inform user about successful update RestartPrompt(0); } @@ -605,18 +599,18 @@ static renameTable[] = // Checks if file needs to be renamed and copies it in pNewName // Returns true if smth. was copied -static bool CheckFileRename(const wchar_t *ptszOldName, wchar_t *pNewName) +static bool CheckFileRename(const wchar_t *pwszOldName, wchar_t *pNewName) { for (auto &it : renameTable) { - if (wildcmpiw(ptszOldName, it.oldName)) { - wchar_t *ptszDest = it.newName; - if (ptszDest == nullptr) + if (wildcmpiw(pwszOldName, it.oldName)) { + wchar_t *pwszDest = it.newName; + if (pwszDest == nullptr) *pNewName = 0; else { - wcsncpy_s(pNewName, MAX_PATH, ptszDest, _TRUNCATE); - size_t cbLen = wcslen(ptszDest) - 1; + wcsncpy_s(pNewName, MAX_PATH, pwszDest, _TRUNCATE); + size_t cbLen = wcslen(pwszDest) - 1; if (pNewName[cbLen] == '*') - wcsncpy_s(pNewName + cbLen, MAX_PATH - cbLen, ptszOldName, _TRUNCATE); + wcsncpy_s(pNewName + cbLen, MAX_PATH - cbLen, pwszOldName, _TRUNCATE); } return true; } @@ -628,100 +622,100 @@ static bool CheckFileRename(const wchar_t *ptszOldName, wchar_t *pNewName) ///////////////////////////////////////////////////////////////////////////////////////// // We only update ".dll", ".exe", ".txt" and ".bat" -static bool isValidExtension(const wchar_t *ptszFileName) +static bool isValidExtension(const wchar_t *pwszFileName) { - const wchar_t *pExt = wcsrchr(ptszFileName, '.'); + const wchar_t *pExt = wcsrchr(pwszFileName, '.'); return (pExt != nullptr) && (!_wcsicmp(pExt, L".dll") || !_wcsicmp(pExt, L".exe") || !_wcsicmp(pExt, L".txt") || !_wcsicmp(pExt, L".bat")); } // We only scan subfolders "Plugins", "Icons", "Languages", "Libs", "Core" -static bool isValidDirectory(const wchar_t *ptszDirName) +static bool isValidDirectory(const wchar_t *pwszDirName) { - return !_wcsicmp(ptszDirName, L"Plugins") || !_wcsicmp(ptszDirName, L"Icons") || !_wcsicmp(ptszDirName, L"Languages") || !_wcsicmp(ptszDirName, L"Libs") || !_wcsicmp(ptszDirName, L"Core"); + return !_wcsicmp(pwszDirName, L"Plugins") || !_wcsicmp(pwszDirName, L"Icons") || !_wcsicmp(pwszDirName, L"Languages") || !_wcsicmp(pwszDirName, L"Libs") || !_wcsicmp(pwszDirName, L"Core"); } // Scans folders recursively -static int ScanFolder(const wchar_t *tszFolder, size_t cbBaseLen, const wchar_t *tszBaseUrl, SERVLIST &hashes, OBJLIST *UpdateFiles, int level = 0) +static int ScanFolder(const wchar_t *pwszFolder, size_t cbBaseLen, const wchar_t *pwszBaseUrl, SERVLIST &hashes, OBJLIST *UpdateFiles, int level = 0) { - wchar_t tszBuf[MAX_PATH]; - mir_snwprintf(tszBuf, L"%s\\*", tszFolder); + TFileName wszBuf; + mir_snwprintf(wszBuf, L"%s\\*", pwszFolder); WIN32_FIND_DATA ffd; - HANDLE hFind = FindFirstFile(tszBuf, &ffd); + HANDLE hFind = FindFirstFile(wszBuf, &ffd); if (hFind == INVALID_HANDLE_VALUE) return 0; - Netlib_LogfW(hNetlibUser, L"Scanning folder %s", tszFolder); + Netlib_LogfW(hNetlibUser, L"Scanning folder %s", pwszFolder); int count = 0; do { - wchar_t tszNewName[MAX_PATH]; + TFileName wszNewName; if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // Scan recursively all subfolders if (isValidDirectory(ffd.cFileName)) { - mir_snwprintf(tszBuf, L"%s\\%s", tszFolder, ffd.cFileName); - count += ScanFolder(tszBuf, cbBaseLen, tszBaseUrl, hashes, UpdateFiles, level + 1); + mir_snwprintf(wszBuf, L"%s\\%s", pwszFolder, ffd.cFileName); + count += ScanFolder(wszBuf, cbBaseLen, pwszBaseUrl, hashes, UpdateFiles, level + 1); } continue; } if (isValidExtension(ffd.cFileName)) { - // calculate the current file's relative name and store it into tszNewName - if (CheckFileRename(ffd.cFileName, tszNewName)) { - Netlib_LogfW(hNetlibUser, L"File %s will be renamed to %s.", ffd.cFileName, tszNewName); + // calculate the current file's relative name and store it into wszNewName + if (CheckFileRename(ffd.cFileName, wszNewName)) { + Netlib_LogfW(hNetlibUser, L"File %s will be renamed to %s.", ffd.cFileName, wszNewName); // Yes, we need the old file name, because this will be hashed later - mir_snwprintf(tszBuf, L"%s\\%s", tszFolder, ffd.cFileName); + mir_snwprintf(wszBuf, L"%s\\%s", pwszFolder, ffd.cFileName); } else { if (level == 0) { // Rename Miranda*.exe - wcsncpy_s(tszNewName, g_plugin.bChangePlatform && !mir_wstrcmpi(ffd.cFileName, OLD_FILENAME) ? NEW_FILENAME : ffd.cFileName, _TRUNCATE); - mir_snwprintf(tszBuf, L"%s\\%s", tszFolder, tszNewName); + wcsncpy_s(wszNewName, g_plugin.bChangePlatform && !mir_wstrcmpi(ffd.cFileName, OLD_FILENAME) ? NEW_FILENAME : ffd.cFileName, _TRUNCATE); + mir_snwprintf(wszBuf, L"%s\\%s", pwszFolder, wszNewName); } else { - mir_snwprintf(tszNewName, L"%s\\%s", tszFolder + cbBaseLen, ffd.cFileName); - mir_snwprintf(tszBuf, L"%s\\%s", tszFolder, ffd.cFileName); + mir_snwprintf(wszNewName, L"%s\\%s", pwszFolder + cbBaseLen, ffd.cFileName); + mir_snwprintf(wszBuf, L"%s\\%s", pwszFolder, ffd.cFileName); } } } else { // the only exclusion is Libs\\libmdbx.mir if (level == 1 && !wcsicmp(ffd.cFileName, L"libmdbx.mir")) { - tszNewName[0] = 0; - mir_snwprintf(tszBuf, L"%s\\%s", tszFolder, ffd.cFileName); + wszNewName[0] = 0; + mir_snwprintf(wszBuf, L"%s\\%s", pwszFolder, ffd.cFileName); } else continue; // skip all another filea } - wchar_t *ptszUrl; + wchar_t *pwszUrl; int MyCRC; - bool bDeleteOnly = (tszNewName[0] == 0); + bool bDeleteOnly = (wszNewName[0] == 0); // this file is not marked for deletion if (!bDeleteOnly) { - wchar_t *pName = tszNewName; + wchar_t *pName = wszNewName; ServListEntry *item = hashes.find((ServListEntry*)&pName); // Not in list? Check for trailing 'W' or 'w' if (item == nullptr) { - wchar_t *p = wcsrchr(tszNewName, '.'); + wchar_t *p = wcsrchr(wszNewName, '.'); if (p[-1] != 'w' && p[-1] != 'W') { Netlib_LogfW(hNetlibUser, L"File %s: Not found on server, skipping", ffd.cFileName); continue; } // remove trailing w or W and try again - int iPos = int(p - tszNewName) - 1; + int iPos = int(p - wszNewName) - 1; strdelw(p - 1, 1); if ((item = hashes.find((ServListEntry*)&pName)) == nullptr) { Netlib_LogfW(hNetlibUser, L"File %s: Not found on server, skipping", ffd.cFileName); continue; } - strdelw(tszNewName + iPos, 1); + strdelw(wszNewName + iPos, 1); } // No need to hash a file if we are forcing a redownload anyway @@ -729,7 +723,7 @@ static int ScanFolder(const wchar_t *tszFolder, size_t cbBaseLen, const wchar_t // try to hash the file char szMyHash[33]; __try { - CalculateModuleHash(tszBuf, szMyHash); + CalculateModuleHash(wszBuf, szMyHash); // hashes are the same, skipping if (strcmp(szMyHash, item->m_szHash) == 0) { Netlib_LogfW(hNetlibUser, L"File %s: Already up-to-date, skipping", ffd.cFileName); @@ -744,17 +738,17 @@ static int ScanFolder(const wchar_t *tszFolder, size_t cbBaseLen, const wchar_t } else Netlib_LogfW(hNetlibUser, L"File %s: Forcing redownload", ffd.cFileName); - ptszUrl = item->m_name; + pwszUrl = item->m_name; MyCRC = item->m_crc; } else { // file was marked for deletion, add it to the list anyway Netlib_LogfW(hNetlibUser, L"File %s: Marked for deletion", ffd.cFileName); - ptszUrl = L""; + pwszUrl = L""; MyCRC = 0; } - CMStringA szSetting(tszBuf + cbBaseLen); + CMStringA szSetting(wszBuf + cbBaseLen); int bEnabled = db_get_b(0, DB_MODULE_FILES, StrToLower(szSetting.GetBuffer()), 1); if (bEnabled == 2) // hidden database setting to exclude a plugin from list continue; @@ -762,23 +756,23 @@ static int ScanFolder(const wchar_t *tszFolder, size_t cbBaseLen, const wchar_t // Yeah, we've got new version. FILEINFO *FileInfo = new FILEINFO; // copy the relative old name - wcsncpy_s(FileInfo->tszOldName, tszBuf + cbBaseLen, _TRUNCATE); + wcsncpy_s(FileInfo->wszOldName, wszBuf + cbBaseLen, _TRUNCATE); FileInfo->bDeleteOnly = bDeleteOnly; if (FileInfo->bDeleteOnly) // save the full old name for deletion - wcsncpy_s(FileInfo->tszNewName, tszBuf, _TRUNCATE); + wcsncpy_s(FileInfo->wszNewName, wszBuf, _TRUNCATE); else - wcsncpy_s(FileInfo->tszNewName, ptszUrl, _TRUNCATE); + wcsncpy_s(FileInfo->wszNewName, pwszUrl, _TRUNCATE); - wcsncpy_s(tszBuf, ptszUrl, _TRUNCATE); - wchar_t *p = wcsrchr(tszBuf, '.'); + wcsncpy_s(wszBuf, pwszUrl, _TRUNCATE); + wchar_t *p = wcsrchr(wszBuf, '.'); if (p) *p = 0; - p = wcsrchr(tszBuf, '\\'); - p = (p) ? p + 1 : tszBuf; + p = wcsrchr(wszBuf, '\\'); + p = (p) ? p + 1 : wszBuf; _wcslwr(p); - mir_snwprintf(FileInfo->File.tszDiskPath, L"%s\\Temp\\%s.zip", g_tszRoot, p); - mir_snwprintf(FileInfo->File.tszDownloadURL, L"%s/%s.zip", tszBaseUrl, tszBuf); - for (p = wcschr(FileInfo->File.tszDownloadURL, '\\'); p != nullptr; p = wcschr(p, '\\')) + mir_snwprintf(FileInfo->File.wszDiskPath, L"%s\\Temp\\%s.zip", g_wszRoot, p); + mir_snwprintf(FileInfo->File.wszDownloadURL, L"%s/%s.zip", pwszBaseUrl, wszBuf); + for (p = wcschr(FileInfo->File.wszDownloadURL, '\\'); p != nullptr; p = wcschr(p, '\\')) *p++ = '/'; // remember whether the user has decided not to update this component with this particular new version @@ -804,10 +798,10 @@ static void CheckUpdates(void *) Thread_SetName("PluginUpdater: CheckUpdates"); ThreadWatch threadId(dwCheckThreadId); - wchar_t tszTempPath[MAX_PATH]; - DWORD dwLen = GetTempPath(_countof(tszTempPath), tszTempPath); - if (tszTempPath[dwLen - 1] == '\\') - tszTempPath[dwLen - 1] = 0; + TFileName wszTempPath; + DWORD dwLen = GetTempPath(_countof(wszTempPath), wszTempPath); + if (wszTempPath[dwLen - 1] == '\\') + wszTempPath[dwLen - 1] = 0; if (!g_plugin.bSilent) ShowPopup(TranslateT("Plugin Updater"), TranslateT("Checking for new updates..."), POPUP_TYPE_INFO); diff --git a/plugins/PluginUpdater/src/Events.cpp b/plugins/PluginUpdater/src/Events.cpp index 20080cc6d8..4c808600dc 100644 --- a/plugins/PluginUpdater/src/Events.cpp +++ b/plugins/PluginUpdater/src/Events.cpp @@ -23,10 +23,10 @@ HANDLE hPluginUpdaterFolder; int OnFoldersChanged(WPARAM, LPARAM) { - FoldersGetCustomPathW(hPluginUpdaterFolder, g_tszRoot, MAX_PATH, L""); - size_t len = wcslen(g_tszRoot); - if (g_tszRoot[len-1] == '\\' || g_tszRoot[len-1] == '/') - g_tszRoot[len-1] = 0; + FoldersGetCustomPathW(hPluginUpdaterFolder, g_wszRoot, MAX_PATH, L""); + size_t len = wcslen(g_wszRoot); + if (g_wszRoot[len-1] == '\\' || g_wszRoot[len-1] == '/') + g_wszRoot[len-1] = 0; return 0; } @@ -35,7 +35,7 @@ void EmptyFolder() SHFILEOPSTRUCT file_op = { nullptr, FO_DELETE, - g_tszRoot, + g_wszRoot, L"", FOF_NOERRORUI | FOF_SILENT | FOF_NOCONFIRMATION, false, @@ -50,7 +50,7 @@ int ModulesLoaded(WPARAM, LPARAM) HookEvent(ME_FOLDERS_PATH_CHANGED, OnFoldersChanged); OnFoldersChanged(0, 0); } - else lstrcpyn(g_tszRoot, VARSW(L"%miranda_path%\\" DEFAULT_UPDATES_FOLDER), _countof(g_tszRoot)); + else lstrcpyn(g_wszRoot, VARSW(L"%miranda_path%\\" DEFAULT_UPDATES_FOLDER), _countof(g_wszRoot)); if (ServiceExists(MS_ASSOCMGR_ADDNEWURLTYPE)) AssocMgr_AddNewUrlTypeW("mirpu:", TranslateT("Plugin updater URI scheme"), g_plugin.getInst(), IDI_PLGLIST, MODULENAME "/ParseUri", 0); diff --git a/plugins/PluginUpdater/src/Notifications.cpp b/plugins/PluginUpdater/src/Notifications.cpp index 1c1bc7e5e4..b3ef00ef7c 100644 --- a/plugins/PluginUpdater/src/Notifications.cpp +++ b/plugins/PluginUpdater/src/Notifications.cpp @@ -68,9 +68,9 @@ static LRESULT CALLBACK PopupDlgProc(HWND hPopup, UINT uMsg, WPARAM wParam, LPAR void CALLBACK RestartPrompt(void *) { if (!g_plugin.bAutoRestart) { - wchar_t tszText[200]; - mir_snwprintf(tszText, L"%s\n\n%s", TranslateT("You need to restart your Miranda to apply installed updates."), TranslateT("Would you like to restart it now?")); - if (MessageBox(nullptr, tszText, TranslateT("Plugin Updater"), MB_YESNO | MB_ICONQUESTION | MB_TOPMOST) != IDYES) + wchar_t wszText[200]; + mir_snwprintf(wszText, L"%s\n\n%s", TranslateT("You need to restart your Miranda to apply installed updates."), TranslateT("Would you like to restart it now?")); + if (MessageBox(nullptr, wszText, TranslateT("Plugin Updater"), MB_YESNO | MB_ICONQUESTION | MB_TOPMOST) != IDYES) return; } @@ -93,7 +93,7 @@ static LRESULT CALLBACK PopupDlgProcRestart(HWND hPopup, UINT uMsg, WPARAM wPara return DefWindowProc(hPopup, uMsg, wParam, lParam); } -void ShowPopup(LPCTSTR ptszTitle, LPCTSTR ptszText, int Number) +void ShowPopup(LPCTSTR pwszTitle, LPCTSTR pwszText, int Number) { if (Popup_Enabled()) { char setting[100]; @@ -113,8 +113,8 @@ void ShowPopup(LPCTSTR ptszTitle, LPCTSTR ptszText, int Number) ppd.iSeconds = g_plugin.PopupTimeout; } - lstrcpyn(ppd.lpwzText, ptszText, MAX_SECONDLINE); - lstrcpyn(ppd.lpwzContactName, ptszTitle, MAX_CONTACTNAME); + lstrcpyn(ppd.lpwzText, pwszText, MAX_SECONDLINE); + lstrcpyn(ppd.lpwzContactName, pwszTitle, MAX_CONTACTNAME); switch (g_plugin.PopupDefColors) { case byCOLOR_WINDOWS: @@ -135,5 +135,5 @@ void ShowPopup(LPCTSTR ptszTitle, LPCTSTR ptszText, int Number) } if (Number == POPUP_TYPE_ERROR) - MessageBox(nullptr, ptszText, ptszTitle, MB_ICONINFORMATION); + MessageBox(nullptr, pwszText, pwszTitle, MB_ICONINFORMATION); } diff --git a/plugins/PluginUpdater/src/Options.cpp b/plugins/PluginUpdater/src/Options.cpp index 8cc5bf781b..0f1be8faed 100644 --- a/plugins/PluginUpdater/src/Options.cpp +++ b/plugins/PluginUpdater/src/Options.cpp @@ -314,9 +314,9 @@ static INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wPar iNewMode = UPDATE_MODE_TRUNK_SYMBOLS; } else { - wchar_t tszUrl[100]; - GetDlgItemText(hwndDlg, IDC_CUSTOMURL, tszUrl, _countof(tszUrl)); - g_plugin.setWString(DB_SETTING_UPDATE_URL, tszUrl); + wchar_t wszUrl[100]; + GetDlgItemText(hwndDlg, IDC_CUSTOMURL, wszUrl, _countof(wszUrl)); + g_plugin.setWString(DB_SETTING_UPDATE_URL, wszUrl); iNewMode = UPDATE_MODE_CUSTOM; } diff --git a/plugins/PluginUpdater/src/PluginUpdater.cpp b/plugins/PluginUpdater/src/PluginUpdater.cpp index f46768a0a5..108bac717b 100644 --- a/plugins/PluginUpdater/src/PluginUpdater.cpp +++ b/plugins/PluginUpdater/src/PluginUpdater.cpp @@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA. CMPlugin g_plugin; -wchar_t g_tszRoot[MAX_PATH] = {0}, g_tszTempPath[MAX_PATH]; +TFileName g_wszRoot = {0}, g_wszTempPath; ///////////////////////////////////////////////////////////////////////////////////////// @@ -69,9 +69,9 @@ int CMPlugin::Load() { g_plugin.setByte(DB_SETTING_NEED_RESTART, 0); - DWORD dwLen = GetTempPath(_countof(g_tszTempPath), g_tszTempPath); - if (g_tszTempPath[dwLen-1] == '\\') - g_tszTempPath[dwLen-1] = 0; + DWORD dwLen = GetTempPath(_countof(g_wszTempPath), g_wszTempPath); + if (g_wszTempPath[dwLen-1] == '\\') + g_wszTempPath[dwLen-1] = 0; InitPopupList(); InitNetlib(); diff --git a/plugins/PluginUpdater/src/Utils.cpp b/plugins/PluginUpdater/src/Utils.cpp index b2482e9b0c..5108c2fbd4 100644 --- a/plugins/PluginUpdater/src/Utils.cpp +++ b/plugins/PluginUpdater/src/Utils.cpp @@ -56,7 +56,7 @@ int CompareHashes(const ServListEntry *p1, const ServListEntry *p2) return _wcsicmp(p1->m_name, p2->m_name); } -bool ParseHashes(const wchar_t *ptszUrl, ptrW &baseUrl, SERVLIST &arHashes) +bool ParseHashes(const wchar_t *pwszUrl, ptrW &baseUrl, SERVLIST &arHashes) { REPLACEVARSARRAY vars[2]; vars[0].key.w = L"platform"; @@ -67,12 +67,12 @@ bool ParseHashes(const wchar_t *ptszUrl, ptrW &baseUrl, SERVLIST &arHashes) #endif vars[1].key.w = vars[1].value.w = nullptr; - baseUrl = Utils_ReplaceVarsW(ptszUrl, 0, vars); + baseUrl = Utils_ReplaceVarsW(pwszUrl, 0, vars); // Download version info FILEURL pFileUrl; - mir_snwprintf(pFileUrl.tszDownloadURL, L"%s/hashes.zip", baseUrl.get()); - mir_snwprintf(pFileUrl.tszDiskPath, L"%s\\hashes.zip", g_tszTempPath); + mir_snwprintf(pFileUrl.wszDownloadURL, L"%s/hashes.zip", baseUrl.get()); + mir_snwprintf(pFileUrl.wszDiskPath, L"%s\\hashes.zip", g_wszTempPath); pFileUrl.CRCsum = 0; HNETLIBCONN nlc = nullptr; @@ -86,20 +86,20 @@ bool ParseHashes(const wchar_t *ptszUrl, ptrW &baseUrl, SERVLIST &arHashes) return false; } - if (unzip(pFileUrl.tszDiskPath, g_tszTempPath, nullptr, true)) { + if (unzip(pFileUrl.wszDiskPath, g_wszTempPath, nullptr, true)) { Netlib_LogfW(hNetlibUser, L"Unzipping list of available updates from %s failed", baseUrl.get()); ShowPopup(TranslateT("Plugin Updater"), TranslateT("An error occurred while checking for new updates."), POPUP_TYPE_ERROR); Skin_PlaySound("updatefailed"); return false; } - DeleteFile(pFileUrl.tszDiskPath); + DeleteFile(pFileUrl.wszDiskPath); - wchar_t tszTmpIni[MAX_PATH]; - mir_snwprintf(tszTmpIni, L"%s\\hashes.txt", g_tszTempPath); - FILE *fp = _wfopen(tszTmpIni, L"r"); + TFileName wszTmpIni; + mir_snwprintf(wszTmpIni, L"%s\\hashes.txt", g_wszTempPath); + FILE *fp = _wfopen(wszTmpIni, L"r"); if (!fp) { - Netlib_LogfW(hNetlibUser, L"Opening %s failed", g_tszTempPath); + Netlib_LogfW(hNetlibUser, L"Opening %s failed", g_wszTempPath); ShowPopup(TranslateT("Plugin Updater"), TranslateT("An error occurred while checking for new updates."), POPUP_TYPE_ERROR); return false; } @@ -132,7 +132,7 @@ bool ParseHashes(const wchar_t *ptszUrl, ptrW &baseUrl, SERVLIST &arHashes) } } fclose(fp); - DeleteFile(tszTmpIni); + DeleteFileW(wszTmpIni); if (bDoNotSwitchToStable) { g_plugin.setByte(DB_SETTING_DONT_SWITCH_TO_STABLE, 1); @@ -173,7 +173,7 @@ bool DownloadFile(FILEURL *pFileURL, HNETLIBCONN &nlc) { "Pragma", "no-cache" } }; - ptrA szUrl(mir_u2a(pFileURL->tszDownloadURL)); + ptrA szUrl(mir_u2a(pFileURL->wszDownloadURL)); NETLIBHTTPREQUEST nlhr = {}; nlhr.cbSize = sizeof(nlhr); @@ -185,7 +185,7 @@ bool DownloadFile(FILEURL *pFileURL, HNETLIBCONN &nlc) nlhr.headers = headers; for (int i = 0; i < MAX_RETRIES; i++) { - Netlib_LogfW(hNetlibUser, L"Downloading file %s to %s (attempt %d)", pFileURL->tszDownloadURL, pFileURL->tszDiskPath, i + 1); + Netlib_LogfW(hNetlibUser, L"Downloading file %s to %s (attempt %d)", pFileURL->wszDownloadURL, pFileURL->wszDiskPath, i + 1); NLHR_PTR pReply(Netlib_HttpTransaction(hNetlibUser, &nlhr)); if (pReply) { nlc = pReply->nlc; @@ -195,13 +195,13 @@ bool DownloadFile(FILEURL *pFileURL, HNETLIBCONN &nlc) int crc = crc32(0, (unsigned char *)pReply->pData, pReply->dataLength); if (crc != pFileURL->CRCsum) { // crc check failed, try again - Netlib_LogfW(hNetlibUser, L"crc check failed for file %s", pFileURL->tszDiskPath); + Netlib_LogfW(hNetlibUser, L"crc check failed for file %s", pFileURL->wszDiskPath); continue; } } DWORD dwBytes; - HANDLE hFile = CreateFile(pFileURL->tszDiskPath, GENERIC_READ | GENERIC_WRITE, NULL, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + HANDLE hFile = CreateFile(pFileURL->wszDiskPath, GENERIC_READ | GENERIC_WRITE, NULL, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile != INVALID_HANDLE_VALUE) { // write the downloaded file directly WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, nullptr); @@ -209,26 +209,26 @@ bool DownloadFile(FILEURL *pFileURL, HNETLIBCONN &nlc) } else { // try to write it via PU stub - wchar_t tszTempFile[MAX_PATH]; - mir_snwprintf(tszTempFile, L"%s\\pulocal.tmp", g_tszTempPath); - hFile = CreateFile(tszTempFile, GENERIC_READ | GENERIC_WRITE, NULL, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + TFileName wszTempFile; + mir_snwprintf(wszTempFile, L"%s\\pulocal.tmp", g_wszTempPath); + hFile = CreateFile(wszTempFile, GENERIC_READ | GENERIC_WRITE, NULL, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile != INVALID_HANDLE_VALUE) { WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, nullptr); CloseHandle(hFile); - SafeMoveFile(tszTempFile, pFileURL->tszDiskPath); + SafeMoveFile(wszTempFile, pFileURL->wszDiskPath); } } return true; } - Netlib_LogfW(hNetlibUser, L"Downloading file %s failed with error %d", pFileURL->tszDownloadURL, pReply->resultCode); + Netlib_LogfW(hNetlibUser, L"Downloading file %s failed with error %d", pFileURL->wszDownloadURL, pReply->resultCode); } else { - Netlib_LogfW(hNetlibUser, L"Downloading file %s failed, host is propably temporary down.", pFileURL->tszDownloadURL); + Netlib_LogfW(hNetlibUser, L"Downloading file %s failed, host is propably temporary down.", pFileURL->wszDownloadURL); nlc = nullptr; } } - Netlib_LogfW(hNetlibUser, L"Downloading file %s failed, giving up", pFileURL->tszDownloadURL); + Netlib_LogfW(hNetlibUser, L"Downloading file %s failed, giving up", pFileURL->wszDownloadURL); return false; } @@ -379,7 +379,7 @@ Cleanup: bool PrepareEscalation() { // First try to create a file near Miranda32.exe - wchar_t szPath[MAX_PATH]; + TFileName szPath; GetModuleFileName(nullptr, szPath, _countof(szPath)); wchar_t *ext = wcsrchr(szPath, '.'); if (ext != nullptr) @@ -399,9 +399,9 @@ bool PrepareEscalation() return true; // Elevate the process. Create a pipe for a stub first - wchar_t tszPipeName[MAX_PATH]; - mir_snwprintf(tszPipeName, L"\\\\.\\pipe\\Miranda_Pu_%d", GetCurrentProcessId()); - hPipe = CreateNamedPipe(tszPipeName, PIPE_ACCESS_DUPLEX, PIPE_READMODE_BYTE | PIPE_WAIT, 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, nullptr); + TFileName wzPipeName; + mir_snwprintf(wzPipeName, L"\\\\.\\pipe\\Miranda_Pu_%d", GetCurrentProcessId()); + hPipe = CreateNamedPipe(wzPipeName, PIPE_ACCESS_DUPLEX, PIPE_READMODE_BYTE | PIPE_WAIT, 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, nullptr); if (hPipe == INVALID_HANDLE_VALUE) { hPipe = nullptr; } @@ -434,6 +434,17 @@ bool PrepareEscalation() return false; } +///////////////////////////////////////////////////////////////////////////////////////// +// Folder creation + +void CreateWorkFolders(TFileName &wszTempFolder, TFileName &wszBackupFolder) +{ + mir_snwprintf(wszBackupFolder, L"%s\\Backups", g_wszRoot); + SafeCreateDirectory(wszBackupFolder); + mir_snwprintf(wszTempFolder, L"%s\\Temp", g_wszRoot); + SafeCreateDirectory(wszTempFolder); +} + ///////////////////////////////////////////////////////////////////////////////////////// int TransactPipe(int opcode, const wchar_t *p1, const wchar_t *p2) @@ -512,37 +523,37 @@ int SafeMoveFile(const wchar_t *pSrc, const wchar_t *pDst) return TransactPipe(2, pSrc, pDst); } -int SafeDeleteFile(const wchar_t *pFile) +int SafeDeleteFile(const wchar_t *pwszFile) { if (hPipe == nullptr) - return DeleteFile(pFile); + return DeleteFile(pwszFile); - return TransactPipe(3, pFile, nullptr); + return TransactPipe(3, pwszFile, nullptr); } -int SafeCreateDirectory(const wchar_t *pFolder) +int SafeCreateDirectory(const wchar_t *pwszFolder) { if (hPipe == nullptr) - return CreateDirectoryTreeW(pFolder); + return CreateDirectoryTreeW(pwszFolder); - return TransactPipe(4, pFolder, nullptr); + return TransactPipe(4, pwszFolder, nullptr); } -int SafeCreateFilePath(const wchar_t *pFolder) +int SafeCreateFilePath(const wchar_t *pwszFolder) { if (hPipe == nullptr) { - CreatePathToFileW(pFolder); + CreatePathToFileW(pwszFolder); return 0; } - return TransactPipe(5, pFolder, nullptr); + return TransactPipe(5, pwszFolder, nullptr); } -int BackupFile(wchar_t *ptszSrcFileName, wchar_t *ptszBackFileName) +int BackupFile(wchar_t *pwszSrcFileName, wchar_t *pwszBackFileName) { - SafeCreateFilePath(ptszBackFileName); + SafeCreateFilePath(pwszBackFileName); - if (int iErrorCode = SafeMoveFile(ptszSrcFileName, ptszBackFileName)) + if (int iErrorCode = SafeMoveFile(pwszSrcFileName, pwszBackFileName)) return iErrorCode; return 0; } diff --git a/plugins/PluginUpdater/src/checksum.cpp b/plugins/PluginUpdater/src/checksum.cpp index 19f9da9ece..77b138fde3 100644 --- a/plugins/PluginUpdater/src/checksum.cpp +++ b/plugins/PluginUpdater/src/checksum.cpp @@ -25,12 +25,12 @@ struct MFileMapping PBYTE ptr; HANDLE hMap, hFile; - MFileMapping(const wchar_t* ptszFileName) + MFileMapping(const wchar_t* pwszFileName) { ptr = nullptr; hMap = nullptr; - hFile = CreateFile(ptszFileName, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); + hFile = CreateFile(pwszFileName, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); if (hFile != INVALID_HANDLE_VALUE) hMap = CreateFileMapping(hFile, nullptr, PAGE_WRITECOPY, 0, 0, nullptr); if (hMap) diff --git a/plugins/PluginUpdater/src/stdafx.h b/plugins/PluginUpdater/src/stdafx.h index 62b5086088..a9628fb7ca 100644 --- a/plugins/PluginUpdater/src/stdafx.h +++ b/plugins/PluginUpdater/src/stdafx.h @@ -77,20 +77,22 @@ extern "C" #define MODULE L"Plugin Updater" #define DEFAULT_UPDATES_FOLDER L"Plugin Updates" +typedef wchar_t TFileName[MAX_PATH]; + struct FILEURL { - wchar_t tszDownloadURL[2048]; - wchar_t tszDiskPath[MAX_PATH]; + wchar_t wszDownloadURL[2048]; + TFileName wszDiskPath; int CRCsum; }; struct FILEINFO { - wchar_t tszOldName[MAX_PATH], tszNewName[MAX_PATH]; + TFileName wszOldName, wszNewName; FILEURL File; - bool bEnabled, bDeleteOnly; + bool bEnabled, bDeleteOnly; - bool IsFiltered(const CMStringW &wszFilter); + bool IsFiltered(const CMStringW &wszFilter); }; typedef OBJLIST FILELIST; @@ -151,7 +153,7 @@ enum using namespace std; extern DWORD g_mirandaVersion; -extern wchar_t g_tszRoot[MAX_PATH], g_tszTempPath[MAX_PATH]; +extern wchar_t g_wszRoot[MAX_PATH], g_wszTempPath[MAX_PATH]; extern HANDLE hPipe; extern HNETLIBUSER hNetlibUser; @@ -250,9 +252,9 @@ void UnloadNetlib(); void CALLBACK RestartPrompt(void *); -int BackupFile(wchar_t *ptszSrcFileName, wchar_t *ptszBackFileName); +int BackupFile(wchar_t *pwszSrcFileName, wchar_t *pwszBackFileName); -bool ParseHashes(const wchar_t *ptszUrl, ptrW &baseUrl, SERVLIST &arHashes); +bool ParseHashes(const wchar_t *pwszUrl, ptrW &baseUrl, SERVLIST &arHashes); int CompareHashes(const ServListEntry *p1, const ServListEntry *p2); wchar_t* GetDefaultUrl(); @@ -262,19 +264,21 @@ void ShowPopup(LPCTSTR Title, LPCTSTR Text, int Number); void CheckUpdateOnStartup(); void __stdcall InitTimer(void *type); -int unzip(const wchar_t *ptszZipFile, wchar_t *ptszDestPath, wchar_t *ptszBackPath,bool ch); +int unzip(const wchar_t *pwszZipFile, wchar_t *pwszDestPath, wchar_t *pwszBackPath, bool ch); /////////////////////////////////////////////////////////////////////////////// -int CalculateModuleHash(const wchar_t *tszFileName, char *dest); +int CalculateModuleHash(const wchar_t *pwszFileName, char *dest); BOOL IsProcessElevated(); bool PrepareEscalation(); -int SafeCreateDirectory(const wchar_t *ptszDirName); -int SafeCopyFile(const wchar_t *ptszSrc, const wchar_t *ptszDst); -int SafeMoveFile(const wchar_t *ptszSrc, const wchar_t *ptszDst); -int SafeDeleteFile(const wchar_t *ptszSrc); +void CreateWorkFolders(TFileName &wszTempFolder, TFileName &wszBackupFolder); + +int SafeCreateDirectory(const wchar_t *pwszDirName); +int SafeCopyFile(const wchar_t *pwszSrc, const wchar_t *pwszDst); +int SafeMoveFile(const wchar_t *pwszSrc, const wchar_t *pwszDst); +int SafeDeleteFile(const wchar_t *pwszSrc); int SafeCreateFilePath(const wchar_t *pFolder); char* StrToLower(char *str); diff --git a/plugins/PluginUpdater/src/unzipfile.cpp b/plugins/PluginUpdater/src/unzipfile.cpp index d454109c50..e837509ef3 100644 --- a/plugins/PluginUpdater/src/unzipfile.cpp +++ b/plugins/PluginUpdater/src/unzipfile.cpp @@ -21,16 +21,16 @@ Boston, MA 02111-1307, USA. #define DATA_BUF_SIZE (4 * 1024 * 1024) -static void PrepareFileName(wchar_t *dest, size_t destSize, const wchar_t *ptszPath, const wchar_t *ptszFileName) +static void PrepareFileName(wchar_t *dest, size_t destSize, const wchar_t *pwszPath, const wchar_t *pwszFileName) { - mir_snwprintf(dest, destSize, L"%s\\%s", ptszPath, ptszFileName); + mir_snwprintf(dest, destSize, L"%s\\%s", pwszPath, pwszFileName); for (wchar_t *p = dest; *p; ++p) if (*p == '/') *p = '\\'; } -int extractCurrentFile(unzFile uf, wchar_t *ptszDestPath, wchar_t *ptszBackPath, bool ch) +int extractCurrentFile(unzFile uf, wchar_t *pwszDestPath, wchar_t *pwszBackPath, bool ch) { unz_file_info64 file_info; char filename[MAX_PATH]; @@ -48,37 +48,37 @@ int extractCurrentFile(unzFile uf, wchar_t *ptszDestPath, wchar_t *ptszBackPath, if (ch && 1 != db_get_b(0, DB_MODULE_FILES, StrToLower(ptrA(mir_strdup(filename))), 1)) return UNZ_OK; - wchar_t tszDestFile[MAX_PATH], tszBackFile[MAX_PATH]; - ptrW ptszNewName(mir_utf8decodeW(filename)); - if (ptszNewName == nullptr) - ptszNewName = mir_a2u(filename); + TFileName wszDestFile, wszBackFile; + ptrW pwszNewName(mir_utf8decodeW(filename)); + if (pwszNewName == nullptr) + pwszNewName = mir_a2u(filename); if (!(file_info.external_fa & FILE_ATTRIBUTE_DIRECTORY)) { err = unzOpenCurrentFile(uf); if (err != UNZ_OK) return err; - if (ptszBackPath != nullptr) { - PrepareFileName(tszDestFile, _countof(tszDestFile), ptszDestPath, ptszNewName); - PrepareFileName(tszBackFile, _countof(tszBackFile), ptszBackPath, ptszNewName); - if (err = BackupFile(tszDestFile, tszBackFile)) + if (pwszBackPath != nullptr) { + PrepareFileName(wszDestFile, _countof(wszDestFile), pwszDestPath, pwszNewName); + PrepareFileName(wszBackFile, _countof(wszBackFile), pwszBackPath, pwszNewName); + if (err = BackupFile(wszDestFile, wszBackFile)) return err; } - PrepareFileName(tszDestFile, _countof(tszDestFile), ptszDestPath, ptszNewName); - SafeCreateFilePath(tszDestFile); + PrepareFileName(wszDestFile, _countof(wszDestFile), pwszDestPath, pwszNewName); + SafeCreateFilePath(wszDestFile); - wchar_t *ptszFile2unzip; + wchar_t *pwszFile2unzip; if (hPipe == nullptr) // direct mode - ptszFile2unzip = tszDestFile; + pwszFile2unzip = wszDestFile; else { - wchar_t tszTempPath[MAX_PATH]; - GetTempPathW(_countof(tszTempPath), tszTempPath); - GetTempFileNameW(tszTempPath, L"PUtemp", GetCurrentProcessId(), tszBackFile); - ptszFile2unzip = tszBackFile; + TFileName wszTempPath; + GetTempPathW(_countof(wszTempPath), wszTempPath); + GetTempFileNameW(wszTempPath, L"PUtemp", GetCurrentProcessId(), wszBackFile); + pwszFile2unzip = wszBackFile; } - HANDLE hFile = CreateFile(ptszFile2unzip, GENERIC_WRITE, FILE_SHARE_WRITE, nullptr, CREATE_ALWAYS, file_info.external_fa, nullptr); + HANDLE hFile = CreateFile(pwszFile2unzip, GENERIC_WRITE, FILE_SHARE_WRITE, nullptr, CREATE_ALWAYS, file_info.external_fa, nullptr); if (hFile == INVALID_HANDLE_VALUE) return GetLastError(); @@ -104,22 +104,22 @@ int extractCurrentFile(unzFile uf, wchar_t *ptszDestPath, wchar_t *ptszBackPath, unzCloseCurrentFile(uf); /* don't lose the error */ if (hPipe) - SafeMoveFile(ptszFile2unzip, tszDestFile); + SafeMoveFile(pwszFile2unzip, wszDestFile); } return err; } -int unzip(const wchar_t *ptszZipFile, wchar_t *ptszDestPath, wchar_t *ptszBackPath,bool ch) +int unzip(const wchar_t *pwszZipFile, wchar_t *pwszDestPath, wchar_t *pwszBackPath,bool ch) { int iErrorCode = 0; zlib_filefunc64_def ffunc; fill_fopen64_filefunc(&ffunc); - unzFile uf = unzOpen2_64(ptszZipFile, &ffunc); + unzFile uf = unzOpen2_64(pwszZipFile, &ffunc); if (uf) { do { - if (int err = extractCurrentFile(uf, ptszDestPath, ptszBackPath,ch)) + if (int err = extractCurrentFile(uf, pwszDestPath, pwszBackPath,ch)) iErrorCode = err; } while (unzGoToNextFile(uf) == UNZ_OK); -- cgit v1.2.3