summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/AssocMgr/src/assoclist.cpp18
-rw-r--r--plugins/AssocMgr/src/reg.cpp47
-rw-r--r--plugins/AssocMgr/src/utils.cpp54
-rw-r--r--plugins/AssocMgr/src/utils.h6
4 files changed, 35 insertions, 90 deletions
diff --git a/plugins/AssocMgr/src/assoclist.cpp b/plugins/AssocMgr/src/assoclist.cpp
index a55e200092..9b2db86cbd 100644
--- a/plugins/AssocMgr/src/assoclist.cpp
+++ b/plugins/AssocMgr/src/assoclist.cpp
@@ -408,7 +408,7 @@ static BOOL AddNewAssocItem_Worker(char *pszClassName, const TYPEDESCHEAD *tdh,
// init new item
assoc = &pAssocList[nAssocListCount];
assoc->pszClassName = pszClassName; // no dup here
- assoc->pszDescription = s2t(tdh->pszDescription, tdh->flags&FTDF_UNICODE, TRUE); // does NULL check
+ assoc->pszDescription = s2t(tdh->pszDescription, tdh->flags & FTDF_UNICODE, TRUE); // does NULL check
assoc->hInstance = tdh->hInstance; // hInstance is allowed to be NULL for miranda32.exe
assoc->nIconResID = (WORD)tdh->nIconResID; // default icon selected later on
assoc->pszService = mir_strdup(tdh->pszService); // does NULL check
@@ -483,7 +483,7 @@ static INT_PTR ServiceAddNewFileType(WPARAM, LPARAM lParam)
char *pszFileExt = mir_strdup(ftd->pszFileExt);
char *pszClassName = MakeFileClassName(ftd->pszFileExt);
if (pszFileExt != nullptr && pszClassName != nullptr) {
- wchar_t *pszVerbDesc = s2t(ftd->pwszVerbDesc, ftd->flags&FTDF_UNICODE, TRUE); // does NULL check
+ wchar_t *pszVerbDesc = s2t(ftd->pwszVerbDesc, ftd->flags & FTDF_UNICODE, TRUE); // does NULL check
char *pszMimeType = mir_strdup(ftd->pszMimeType); // does NULL check
if (AddNewAssocItem_Worker(pszClassName, (TYPEDESCHEAD*)ftd, pszFileExt, pszVerbDesc, pszMimeType))
// no need to free pszClassName, pszFileExt, pszVerbDesc and pszMimeType,
@@ -565,7 +565,7 @@ static BOOL InvokeHandler_Worker(const char *pszClassName, const wchar_t *pszPar
}
// get params
pszService = mir_strdup(assoc->pszService);
- pvParam = t2s(pszParam, assoc->flags&FTDF_UNICODE, FALSE);
+ pvParam = t2s(pszParam, assoc->flags & FTDF_UNICODE, FALSE);
// call service
if (pszService != nullptr && pvParam != nullptr)
@@ -577,16 +577,15 @@ static BOOL InvokeHandler_Worker(const char *pszClassName, const wchar_t *pszPar
INT_PTR InvokeFileHandler(const wchar_t *pszFileName)
{
- char *pszClassName, *pszFileExt;
INT_PTR res = CALLSERVICE_NOTFOUND;
// find extension
wchar_t *p = (wchar_t*)wcsrchr(pszFileName, '.');
if (p != nullptr) {
- pszFileExt = t2a(p);
+ char *pszFileExt = mir_u2a(p);
if (pszFileExt != nullptr) {
// class name
- pszClassName = MakeFileClassName(pszFileExt);
+ char *pszClassName = MakeFileClassName(pszFileExt);
if (pszClassName != nullptr)
if (!InvokeHandler_Worker(pszClassName, pszFileName, &res)) {
// correct registry on error (no longer in list)
@@ -602,17 +601,16 @@ INT_PTR InvokeFileHandler(const wchar_t *pszFileName)
INT_PTR InvokeUrlHandler(const wchar_t *pszUrl)
{
- char *pszClassName, *pszProtoPrefix, *p;
INT_PTR res = CALLSERVICE_NOTFOUND;
// find prefix
- pszProtoPrefix = t2a(pszUrl);
+ char *pszProtoPrefix = mir_u2a(pszUrl);
if (pszProtoPrefix != nullptr) {
- p = strchr(pszProtoPrefix, ':');
+ char *p = strchr(pszProtoPrefix, ':');
if (p != nullptr) {
*(++p) = 0; // remove trailing :
// class name
- pszClassName = MakeUrlClassName(pszProtoPrefix);
+ char *pszClassName = MakeUrlClassName(pszProtoPrefix);
if (pszClassName != nullptr)
if (!InvokeHandler_Worker(pszClassName, pszUrl, &res))
// correct registry on error (no longer in list)
diff --git a/plugins/AssocMgr/src/reg.cpp b/plugins/AssocMgr/src/reg.cpp
index eb8db987b2..5a96d02582 100644
--- a/plugins/AssocMgr/src/reg.cpp
+++ b/plugins/AssocMgr/src/reg.cpp
@@ -314,13 +314,9 @@ static BOOL IsRegStrValue(HKEY hKey, const wchar_t *pszValName, const wchar_t *p
static BOOL IsRegStrValueA(HKEY hKey, const wchar_t *pszValName, const char *pszCmpVal)
{
BOOL fSame = FALSE;
- char *pszValA;
wchar_t *pszVal = GetRegStrValue(hKey, pszValName);
if (pszVal != nullptr) {
- pszValA = t2a(pszVal);
- if (pszValA != nullptr)
- fSame = !mir_strcmp(pszValA, pszCmpVal);
- mir_free(pszValA); // does NULL check
+ fSame = !mir_strcmp(_T2A(pszVal), pszCmpVal);
mir_free(pszVal);
}
return fSame;
@@ -399,10 +395,8 @@ static void BackupRegTree_Worker(HKEY hKey, const char *pszSubKey, struct Backup
if ((res = RegEnumValueA(hKey, index++, pszName, &cchName, nullptr, nullptr, nullptr, nullptr)) == ERROR_SUCCESS) {
(*param->ppszDbPrefix)[nDbPrefixLen] = 0;
mir_strcat(*param->ppszDbPrefix, pszName); // buffer safe
- ptrW ptszName(a2t(pszName));
- if (ptszName != NULL)
- if (!RegQueryValueEx(hKey, ptszName, nullptr, &dwType, pData, &cbData))
- WriteDbBackupData(*param->ppszDbPrefix, dwType, pData, cbData);
+ if (!RegQueryValueEx(hKey, _A2T(pszName), nullptr, &dwType, pData, &cbData))
+ WriteDbBackupData(*param->ppszDbPrefix, dwType, pData, cbData);
}
}
if (res == ERROR_NO_MORE_ITEMS)
@@ -476,18 +470,22 @@ static LONG RestoreRegTree(HKEY hKey, const char *pszSubKey, const char *pszDbPr
if (ReadDbBackupData(ppszSettings[i], &dwType, &pData, &cbData)) {
// set value
if (!(dwType & REGF_ANSI)) {
- WCHAR *pwszValName = a2u(pszValName, FALSE);
- if (pwszValName != nullptr) res = RegSetValueExW(hSubKey, pwszValName, 0, dwType, pData, cbData);
- else res = ERROR_NOT_ENOUGH_MEMORY;
- mir_free(pwszValName); // does NULL check
+ ptrW pwszValName(mir_a2u(pszValName));
+ if (pwszValName != nullptr)
+ res = RegSetValueExW(hSubKey, pwszValName, 0, dwType, pData, cbData);
+ else
+ res = ERROR_NOT_ENOUGH_MEMORY;
}
else res = RegSetValueExA(hSubKey, pszValName, 0, dwType&~REGF_ANSI, pData, cbData);
mir_free(pData);
}
else res = ERROR_INVALID_DATA;
- if (res) break;
+ if (res)
+ break;
+
db_unset(NULL, MODULENAME, ppszSettings[i]);
- if (hSubKey != hKey) RegCloseKey(hSubKey);
+ if (hSubKey != hKey)
+ RegCloseKey(hSubKey);
}
mir_free(ppszSettings[i]);
}
@@ -672,20 +670,18 @@ BOOL AddRegClass(const char *pszClassName, const wchar_t *pszTypeDescription, co
BOOL RemoveRegClass(const char *pszClassName)
{
- LONG res;
HKEY hRootKey, hClassKey, hShellKey, hVerbKey;
- wchar_t *ptszClassName, *ptszPrevRunCmd;
+ wchar_t *ptszPrevRunCmd;
+
+ if (pszClassName == nullptr)
+ return ERROR_BAD_ARGUMENTS;
// try to open interactive user's classes key
if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, DELETE, &hRootKey))
hRootKey = HKEY_CLASSES_ROOT;
// class name
- ptszClassName = a2t(pszClassName);
- if (ptszClassName != nullptr)
- res = DeleteRegSubTree(hRootKey, ptszClassName);
- else res = ERROR_OUTOFMEMORY;
- mir_free(ptszClassName); // does NULL check
+ LONG res = DeleteRegSubTree(hRootKey, _A2T(pszClassName));
// backup only saved/restored for fUrlProto
if (!res) {
@@ -699,7 +695,7 @@ BOOL RemoveRegClass(const char *pszClassName)
// command
ptszPrevRunCmd = GetRegStrValue(hVerbKey, L"command");
if (ptszPrevRunCmd != nullptr && !IsValidRunCommand(ptszPrevRunCmd))
- res = DeleteRegSubTree(hRootKey, ptszClassName); // backup outdated, remove all
+ res = DeleteRegSubTree(hRootKey, _A2T(pszClassName)); // backup outdated, remove all
mir_free(ptszPrevRunCmd); // does NULL check
RegCloseKey(hVerbKey);
}
@@ -1096,10 +1092,9 @@ void AddRegOpenWithExtEntry(const wchar_t *pszAppFileName, const char *pszFileEx
if (!RegOpenKeyEx(hAppsKey, pszAppFileName, 0, KEY_CREATE_SUB_KEY, &hExeKey)) {
// supported types
if (!RegCreateKeyEx(hExeKey, L"SupportedTypes", 0, nullptr, 0, KEY_SET_VALUE, nullptr, &hTypesKey, nullptr)) {
- wchar_t *ptszFileExt;
- ptszFileExt = a2t(pszFileExt);
+ ptrW ptszFileExt(mir_a2u(pszFileExt));
if (ptszFileExt != nullptr)
- RegSetValueEx(hTypesKey, ptszFileExt, 0, REG_SZ, (BYTE*)pszFileDesc, (int)(mir_wstrlen(pszFileDesc) + 1) * sizeof(wchar_t));
+ RegSetValueEx(hTypesKey, ptszFileExt, 0, REG_SZ, (BYTE*)ptszFileExt.get(), (int)(mir_wstrlen(pszFileDesc) + 1) * sizeof(wchar_t));
mir_free(ptszFileExt); // does NULL check
RegCloseKey(hTypesKey);
}
diff --git a/plugins/AssocMgr/src/utils.cpp b/plugins/AssocMgr/src/utils.cpp
index a97d257fc8..cafa234e87 100644
--- a/plugins/AssocMgr/src/utils.cpp
+++ b/plugins/AssocMgr/src/utils.cpp
@@ -42,62 +42,20 @@ void DynamicLoadInit()
/************************* String Conv ****************************/
// mir_free() the return value
-WCHAR* a2u(const char *pszAnsi, BOOL fMirCp)
-{
- UINT codepage, cch;
- WCHAR *psz;
-
- if (pszAnsi == nullptr) return nullptr;
- codepage = fMirCp ? Langpack_GetDefaultCodePage() : CP_ACP;
- cch = MultiByteToWideChar(codepage, 0, pszAnsi, -1, nullptr, 0);
- if (!cch) return nullptr;
-
- psz = (WCHAR*)mir_alloc(cch * sizeof(WCHAR));
- if (psz != nullptr && !MultiByteToWideChar(codepage, 0, pszAnsi, -1, psz, cch)) {
- mir_free(psz);
- return nullptr;
- }
- return psz;
-}
-
-// mir_free() the return value
-char* u2a(const WCHAR *pszUnicode, BOOL fMirCp)
-{
- UINT codepage, cch;
- char *psz;
- DWORD flags;
-
- if (pszUnicode == nullptr) return nullptr;
- codepage = fMirCp ? Langpack_GetDefaultCodePage() : CP_ACP;
- /* without WC_COMPOSITECHECK some characters might get out strange (see MS blog) */
- cch = WideCharToMultiByte(codepage, flags = WC_COMPOSITECHECK, pszUnicode, -1, nullptr, 0, nullptr, nullptr);
- if (!cch) cch = WideCharToMultiByte(codepage, flags = 0, pszUnicode, -1, nullptr, 0, nullptr, nullptr);
- if (!cch) return nullptr;
-
- psz = (char*)mir_alloc(cch);
- if (psz != nullptr && !WideCharToMultiByte(codepage, flags, pszUnicode, -1, psz, cch, nullptr, nullptr)) {
- mir_free(psz);
- return nullptr;
- }
- return psz;
-}
-
-// mir_free() the return value
wchar_t* s2t(const void *pszStr, DWORD fUnicode, BOOL fMirCp)
{
-
- if (fUnicode) return mir_wstrdup((WCHAR*)pszStr);
- return a2u((char*)pszStr, fMirCp);
+ if (fUnicode)
+ return mir_wstrdup((WCHAR*)pszStr);
+ return mir_a2u_cp((char*)pszStr, fMirCp);
}
// mir_free() the return value
void* t2s(const wchar_t *pszStr, DWORD fUnicode, BOOL fMirCp)
{
-
- if (!fUnicode) return (void*)u2a(pszStr, fMirCp);
+ if (!fUnicode)
+ return (void*)mir_u2a_cp(pszStr, fMirCp);
return (void*)mir_wstrdup(pszStr);
-
}
/************************* Database *******************************/
@@ -170,7 +128,7 @@ void ShowInfoMessage(BYTE flags, const char *pszTitle, const char *pszTextFmt, .
mbp->lpszText = mir_strdup(szText);
mbp->dwStyle = MB_OK | MB_SETFOREGROUND | MB_TASKMODAL;
mbp->dwLanguageId = LANGIDFROMLCID(Langpack_GetDefaultLocale());
- switch (flags&NIIF_ICON_MASK) {
+ switch (flags & NIIF_ICON_MASK) {
case NIIF_INFO: mbp->dwStyle |= MB_ICONINFORMATION; break;
case NIIF_WARNING: mbp->dwStyle |= MB_ICONWARNING; break;
case NIIF_ERROR: mbp->dwStyle |= MB_ICONERROR;
diff --git a/plugins/AssocMgr/src/utils.h b/plugins/AssocMgr/src/utils.h
index 7a07827944..03e818e0c5 100644
--- a/plugins/AssocMgr/src/utils.h
+++ b/plugins/AssocMgr/src/utils.h
@@ -24,15 +24,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
void DynamicLoadInit();
/* String Conv */
-WCHAR* a2u(const char *pszAnsi,BOOL fMirCp);
-char* u2a(const WCHAR *pszUnicode,BOOL fMirCp);
wchar_t* s2t(const void *pszStr,DWORD fUnicode,BOOL fMirCp);
void* t2s(const wchar_t *pszStr,DWORD fUnicode,BOOL fMirCp);
- #define t2a(s) u2a(s,FALSE)
- #define a2t(s) a2u(s,FALSE)
-
-
/* Database */
BOOL EnumDbPrefixSettings(const char *pszModule,const char *pszSettingPrefix,char ***pSettings,int *pnSettingsCount);