diff options
author | Gluzskiy Alexandr <sss123next@list.ru> | 2010-10-21 05:34:01 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss123next@list.ru> | 2010-10-21 05:34:01 +0300 |
commit | d5baf212f45c3926ffec3bccad77ca4dd0751d23 (patch) | |
tree | 4f32bd925082bc78ecdcf0a1e98b53655a8faa69 | |
parent | 64624c111e4a8a3a156190a8d6d3ee4d2e528f39 (diff) |
using utf8<->utf16 on poor c++ instead of miranda api (can solve some issues with badly encoded messages, testing needed)
-rw-r--r-- | commonheaders.h | 4 | ||||
-rw-r--r-- | log.cpp | 12 | ||||
-rw-r--r-- | main.cpp | 52 | ||||
-rw-r--r-- | messages.cpp | 57 | ||||
-rw-r--r-- | new_gpg.vcproj | 8 | ||||
-rw-r--r-- | options.cpp | 10 | ||||
-rw-r--r-- | utilities.cpp | 22 | ||||
-rw-r--r-- | utilities.h | 2 |
8 files changed, 74 insertions, 93 deletions
diff --git a/commonheaders.h b/commonheaders.h index 1faf221..713622f 100644 --- a/commonheaders.h +++ b/commonheaders.h @@ -44,7 +44,9 @@ using std::fstream; //boost #include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp> -//#include <boost/lexical_cast.hpp> + +//utf8cpp +#include <utf8.h> //miranda #include <newpluginapi.h> @@ -22,12 +22,10 @@ logtofile& logtofile::operator<<(TCHAR *buf) if(bDebugLog) { log_mutex.lock(); - char *tmp = mir_utf8encodeW(buf); log.open(path, std::ios::app |std::ios::ate); - log<<tmp; + log<<toUTF8(buf); log.close(); log_mutex.unlock(); - mir_free(tmp); } return *this; } @@ -37,12 +35,10 @@ logtofile& logtofile::operator<<(char *buf) if(bDebugLog) { log_mutex.lock(); - char *tmp = mir_utf8encode(buf); log.open(path, std::ios::app |std::ios::ate); - log<<tmp; + log<<buf; log.close(); log_mutex.unlock(); - mir_free(tmp); } return *this; } @@ -67,12 +63,10 @@ logtofile& logtofile::operator<<(wstring buf) if(bDebugLog) { log_mutex.lock(); - char *tmp = mir_utf8encodeW(buf.c_str()); log.open(path, std::ios::app |std::ios::ate); - log<<tmp; + log<<toUTF8(buf); log.close(); log_mutex.unlock(); - mir_free(tmp); } return *this; } @@ -110,31 +110,31 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM break; stop = p; p2 = out.find("/", p) - 1; - TCHAR *tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + TCHAR *tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); item.pszText = tmp; iRow = ListView_InsertItem(hwndList, &item); ListView_SetItemText(hwndList, iRow, 4, tmp); mir_free(tmp); p2+=2; p = out.find(" ", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList, iRow, 0, tmp); mir_free(tmp); p = out.find("uid ", p); p2 = out.find_first_not_of(" ", p+5); p = out.find("<", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList, iRow, 2, tmp); mir_free(tmp); p++; p2 = out.find(">", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); ListView_SetItemText(hwndList, iRow, 1, tmp); mir_free(tmp); p = out.find("ssb ", p2) + 6; p = out.find(" ", p) + 1; p2 = out.find("\n", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p-1)).c_str()); ListView_SetItemText(hwndList, iRow, 3, tmp); mir_free(tmp); ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);// not sure about this @@ -276,31 +276,31 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM break; stop = p; p2 = out.find("/", p) - 1; - TCHAR *tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + TCHAR *tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); item.pszText = tmp; iRow = ListView_InsertItem(hwndList, &item); ListView_SetItemText(hwndList, iRow, 4, tmp); mir_free(tmp); p2+=2; p = out.find(" ", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList, iRow, 0, tmp); mir_free(tmp); p = out.find("uid ", p); p2 = out.find_first_not_of(" ", p+5); p = out.find("<", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList, iRow, 2, tmp); mir_free(tmp); p++; p2 = out.find(">", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); ListView_SetItemText(hwndList, iRow, 1, tmp); mir_free(tmp); p = out.find("ssb ", p2) + 6; p = out.find(" ", p) + 1; p2 = out.find("\n", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p-1)).c_str()); ListView_SetItemText(hwndList, iRow, 3, tmp); mir_free(tmp); ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);// not sure about this @@ -853,7 +853,7 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, if(tmp[0]) { f<<"Passphrase: "; - tmp2 = mir_utf8encodeW(tmp); + tmp2 = mir_strdup(toUTF8(tmp).c_str()); f<<tmp2; f<<"\n"; mir_free(tmp2); @@ -862,7 +862,7 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, f<<"Name-Real: "; tmp = new TCHAR [128]; GetDlgItemText(hwndDlg, IDC_KEY_REAL_NAME, tmp, 128); - tmp2 = mir_utf8encodeW(tmp); + tmp2 = mir_strdup(toUTF8(tmp).c_str()); f<<tmp2; mir_free(tmp2); delete [] tmp; @@ -871,7 +871,7 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, GetDlgItemText(hwndDlg, IDC_KEY_COMMENT, tmp, 512); if(tmp[0]) { - tmp2 = mir_utf8encodeW(tmp); + tmp2 = mir_strdup(toUTF8(tmp).c_str()); f<<"Name-Comment: "; f<<tmp2; f<<"\n"; @@ -881,7 +881,7 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, f<<"Name-Email: "; tmp = new TCHAR [128]; GetDlgItemText(hwndDlg, IDC_KEY_EMAIL, tmp, 128); - tmp2 = mir_utf8encodeW(tmp); + tmp2 = mir_strdup(toUTF8(tmp).c_str()); f<<tmp2; mir_free(tmp2); delete [] tmp; @@ -889,7 +889,7 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, f<<"Expire-Date: "; tmp = new TCHAR [12]; GetDlgItemText(hwndDlg, IDC_KEY_EXPIRE_DATE, tmp, 12); - tmp2 = mir_utf8encodeW(tmp); + tmp2 = mir_strdup(toUTF8(tmp).c_str()); f<<tmp2; mir_free(tmp2); delete [] tmp; @@ -967,31 +967,31 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, break; stop = p; p2 = out.find("/", p) - 1; - TCHAR *tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + TCHAR *tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); item.pszText = tmp; iRow = ListView_InsertItem(hwndList_g, &item); ListView_SetItemText(hwndList_g, iRow, 4, tmp); mir_free(tmp); p2+=2; p = out.find(" ", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList_g, iRow, 0, tmp); mir_free(tmp); p = out.find("uid ", p); p2 = out.find_first_not_of(" ", p+5); p = out.find("<", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList_g, iRow, 2, tmp); mir_free(tmp); p++; p2 = out.find(">", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); ListView_SetItemText(hwndList_g, iRow, 1, tmp); mir_free(tmp); p = out.find("ssb ", p2) + 6; p = out.find(" ", p) + 1; p2 = out.find("\n", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p-1)).c_str()); ListView_SetItemText(hwndList_g, iRow, 3, tmp); mir_free(tmp); ListView_SetColumnWidth(hwndList_g, 0, LVSCW_AUTOSIZE);// not sure about this @@ -1117,31 +1117,31 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam, break; stop = p; p2 = out.find("/", p) - 1; - TCHAR *tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + TCHAR *tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); item.pszText = tmp; iRow = ListView_InsertItem(hwndList, &item); ListView_SetItemText(hwndList, iRow, 4, tmp); mir_free(tmp); p2+=2; p = out.find(" ", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList, iRow, 0, tmp); mir_free(tmp); p = out.find("uid ", p); p2 = out.find_first_not_of(" ", p+5); p = out.find("<", p2); - tmp = mir_utf8decodeW(out.substr(p2,p-p2).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p2,p-p2)).c_str()); ListView_SetItemText(hwndList, iRow, 2, tmp); mir_free(tmp); p++; p2 = out.find(">", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p)).c_str()); ListView_SetItemText(hwndList, iRow, 1, tmp); mir_free(tmp); p = out.find("sub ", p2) + 6; p = out.find(" ", p) + 1; p2 = out.find("\n", p); - tmp = mir_utf8decodeW(out.substr(p,p2-p-1).c_str()); + tmp = mir_wstrdup(toUTF16(out.substr(p,p2-p-1)).c_str()); ListView_SetItemText(hwndList, iRow, 3, tmp); mir_free(tmp); ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);// not sure about this @@ -1676,7 +1676,7 @@ void ImportKey() DBDeleteContactSetting(hContact, szGPGModuleName, "bAlwatsTrust"); } } - ptmp = mir_utf8decodeW(output.c_str()); + ptmp = mir_wstrdup(toUTF16(output).c_str()); MessageBox(0, ptmp, _T(""), MB_OK); mir_free(ptmp); DeleteFile(tmp2); diff --git a/messages.cpp b/messages.cpp index 3479f7e..8df3a2b 100644 --- a/messages.cpp +++ b/messages.cpp @@ -40,11 +40,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l) { //check for gpg related data - wchar_t *tmp = mir_utf8decodeW(msg); - if(!tmp) - tmp = mir_a2t(msg); - wstring str = tmp; - mir_free(tmp); + wstring str = toUTF16(msg); wstring::size_type s1 = wstring::npos, s2 = wstring::npos; if((str.find(_T("-----END PGP PUBLIC KEY BLOCK-----")) != wstring::npos) && (str.find(_T("-----BEGIN PGP PUBLIC KEY BLOCK-----")) != wstring::npos)) @@ -311,16 +307,9 @@ int RecvMsgSvc(WPARAM w, LPARAM l) f.seekg(0, std::ios::beg); f.read(tmp, size); tmp[size] = '\0'; - TCHAR *tmp2 = mir_utf8decodeW(tmp); - if(!tmp2) - { - str.append(_T("Miranda failed to decode this utf8 message, showing it as is:\n")); - tmp2 = mir_a2t(tmp); - str.append(tmp2); - } + toUTF16(tmp); + str.append(toUTF16(tmp)); delete [] tmp; - str.append(tmp2); - mir_free(tmp2); f.close(); DeleteFile(path.c_str()); } @@ -341,10 +330,10 @@ int RecvMsgSvc(WPARAM w, LPARAM l) str.insert(0, inopentag); str.append(inclosetag); } - pre->szMessage = mir_utf8encodeW(str.c_str()); + pre->szMessage = mir_strdup(toUTF8(str).c_str()); if(metaIsSubcontact(hContact)) { - char *msg = mir_utf8encodeW(str.c_str()); + char *msg = mir_strdup(toUTF8(str).c_str()); HistoryLog(hContact, msg, EVENTTYPE_MESSAGE, DBEF_UTF); mir_free(msg); return 1; @@ -363,11 +352,9 @@ int RecvMsgSvc(WPARAM w, LPARAM l) mir_free(msg); return 1; } - wchar_t *tmp = mir_utf8decodeW(msg); - wstring str = tmp; - mir_free(tmp); + wstring str = toUTF16(msg); mir_free((void**)pre->szMessage); - pre->szMessage = mir_utf8encodeW(str.c_str()); + pre->szMessage = mir_strdup(toUTF8(str).c_str()); return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs); } return CallService(MS_PROTO_CHAINRECV, w, l); @@ -405,11 +392,7 @@ int SendMsgSvc(WPARAM w, LPARAM l) { //encrypt data here - TCHAR *tmp = mir_utf8decodeW(msg); - if(!tmp) - tmp = mir_a2t(msg); - wstring str = tmp; - mir_free(tmp); + wstring str = toUTF16(msg); { //not xmpp, just replace whole message string out; DWORD code; @@ -442,7 +425,7 @@ int SendMsgSvc(WPARAM w, LPARAM l) cmd += _T("\""); { char *tmp; - tmp = mir_utf8encodeW(str.c_str()); + tmp = mir_strdup(toUTF8(str).c_str()); fstream f(path.c_str(), std::ios::out); f<<tmp; mir_free(tmp); @@ -535,22 +518,16 @@ int SendMsgSvc(WPARAM w, LPARAM l) msgs_to_ignore.push_back(hps); if(bAppendTags) { - char *opentag = mir_utf8encodeW(outopentag); - str_event.insert(0, opentag); - mir_free(opentag); - char *closetag = mir_utf8encodeW(outclosetag); - str_event.append(closetag); - mir_free(closetag); + str_event.insert(0, toUTF8(outopentag)); + str_event.append(toUTF8(outclosetag)); } HistoryLog(hContact, (char*)str_event.c_str(), EVENTTYPE_MESSAGE, DBEF_SENT | DBEF_UTF); HistoryLog(metaGetContact(hContact), (char*)str_event.c_str(), EVENTTYPE_MESSAGE, DBEF_SENT | DBEF_UTF); DBWriteContactSettingByte(metaGetContact(hContact), szGPGModuleName, "MsgsForTagging", DBGetContactSettingByte(metaGetContact(hContact), szGPGModuleName, "MsgsForTagging", 0) + 1); - char *data = mir_utf8encodeW(str.c_str()); - CallContactService(hContact, PSS_MESSAGE, (WPARAM)PREF_UTF, (LPARAM)data); - mir_free(data); + CallContactService(hContact, PSS_MESSAGE, (WPARAM)PREF_UTF, (LPARAM)toUTF8(str).c_str()); return returnNoError(hContact); } - ccs->lParam = (LPARAM)mir_utf8encodeW(str.c_str()); + ccs->lParam = (LPARAM)mir_strdup(toUTF8(str).c_str()); if(bAppendTags) DBWriteContactSettingByte(hContact, szGPGModuleName, "MsgsForTagging", DBGetContactSettingByte(hContact, szGPGModuleName, "MsgsForTagging", 0) + 1); } @@ -596,14 +573,10 @@ int HookSendMsg(WPARAM w, LPARAM l) if((dbei->eventType == EVENTTYPE_MESSAGE) && (dbei->flags & DBEF_SENT)) { char *msg = (char*)dbei->pBlob; - TCHAR *tmp = mir_utf8decodeW(msg); - if(!tmp) - tmp = mir_a2t(msg); - wstring str = tmp; - mir_free(tmp); + wstring str = toUTF16(msg); str.insert(0, outopentag); str.append(outclosetag); - char *msg2 = mir_utf8encodeW(str.c_str()); + char *msg2 = mir_strdup(toUTF8(str).c_str()); mir_free(dbei->pBlob); dbei->pBlob = (PBYTE)msg2; dbei->cbBlob = strlen(msg2)+1; diff --git a/new_gpg.vcproj b/new_gpg.vcproj index e9eaa83..033d60a 100644 --- a/new_gpg.vcproj +++ b/new_gpg.vcproj @@ -151,7 +151,7 @@ <Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="D:\work\libs\boost;"X:\install\git\miranda\miranda-im\miranda\include";X:\install\git\miranda\mim_plugs;../../include"
+ AdditionalIncludeDirectories="D:\work\libs\utf8cpp\inlude;D:\work\libs\boost;"X:\install\git\miranda\miranda-im\miranda\include";X:\install\git\miranda\mim_plugs;../../include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TESTPLUG_EXPORTS;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -184,7 +184,7 @@ AdditionalDependencies="shlwapi.lib"
LinkIncremental="2"
SuppressStartupBanner="true"
- AdditionalLibraryDirectories="D:\work\libs\boost\stage\lib"
+ AdditionalLibraryDirectories="D:\work\libs\boost\lib"
GenerateDebugInformation="true"
AssemblyDebug="1"
ProgramDatabaseFile="./$(TargetName).pdb"
@@ -258,7 +258,7 @@ FavorSizeOrSpeed="2"
OmitFramePointers="true"
WholeProgramOptimization="true"
- AdditionalIncludeDirectories="D:\work\libs\boost;"X:\install\git\miranda\miranda-im\miranda\include";X:\install\git\miranda\mim_plugs;../../include"
+ AdditionalIncludeDirectories="D:\work\libs\utf8cpp\inlude;D:\work\libs\boost;"X:\install\git\miranda\miranda-im\miranda\include";X:\install\git\miranda\mim_plugs;../../include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_UNICODE"
StringPooling="true"
RuntimeLibrary="0"
@@ -290,7 +290,7 @@ AdditionalDependencies="shlwapi.lib"
LinkIncremental="1"
SuppressStartupBanner="true"
- AdditionalLibraryDirectories="D:\work\libs\boost\stage\lib"
+ AdditionalLibraryDirectories="D:\work\libs\boost\lib"
GenerateDebugInformation="false"
SubSystem="0"
OptimizeReferences="2"
diff --git a/options.cpp b/options.cpp index d49553c..babaad1 100644 --- a/options.cpp +++ b/options.cpp @@ -914,7 +914,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP DBWriteContactSettingString(hContact, szGPGModuleName, "KeyID", tmp2); } mir_free(tmp2); - tmp = mir_utf8decodeW(output.substr(s,s2-s).c_str()); + tmp = mir_wstrdup(toUTF16(output.substr(s,s2-s)).c_str()); if(hContact && hwndList_p) ListView_SetItemText(hwndList_p, item_num, 1, tmp); mir_free(tmp); @@ -955,7 +955,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP DBWriteContactSettingString(hContact, szGPGModuleName, "KeyMainName", output.substr(s,s2-s-1).c_str()); } mir_free(tmp2); - tmp = mir_utf8decodeW(output.substr(s,s2-s-1).c_str()); + tmp = mir_wstrdup(toUTF16(output.substr(s,s2-s-1)).c_str()); if(hContact && hwndList_p) ListView_SetItemText(hwndList_p, item_num, 2, tmp); mir_free(tmp); @@ -1018,7 +1018,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP DBWriteContactSettingString(hContact, szGPGModuleName, "KeyMainEmail", output.substr(s,s2-s).c_str()); } mir_free(tmp2); - tmp = mir_utf8decodeW(output.substr(s,s2-s).c_str()); + tmp = mir_wstrdup(toUTF16(output.substr(s,s2-s)).c_str()); if(hContact && hwndList_p) ListView_SetItemText(hwndList_p, item_num, 3, tmp); mir_free(tmp); @@ -1050,7 +1050,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP DBWriteContactSettingString(hContact, szGPGModuleName, "KeyMainEmail", output.substr(s2,s-s2).c_str()); } mir_free(tmp2); - tmp = mir_utf8decodeW(output.substr(s2,s-s2).c_str()); + tmp = mir_wstrdup(toUTF16(output.substr(s2,s-s2)).c_str()); if(hContact && hwndList_p) ListView_SetItemText(hwndList_p, item_num, 3, tmp); mir_free(tmp); @@ -1099,7 +1099,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP DBWriteContactSettingString(hContact, szGPGModuleName, "GPGPubKey", out.c_str()); } } - tmp = mir_utf8decodeW(output.c_str()); + tmp = mir_wstrdup(toUTF16(output).c_str()); MessageBox(0, tmp, _T(""), MB_OK); mir_free(tmp); DeleteFile(tmp2); diff --git a/utilities.cpp b/utilities.cpp index 8ebe6f0..02ff474 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -542,9 +542,7 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU path_out += _T("\\prescense_text"); DeleteFile(path_out.c_str()); wfstream f(path_out.c_str(), std::ios::out); - char *tmp = mir_utf8encodeW(str); - f<<tmp; - mir_free(tmp); + f<<toUTF8(str).c_str(); f.close(); if(_waccess(path_out.c_str(), 0) == -1) { @@ -714,9 +712,7 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi sign_file_mutex.lock(); DeleteFile(path_out.c_str()); wfstream f(path_out.c_str(), std::ios::out); - char *tmp = mir_utf8encodeW(sign.c_str()); - f<<tmp; - mir_free(tmp); + f<<toUTF8(sign).c_str(); f.close(); if(_waccess(path_out.c_str(), 0) == -1) { @@ -914,3 +910,17 @@ int returnNoError(HANDLE hContact) { SetEvent( hEvent );
return 777;
}
+
+string toUTF8(wstring str)
+{
+ string ustr;
+ utf8::utf16to8(str.begin(), str.end(), back_inserter(ustr));
+ return ustr;
+}
+
+wstring toUTF16(string str)
+{
+ wstring ustr;
+ utf8::utf8to16(str.begin(), str.end(), back_inserter(ustr));
+ return ustr;
+}
\ No newline at end of file diff --git a/utilities.h b/utilities.h index a79221a..431c567 100644 --- a/utilities.h +++ b/utilities.h @@ -29,5 +29,7 @@ void HistoryLog(HANDLE hContact, char *data, int event_type, int flags); int ComboBoxAddStringUtf(HWND hCombo, const TCHAR *szString, DWORD data); bool isContactSecured(HANDLE hContact); const bool StriStr(const char *str, const char *substr); +string toUTF8(wstring str); +wstring toUTF16(string str); #endif |