summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/stdfile/src/file.cpp65
-rw-r--r--src/core/stdmsg/src/cmdlist.cpp2
-rw-r--r--src/core/stdmsg/src/msgdialog.cpp38
3 files changed, 40 insertions, 65 deletions
diff --git a/src/core/stdfile/src/file.cpp b/src/core/stdfile/src/file.cpp
index 042d1fe44e..fbe092784a 100644
--- a/src/core/stdfile/src/file.cpp
+++ b/src/core/stdfile/src/file.cpp
@@ -371,27 +371,6 @@ INT_PTR openRecDir(WPARAM, LPARAM)
/////////////////////////////////////////////////////////////////////////////////////////
-static void sttRecvCreateBlob(DBEVENTINFO &dbei, int fileCount, char **pszFiles, char *szDescr)
-{
- dbei.cbBlob = sizeof(DWORD);
-
- for (int i = 0; i < fileCount; i++)
- dbei.cbBlob += (int)mir_strlen(pszFiles[i]) + 1;
-
- dbei.cbBlob += (int)mir_strlen(szDescr) + 1;
-
- if ((dbei.pBlob = (BYTE*)mir_alloc(dbei.cbBlob)) == 0)
- return;
-
- *(DWORD*)dbei.pBlob = 0;
- BYTE* p = dbei.pBlob + sizeof(DWORD);
- for (int i = 0; i < fileCount; i++) {
- strcpy((char*)p, pszFiles[i]);
- p += mir_strlen(pszFiles[i]) + 1;
- }
- strcpy((char*)p, (szDescr == NULL) ? "" : szDescr);
-}
-
static INT_PTR Proto_RecvFileT(WPARAM, LPARAM lParam)
{
CCSDATA *ccs = (CCSDATA*)lParam;
@@ -402,20 +381,46 @@ static INT_PTR Proto_RecvFileT(WPARAM, LPARAM lParam)
DBEVENTINFO dbei = { sizeof(dbei) };
dbei.szModule = GetContactProto(ccs->hContact);
dbei.timestamp = pre->timestamp;
- dbei.flags = (pre->flags & PREF_CREATEREAD) ? DBEF_READ : 0;
+ dbei.flags = DBEF_UTF | (pre->dwFlags & PREF_CREATEREAD) ? DBEF_READ : 0;
dbei.eventType = EVENTTYPE_FILE;
- char **pszFiles = (char**)alloca(pre->fileCount * sizeof(char*));
- for (int i = 0; i < pre->fileCount; i++)
- pszFiles[i] = Utf8EncodeT(pre->ptszFiles[i]);
+ bool bUnicode = (pre->dwFlags & PRFF_UNICODE) == PRFF_UNICODE;
- char *szDescr = Utf8EncodeT(pre->tszDescription);
- dbei.flags |= DBEF_UTF;
- sttRecvCreateBlob(dbei, pre->fileCount, pszFiles, szDescr);
+ char *szDescr, **pszFiles;
+ if (bUnicode) {
+ pszFiles = (char**)alloca(pre->fileCount * sizeof(char*));
+ for (int i = 0; i < pre->fileCount; i++)
+ pszFiles[i] = Utf8EncodeT(pre->ptszFiles[i]);
+
+ szDescr = Utf8EncodeT(pre->tszDescription);
+ }
+ else {
+ pszFiles = pre->pszFiles;
+ szDescr = pre->szDescription;
+ }
+
+ dbei.cbBlob = sizeof(DWORD);
for (int i = 0; i < pre->fileCount; i++)
- mir_free(pszFiles[i]);
- mir_free(szDescr);
+ dbei.cbBlob += (int)mir_strlen(pszFiles[i]) + 1;
+
+ dbei.cbBlob += (int)mir_strlen(szDescr) + 1;
+
+ if ((dbei.pBlob = (BYTE*)mir_alloc(dbei.cbBlob)) == 0)
+ return 0;
+
+ *(DWORD*)dbei.pBlob = 0;
+ BYTE* p = dbei.pBlob + sizeof(DWORD);
+ for (int i = 0; i < pre->fileCount; i++) {
+ strcpy((char*)p, pszFiles[i]);
+ p += mir_strlen(pszFiles[i]) + 1;
+ if (bUnicode)
+ mir_free(pszFiles[i]);
+ }
+
+ strcpy((char*)p, (szDescr == NULL) ? "" : szDescr);
+ if (bUnicode)
+ mir_free(szDescr);
MEVENT hdbe = db_event_add(ccs->hContact, &dbei);
PushFileEvent(ccs->hContact, hdbe, pre->lParam);
diff --git a/src/core/stdmsg/src/cmdlist.cpp b/src/core/stdmsg/src/cmdlist.cpp
index f462ddbb14..4fa38ae9ac 100644
--- a/src/core/stdmsg/src/cmdlist.cpp
+++ b/src/core/stdmsg/src/cmdlist.cpp
@@ -94,7 +94,7 @@ void msgQueue_processack(MCONTACT hContact, int id, BOOL success, const char *sz
DBEVENTINFO dbei = { sizeof(dbei) };
dbei.eventType = EVENTTYPE_MESSAGE;
- dbei.flags = DBEF_SENT | (p->flags & PREF_UTF ? DBEF_UTF : 0) | (p->flags & PREF_RTL ? DBEF_RTL : 0);
+ dbei.flags = DBEF_SENT | DBEF_UTF | (p->flags & PREF_RTL ? DBEF_RTL : 0);
dbei.szModule = GetContactProto(hContact);
dbei.timestamp = time(0);
dbei.cbBlob = (DWORD)mir_strlen(p->szMsg);
diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp
index 9e72a86f62..af2c574587 100644
--- a/src/core/stdmsg/src/msgdialog.cpp
+++ b/src/core/stdmsg/src/msgdialog.cpp
@@ -53,15 +53,6 @@ static void NotifyLocalWinEvent(MCONTACT hContact, HWND hwnd, unsigned int type)
}
}
-static BOOL IsUtfSendAvailable(MCONTACT hContact)
-{
- char *szProto = GetContactProto(hContact);
- if (szProto == NULL)
- return FALSE;
-
- return (CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_IMSENDUTF) ? TRUE : FALSE;
-}
-
static int RTL_Detect(const TCHAR *ptszText)
{
int iLen = (int)_tcslen(ptszText);
@@ -81,34 +72,13 @@ int SendMessageDirect(const TCHAR *szMsg, MCONTACT hContact, char *szProto)
return NULL;
int flags = 0;
- int bufSize = 0;
- char *sendBuffer = NULL;
-
if (RTL_Detect(szMsg))
flags |= PREF_RTL;
- if (IsUtfSendAvailable(hContact)) {
- flags |= PREF_UTF;
- sendBuffer = mir_utf8encodeT(szMsg);
- if (!sendBuffer || !sendBuffer[0]) {
- mir_free(sendBuffer);
- return NULL;
- }
- bufSize = (int)strlen(sendBuffer) + 1;
- }
- else {
- flags |= PREF_TCHAR;
- sendBuffer = mir_t2a(szMsg);
- if (!sendBuffer || !sendBuffer[0]) {
- mir_free(sendBuffer);
- return NULL;
- }
- bufSize = (int)strlen(sendBuffer) + 1;
-
- size_t bufSizeT = (_tcslen(szMsg) + 1) * sizeof(TCHAR);
- sendBuffer = (char*)mir_realloc(sendBuffer, bufSizeT + bufSize);
- memcpy((TCHAR*)&sendBuffer[bufSize], szMsg, bufSizeT);
- bufSize += (int)bufSizeT;
+ char *sendBuffer = mir_utf8encodeT(szMsg);
+ if (!sendBuffer || !sendBuffer[0]) {
+ mir_free(sendBuffer);
+ return NULL;
}
if (sendBuffer == NULL)