summaryrefslogtreecommitdiff
path: root/updater/utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'updater/utils.cpp')
-rw-r--r--updater/utils.cpp140
1 files changed, 46 insertions, 94 deletions
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
+}