From ac0ead8e1e00e2628373954b4a2e5f6d9d8986ad Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 21 Oct 2010 23:57:04 +0300 Subject: modified: messages.cpp modified: utilities.cpp --- utilities.cpp | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'utilities.cpp') diff --git a/utilities.cpp b/utilities.cpp index 02ff474..5bba190 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -289,10 +289,22 @@ int onProtoAck(WPARAM w, LPARAM l) break; case ACKRESULT_SUCCESS: { + if(sizeof(*f) != sizeof(PROTOFILETRANSFERSTATUS)) + break; + TCHAR *filename = NULL; + if(f->szCurrentFile) + filename = mir_utf8decodeW(f->szCurrentFile); + else if(f->tszCurrentFile) + filename = mir_wstrdup(f->tszCurrentFile); + if(!filename) + break; TCHAR *temp = _wgetenv(_T("TEMP")); - if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, temp)) + if(_tcsstr(filename, temp)) + { + mir_free(filename); break; - else if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, _T(".gpg"))) //decrypt it + } + else if(_tcsstr(filename, _T(".gpg"))) //decrypt it { //process encrypted file if(_waccess(f->tszCurrentFile, 0) == -1) { @@ -303,7 +315,7 @@ int onProtoAck(WPARAM w, LPARAM l) DWORD code; pxResult result; wstring cmd = _T("-o "); - wstring file = f->tszCurrentFile; + wstring file = filename; wstring::size_type p1 = file.find(_T(".gpg")); file.erase(p1, _tcslen(_T(".gpg"))); if(_waccess(file.c_str(), 0) != -1) @@ -316,7 +328,7 @@ int onProtoAck(WPARAM w, LPARAM l) file.insert(file.length(), _T("\" ")); cmd += file; cmd += _T(" -d \""); - cmd += f->tszCurrentFile; + cmd += filename; cmd += _T("\""); gpg_execution_params params; params.cmd = &cmd; @@ -334,7 +346,8 @@ int onProtoAck(WPARAM w, LPARAM l) { MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK); } - DeleteFile(f->tszCurrentFile); + DeleteFile(filename); + mir_free(filename); } } break; @@ -918,9 +931,17 @@ string toUTF8(wstring str) return ustr; } -wstring toUTF16(string str) +wstring toUTF16(string str) //convert as much as possible { + string::iterator end_it = utf8::find_invalid(str.begin(), str.end()); + int length = utf8::distance(str.begin(), end_it); wstring ustr; - utf8::utf8to16(str.begin(), str.end(), back_inserter(ustr)); + utf8::utf8to16(str.begin(), end_it, back_inserter(ustr)); + string tmp; + while(end_it != str.end()) + str += *end_it; + TCHAR *tmp2 = mir_a2t(tmp.c_str()); + ustr += tmp2; + mir_free(tmp2); return ustr; } \ No newline at end of file -- cgit v1.2.3