From 16f34087d04db189c0d204540c873ebc910c0fa2 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 11 Aug 2013 14:39:15 +0000 Subject: trap #3 for a crash git-svn-id: http://svn.miranda-ng.org/main/trunk@5653 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/TabSRMM/src/chat/chat.h | 2 +- plugins/TabSRMM/src/chat/manager.cpp | 184 +++++++++++++++-------------------- plugins/TabSRMM/src/msgdlgutils.cpp | 2 +- plugins/TabSRMM/src/sidebar.cpp | 1 - plugins/TabSRMM/src/srmm.cpp | 6 +- 5 files changed, 83 insertions(+), 112 deletions(-) (limited to 'plugins') diff --git a/plugins/TabSRMM/src/chat/chat.h b/plugins/TabSRMM/src/chat/chat.h index 38ca3e9bd9..f64b71728c 100644 --- a/plugins/TabSRMM/src/chat/chat.h +++ b/plugins/TabSRMM/src/chat/chat.h @@ -154,7 +154,7 @@ struct STATUSINFO { TCHAR *pszGroup; HICON hIcon; - DWORD Status; + WORD Status; STATUSINFO *next; }; diff --git a/plugins/TabSRMM/src/chat/manager.cpp b/plugins/TabSRMM/src/chat/manager.cpp index 8171ea2dcc..651c7945ef 100644 --- a/plugins/TabSRMM/src/chat/manager.cpp +++ b/plugins/TabSRMM/src/chat/manager.cpp @@ -71,6 +71,12 @@ SESSION_INFO* SM_AddSession(const TCHAR* pszID, const char* pszModule) node->ptszID = mir_tstrdup(pszID); node->pszModule = mir_strdup(pszModule); + { + char *p = (char*)node; + _DebugTraceA("SESSION_INFO allocated: crashes at %lp %lp %lp %lp", + p + offsetof(SESSION_INFO, wStatus), p + offsetof(SESSION_INFO, wState), p + offsetof(SESSION_INFO, wCommandsNum), p + offsetof(SESSION_INFO, szSearch)); + } + MODULEINFO *mi = MM_FindModule(pszModule); if (mi) { mi->idleTimeStamp = time(0); @@ -903,6 +909,10 @@ STATUSINFO * TM_AddStatus(STATUSINFO** ppStatusList, const TCHAR* pszStatus, int if (!TM_FindStatus(*ppStatusList, pszStatus)) { STATUSINFO *node = (STATUSINFO*)mir_calloc(sizeof(STATUSINFO)); + { + char *p = (char*)node; + _DebugTraceA("STATUSINFO allocated: crashes at %lp", p + offsetof(STATUSINFO, Status)); + } replaceStrT(node->pszGroup, pszStatus); node->hIcon = (HICON)(*iCount); while ((int)node->hIcon > STATUSICONCOUNT - 1) @@ -1012,40 +1022,32 @@ static int sttCompareNicknames(const TCHAR *s1, const TCHAR *s2) static int UM_CompareItem(USERINFO * u1, const TCHAR* pszNick, WORD wStatus) { - int i; - WORD dw1 = u1->Status; WORD dw2 = wStatus; - for (i=0; i < 8; i++) { + for (int i=0; i < 8; i++) { if ((dw1 & 1) && !(dw2 & 1)) return -1; + if ((dw2 & 1) && !(dw1 & 1)) return 1; - if ((dw1 & 1) && (dw2 & 1)) - // - { + + if ((dw1 & 1) && (dw2 & 1)) { if (g_Settings.bAlternativeSorting) return sttCompareNicknames(u1->pszNick, pszNick); - else - return lstrcmp(u1->pszNick, pszNick); - }// + return lstrcmp(u1->pszNick, pszNick); + } dw1 = dw1 >> 1; dw2 = dw2 >> 1; } if (g_Settings.bAlternativeSorting) - // return sttCompareNicknames(u1->pszNick, pszNick); - else - return lstrcmp(u1->pszNick, pszNick); - // + return lstrcmp(u1->pszNick, pszNick); } -USERINFO * UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID) +USERINFO* UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID) { - USERINFO * pTemp = *ppUserList, *pLast = NULL; - USERINFO * node = NULL; - + USERINFO *pTemp = *ppUserList, *pLast = NULL; if (!pTemp || !pszUID) return NULL; @@ -1054,140 +1056,124 @@ USERINFO * UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID) pTemp = pTemp->next; } - if (pTemp) { - node = pTemp; - if (pLast) - pLast->next = pTemp->next; - else - *ppUserList = pTemp->next; - pTemp = *ppUserList; + if (pTemp == NULL) + return NULL; - pLast = NULL; + USERINFO *node = pTemp; + if (pLast) + pLast->next = pTemp->next; + else + *ppUserList = pTemp->next; + pTemp = *ppUserList; - while (pTemp && UM_CompareItem(pTemp, node->pszNick, node->Status) <= 0) { - pLast = pTemp; - pTemp = pTemp->next; - } + pLast = NULL; - if (*ppUserList == NULL) { // list is empty - *ppUserList = node; - node->next = NULL; - } else { - if (pLast) { - node->next = pTemp; - pLast->next = node; - } else { - node->next = *ppUserList; - *ppUserList = node; - } - } + while (pTemp && UM_CompareItem(pTemp, node->pszNick, node->Status) <= 0) { + pLast = pTemp; + pTemp = pTemp->next; + } - return node; + if (*ppUserList == NULL) { // list is empty + *ppUserList = node; + node->next = NULL; } - return NULL; + else if (pLast) { + node->next = pTemp; + pLast->next = node; + } + else { + node->next = *ppUserList; + *ppUserList = node; + } + + return node; } USERINFO* UM_AddUser(STATUSINFO* pStatusList, USERINFO** ppUserList, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus) { - USERINFO * pTemp = *ppUserList, *pLast = NULL; - if (!pStatusList || !ppUserList || !ppUserList) return NULL; + USERINFO *pTemp = *ppUserList, *pLast = NULL; while (pTemp && UM_CompareItem(pTemp, pszNick, wStatus) <= 0) { pLast = pTemp; pTemp = pTemp->next; } - // if (!UM_FindUser(*ppUserList, pszUI, wStatus) + USERINFO *node = (USERINFO*)mir_calloc(sizeof(USERINFO)); { - USERINFO *node = (USERINFO*) mir_alloc(sizeof(USERINFO)); - ZeroMemory(node, sizeof(USERINFO)); - replaceStrT(node->pszUID, pszUID); - - if (*ppUserList == NULL) { // list is empty - *ppUserList = node; - node->next = NULL; - } else { - if (pLast) { - node->next = pTemp; - pLast->next = node; - } else { - node->next = *ppUserList; - *ppUserList = node; - } - } + char *p = (char*)node; + _DebugTraceA("USERINFO allocated: crashes at %lp", + p + offsetof(USERINFO, Status), p + offsetof(USERINFO, ContactStatus)); + } + replaceStrT(node->pszUID, pszUID); - return node; + if (*ppUserList == NULL) { // list is empty + *ppUserList = node; + node->next = NULL; } - return NULL; + else if (pLast) { + node->next = pTemp; + pLast->next = node; + } + else { + node->next = *ppUserList; + *ppUserList = node; + } + + return node; } USERINFO* UM_FindUser(USERINFO* pUserList, const TCHAR* pszUID) { - USERINFO *pTemp = pUserList; - if (!pUserList || !pszUID) return NULL; - while (pTemp != NULL) { + for (USERINFO *pTemp = pUserList; pTemp != NULL; pTemp = pTemp->next) if (!lstrcmpi(pTemp->pszUID, pszUID)) return pTemp; - pTemp = pTemp->next; - } return 0; } USERINFO* UM_FindUserFromIndex(USERINFO* pUserList, int index) { - int i=0; - USERINFO *pTemp = pUserList; - if (!pUserList) return NULL; - while (pTemp != NULL) { - if (i == index) { + int i=0; + for (USERINFO *pTemp = pUserList; pTemp != NULL; pTemp = pTemp->next, i++) + if (i == index) return pTemp; - } - pTemp = pTemp->next; - i++; - } + return NULL; } USERINFO* UM_GiveStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status) { - USERINFO *pTemp = pUserList; - if (!pUserList || !pszUID) return NULL; - while (pTemp != NULL) { + for (USERINFO *pTemp = pUserList; pTemp != NULL; pTemp = pTemp->next) if (!lstrcmpi(pTemp->pszUID, pszUID)) { pTemp->Status |= status; return pTemp; } - pTemp = pTemp->next; - } + return 0; } USERINFO* UM_SetContactStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status) { - USERINFO *pTemp = pUserList; - if (!pUserList || !pszUID) return NULL; - while (pTemp != NULL) { + for (USERINFO *pTemp = pUserList; pTemp != NULL; pTemp = pTemp->next) if (!lstrcmpi(pTemp->pszUID, pszUID)) { pTemp->ContactStatus = status; return pTemp; } - pTemp = pTemp->next; - } + return 0; } @@ -1223,36 +1209,29 @@ BOOL UM_SetStatusEx(USERINFO* pUserList, const TCHAR* pszText, int flags) USERINFO* UM_TakeStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status) { - USERINFO *pTemp = pUserList; - if (!pUserList || !pszUID) return NULL; - while (pTemp != NULL) { + for (USERINFO *pTemp = pUserList; pTemp != NULL; pTemp = pTemp->next) if (!lstrcmpi(pTemp->pszUID, pszUID)) { pTemp->Status &= ~status; return pTemp; } - pTemp = pTemp->next; - } + return 0; } TCHAR* UM_FindUserAutoComplete(USERINFO* pUserList, const TCHAR* pszOriginal, const TCHAR* pszCurrent) { - TCHAR* pszName = NULL; - USERINFO *pTemp = pUserList; - if (!pUserList || !pszOriginal || !pszCurrent) return NULL; - while (pTemp != NULL) { + TCHAR *pszName = NULL; + for (USERINFO *pTemp = pUserList; pTemp != NULL; pTemp = pTemp->next) if (my_strstri(pTemp->pszNick, pszOriginal) == pTemp->pszNick) if (lstrcmpi(pTemp->pszNick, pszCurrent) > 0 && (!pszName || lstrcmpi(pTemp->pszNick, pszName) < 0)) pszName = pTemp->pszNick; - pTemp = pTemp->next; - } return pszName; } @@ -1305,15 +1284,10 @@ BOOL UM_RemoveAll(USERINFO** ppUserList) LOGINFO * LM_AddEvent(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd) { - - LOGINFO *node = NULL; - if (!ppLogListStart || !ppLogListEnd) return NULL; - node = (LOGINFO*) mir_alloc(sizeof(LOGINFO)); - ZeroMemory(node, sizeof(LOGINFO)); - + LOGINFO *node = (LOGINFO*)mir_calloc(sizeof(LOGINFO)); if (*ppLogListStart == NULL) { // list is empty *ppLogListStart = node; diff --git a/plugins/TabSRMM/src/msgdlgutils.cpp b/plugins/TabSRMM/src/msgdlgutils.cpp index 71cd93d012..ef0416e3bd 100644 --- a/plugins/TabSRMM/src/msgdlgutils.cpp +++ b/plugins/TabSRMM/src/msgdlgutils.cpp @@ -1985,7 +1985,7 @@ int TSAPI MsgWindowDrawHandler(WPARAM wParam, LPARAM lParam, TWindowData *dat) else StretchBlt(hdcDraw, xy_off, top + xy_off, (int)dNewWidth + width_off, iMaxHeight + width_off, hdcMem, 0, 0, bminfo.bmWidth, bminfo.bmHeight, SRCCOPY); - //_DebugTraceA("metrics: %d, %d %d, %d", (int)dNewWidth + width_off, iMaxHeight + width_off, bminfo.bmWidth, bminfo.bmHeight); + SelectObject(hdcMem, hbmMem); DeleteObject(hbmMem); DeleteDC(hdcMem); diff --git a/plugins/TabSRMM/src/sidebar.cpp b/plugins/TabSRMM/src/sidebar.cpp index 16210a08e3..d304d8965a 100644 --- a/plugins/TabSRMM/src/sidebar.cpp +++ b/plugins/TabSRMM/src/sidebar.cpp @@ -793,7 +793,6 @@ void CSideBar::Layout(const RECT *rc, bool fOnlyCalc) bottomEnabled = (m_totalItemHeight - m_firstVisibleOffset > rc->bottom); ::EndDeferWindowPos(hdwp); - //_DebugTraceA("layout: total %d, used: %d, first visible: %d", m_totalItemHeight, spaceUsed, m_firstVisibleOffset); if (!fOnlyCalc) { RECT rcContainer; ::GetClientRect(m_pContainer->hwnd, &rcContainer); diff --git a/plugins/TabSRMM/src/srmm.cpp b/plugins/TabSRMM/src/srmm.cpp index a85912ad55..2770a3ec73 100644 --- a/plugins/TabSRMM/src/srmm.cpp +++ b/plugins/TabSRMM/src/srmm.cpp @@ -166,11 +166,9 @@ int _DebugTraceA(const char *fmt, ...) #else { char szLogFileName[MAX_PATH], szDataPath[MAX_PATH]; - FILE *f; - CallService(MS_DB_GETPROFILEPATH, MAX_PATH, (LPARAM)szDataPath); - mir_snprintf(szLogFileName, MAX_PATH, "%s\\%s", szDataPath, "tabsrmm_debug.log"); - f = fopen(szLogFileName, "a+"); + mir_snprintf(szLogFileName, MAX_PATH, "%s\\tabsrmm_debug.log", szDataPath); + FILE *f = fopen(szLogFileName, "a+"); if (f) { fputs(debug, f); fputs("\n", f); -- cgit v1.2.3