summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commonheaders.h4
-rw-r--r--log.cpp12
-rw-r--r--main.cpp52
-rw-r--r--messages.cpp57
-rw-r--r--new_gpg.vcproj8
-rw-r--r--options.cpp10
-rw-r--r--utilities.cpp22
-rw-r--r--utilities.h2
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>
diff --git a/log.cpp b/log.cpp
index d4d65a7..a7395e6 100644
--- a/log.cpp
+++ b/log.cpp
@@ -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;
}
diff --git a/main.cpp b/main.cpp
index 70709e0..27ed44e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -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;&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;X:\install\git\miranda\mim_plugs;../../include"
+ AdditionalIncludeDirectories="D:\work\libs\utf8cpp\inlude;D:\work\libs\boost;&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;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;&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;X:\install\git\miranda\mim_plugs;../../include"
+ AdditionalIncludeDirectories="D:\work\libs\utf8cpp\inlude;D:\work\libs\boost;&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;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