From 248a7f53a0a3c6f83643fa1afdaa26bdcfe87e3b Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10> Date: Tue, 6 Apr 2010 01:35:13 +0000 Subject: More optimizations git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@497 4f64403b-2f21-0410-a795-97e2b3489a10 --- updater/utils.cpp | 140 ++++++++++++++++++------------------------------------ 1 file changed, 46 insertions(+), 94 deletions(-) (limited to 'updater/utils.cpp') diff --git a/updater/utils.cpp b/updater/utils.cpp index daed5a8..e1ffdea 100644 --- a/updater/utils.cpp +++ b/updater/utils.cpp @@ -47,51 +47,11 @@ int CheckForFileID(char *update_url, char *version_url, char *name) { return -1; } -bool CreatePath(const TCHAR *path) { - if(!path) return false; - - TCHAR folder[MAX_PATH]; - _tcscpy(folder, path); - size_t i = 0; - - if(folder[0] && folder[1] && folder[1] == ':') i += 2; // skip drive letter - - SetLastError(ERROR_SUCCESS); - TCHAR *p = &folder[i]; - while(folder[i]) { - p = _tcschr(p, _T('\\')); - if(p) { - i = p - folder; - p++; - - if(folder[i]) folder[i] = 0; - } else - i = _tcslen(folder); - - /* - // this fails when the user does not have permission to create intermediate folders - if(!CreateDirectory(folder, 0)) { - DWORD err = GetLastError(); - if(err != ERROR_ALREADY_EXISTS) { - //MessageBox(0, Translate("Could not create temporary folder."), Translate("Error"), MB_OK | MB_ICONERROR); - //return 1; - return false; - } - } - */ - CreateDirectory(folder, 0); - - folder[i] = path[i]; - } - - DWORD lerr = GetLastError(); - return (lerr == ERROR_SUCCESS || lerr == ERROR_ALREADY_EXISTS); - - /* - // this function seems to be unavailable in shell32.dll under NT4 - int ret = SHCreateDirectoryEx(0, path, 0); - return (ret == ERROR_SUCCESS) || (ret == ERROR_FILE_EXISTS) || (ret == ERROR_ALREADY_EXISTS); - */ +bool CreatePath(const TCHAR *path) +{ + if (!path) return false; + CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)path); + return true; } // must 'mir_free' return val @@ -101,27 +61,28 @@ TCHAR *GetTString(const char *asc) return (TCHAR*)CallService(MS_LANGPACK_PCHARTOTCHAR, 0, (LPARAM)asc); } -void RemoveFolder(const TCHAR *src_folder) { - TCHAR szFilesPath[MAX_PATH], szNewFileName[MAX_PATH]; - - _tcscpy(szFilesPath, src_folder); - _tcscat(szFilesPath, _T("\\*.*")); +void RemoveFolder(const TCHAR *src_folder) +{ + TCHAR szFilesPath[MAX_PATH]; + mir_sntprintf(szFilesPath, SIZEOF(szFilesPath), _T("%s\\*.*"), src_folder); + TCHAR *p = _tcsrchr(szFilesPath, '\\') + 1; + WIN32_FIND_DATA findData; HANDLE hFileSearch = FindFirstFile(szFilesPath, &findData); - if(hFileSearch != INVALID_HANDLE_VALUE) { - do { - if(findData.cFileName[0] != _T('.')) { - _tcslwr(findData.cFileName); - _tcscpy(szNewFileName, src_folder); - _tcscat(szNewFileName, _T("\\")); - _tcscat(szNewFileName, findData.cFileName); + if (hFileSearch != INVALID_HANDLE_VALUE) + { + do + { + if(findData.cFileName[0] != _T('.')) + { + _tcscpy(p, findData.cFileName); if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // recurse - RemoveFolder(szNewFileName); + RemoveFolder(szFilesPath); else - DeleteFile(szNewFileName); + DeleteFile(szFilesPath); } } while(FindNextFile(hFileSearch, &findData)); FindClose(hFileSearch); @@ -130,17 +91,18 @@ void RemoveFolder(const TCHAR *src_folder) { RemoveDirectory(src_folder); } -bool FolderIsEmpty(const TCHAR *folder) { +bool FolderIsEmpty(const TCHAR *folder) +{ TCHAR szFilesPath[MAX_PATH]; - - _tcscpy(szFilesPath, folder); - _tcscat(szFilesPath, _T("\\*.*")); + mir_sntprintf(szFilesPath, SIZEOF(szFilesPath), _T("%s\\*.*"), folder); WIN32_FIND_DATA findData; HANDLE hFileSearch = FindFirstFile(szFilesPath, &findData); - if(hFileSearch != INVALID_HANDLE_VALUE) { + if (hFileSearch != INVALID_HANDLE_VALUE) + { do { - if(_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0) { + if (_tcscmp(findData.cFileName, _T(".")) && _tcscmp(findData.cFileName, _T(".."))) + { FindClose(hFileSearch); return false; } @@ -151,49 +113,39 @@ bool FolderIsEmpty(const TCHAR *folder) { return true; } -bool DeleteNonDlls(const TCHAR *folder) { - TCHAR szFilesPath[MAX_PATH], szFilename[MAX_PATH]; +bool DeleteNonDlls(const TCHAR *folder) +{ + TCHAR szFilesPath[MAX_PATH]; { - char buff[200]; -#ifdef _UNICODE - char mbFname[MAX_PATH]; - WideCharToMultiByte(CP_ACP, 0, folder, -1, mbFname, MAX_PATH, 0, 0); - sprintf(buff, "Deleting non-dlls in %s", mbFname); -#else - sprintf(buff, "Deleting non-dlls in %s", folder); -#endif + char buff[200], *ts; + mir_snprintf(buff, SIZEOF(buff), "Deleting non-dlls in %s", (ts = mir_t2a(folder))); + mir_free(ts); NLog(buff); } - _tcscpy(szFilesPath, folder); - _tcscpy(szFilename, folder); - _tcscat(szFilename, _T("\\")); - TCHAR *p = szFilename + _tcslen(szFilename); - _tcscat(szFilesPath, _T("\\*.*")); + mir_sntprintf(szFilesPath, SIZEOF(szFilesPath), _T("%s\\*.*"), folder); + TCHAR *p = _tcsrchr(szFilesPath, '\\') + 1; WIN32_FIND_DATA findData; HANDLE hFileSearch = FindFirstFile(szFilesPath, &findData); - if(hFileSearch != INVALID_HANDLE_VALUE) { + if (hFileSearch != INVALID_HANDLE_VALUE) { do { - if(_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0) { + if (_tcscmp(findData.cFileName, _T(".")) && _tcscmp(findData.cFileName, _T(".."))) + { _tcscpy(p, findData.cFileName); if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - DeleteNonDlls(szFilename); + DeleteNonDlls(szFilesPath); } else { - if(_tcsstr(findData.cFileName, _T(".dll")) == 0) { + if (_tcsstr(findData.cFileName, _T(".dll")) == 0) + { { - char buff[200]; -#ifdef _UNICODE - char mbFname[MAX_PATH]; - WideCharToMultiByte(CP_ACP, 0, szFilename, -1, mbFname, MAX_PATH, 0, 0); - sprintf(buff, "Deleting %s", mbFname); -#else - sprintf(buff, "Deleting %s", szFilename); -#endif + char buff[200], *ts; + mir_snprintf(buff, SIZEOF(buff), "Deleting %s", (ts = mir_t2a(folder))); + mir_free(ts); NLog(buff); } - DeleteFile(szFilename); + DeleteFile(szFilesPath); } } } @@ -202,4 +154,4 @@ bool DeleteNonDlls(const TCHAR *folder) { } return true; -} \ No newline at end of file +} -- cgit v1.2.3