From 1c44f2df0725c7673b0522121461337270cd47c6 Mon Sep 17 00:00:00 2001
From: George Hazan <george.hazan@gmail.com>
Date: Thu, 21 Feb 2013 13:03:09 +0000
Subject: service MS_VARS_FREEMEMORY replaced with the direct call of mir_free

git-svn-id: http://svn.miranda-ng.org/main/trunk@3669 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 plugins/TipperYM/src/subst.cpp | 302 ++++++++++++++++++++---------------------
 1 file changed, 149 insertions(+), 153 deletions(-)

(limited to 'plugins/TipperYM')

diff --git a/plugins/TipperYM/src/subst.cpp b/plugins/TipperYM/src/subst.cpp
index 9320430577..6d439f8bec 100644
--- a/plugins/TipperYM/src/subst.cpp
+++ b/plugins/TipperYM/src/subst.cpp
@@ -15,7 +15,7 @@ Library General Public License for more details.
 You should have received a copy of the GNU Library General Public
 License along with this file; see the file license.txt.  If
 not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  
+Boston, MA 02111-1307, USA.
 */
 
 #include "common.h"
@@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA.
 #include "popwin.h"
 
 
-int ProtoServiceExists(const char *szModule, const char *szService) 
+int ProtoServiceExists(const char *szModule, const char *szService)
 {
 	char str[MAXMODULELABELLENGTH];
 	strcpy(str,szModule);
@@ -32,7 +32,7 @@ int ProtoServiceExists(const char *szModule, const char *szService)
 	return ServiceExists(str);
 }
 
-bool DBGetContactSettingAsString(HANDLE hContact, const char *szModuleName, const char *szSettingName, TCHAR *buff, int bufflen) 
+bool DBGetContactSettingAsString(HANDLE hContact, const char *szModuleName, const char *szSettingName, TCHAR *buff, int bufflen)
 {
 	DBVARIANT dbv;
 	buff[0] = 0;
@@ -42,7 +42,7 @@ bool DBGetContactSettingAsString(HANDLE hContact, const char *szModuleName, cons
 
 	if (!DBGetContactSetting(hContact, szModuleName, szSettingName, &dbv))
 	{
-		switch(dbv.type) 
+		switch(dbv.type)
 		{
 		case DBVT_BYTE:
 			_itot(dbv.bVal, buff, 10);
@@ -75,12 +75,12 @@ bool DBGetContactSettingAsString(HANDLE hContact, const char *szModuleName, cons
 	return buff[0] ? true : false;
 }
 
-void StripBBCodesInPlace(TCHAR *swzText) 
+void StripBBCodesInPlace(TCHAR *swzText)
 {
 	if (!DBGetContactSettingByte(0, MODULE, "StripBBCodes", 1))
 		return;
 
-	if (swzText == 0) 
+	if (swzText == 0)
 		return;
 
 	size_t iRead = 0, iWrite = 0;
@@ -88,7 +88,7 @@ void StripBBCodesInPlace(TCHAR *swzText)
 
 	while(iRead <= iLen)  // copy terminating null too
 	{
-		while(iRead <= iLen && swzText[iRead] != '[') 
+		while(iRead <= iLen && swzText[iRead] != '[')
 		{
 			if (swzText[iRead] != swzText[iWrite]) swzText[iWrite] = swzText[iRead];
 			iRead++; iWrite++;
@@ -101,21 +101,21 @@ void StripBBCodesInPlace(TCHAR *swzText)
 			iRead += 3;
 		else if (iLen - iRead >= 4 && (_tcsnicmp(swzText + iRead, _T("[/b]"), 4) == 0 || _tcsnicmp(swzText + iRead, _T("[/i]"), 4) == 0))
 			iRead += 4;
-		else if (iLen - iRead >= 6 && (_tcsnicmp(swzText + iRead, _T("[color"), 6) == 0)) 
+		else if (iLen - iRead >= 6 && (_tcsnicmp(swzText + iRead, _T("[color"), 6) == 0))
 		{
-			while(iRead < iLen && swzText[iRead] != ']') iRead++; 
+			while(iRead < iLen && swzText[iRead] != ']') iRead++;
 			iRead++;// skip the ']'
-		} 
+		}
 		else if (iLen - iRead >= 8 && (_tcsnicmp(swzText + iRead, _T("[/color]"), 8) == 0))
 			iRead += 8;
 		else if (iLen - iRead >= 5 && (_tcsnicmp(swzText + iRead, _T("[size"), 5) == 0))
 		{
-			while(iRead < iLen && swzText[iRead] != ']') iRead++; 
+			while(iRead < iLen && swzText[iRead] != ']') iRead++;
 			iRead++;// skip the ']'
-		} 
+		}
 		else if (iLen - iRead >= 7 && (_tcsnicmp(swzText + iRead, _T("[/size]"), 7) == 0))
 			iRead += 7;
-		else 
+		else
 		{
 			if (swzText[iRead] != swzText[iWrite]) swzText[iWrite] = swzText[iRead];
 			iRead++; iWrite++;
@@ -123,28 +123,28 @@ void StripBBCodesInPlace(TCHAR *swzText)
 	}
 }
 
-DWORD LastMessageTimestamp(HANDLE hContact) 
+DWORD LastMessageTimestamp(HANDLE hContact)
 {
 	DBEVENTINFO dbei = {0};
 	dbei.cbSize = sizeof(dbei);
 	HANDLE hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDLAST, (WPARAM)hContact, 0);
-	while (hDbEvent) 
+	while (hDbEvent)
 	{
 		dbei.cbBlob = 0;
 		CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbei);
 		if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & DBEF_SENT))
 			break;
-		
+
 		hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDPREV, (WPARAM)hDbEvent, 0);
 	}
 
-	if (hDbEvent) 
+	if (hDbEvent)
 		return dbei.timestamp;
 
 	return 0;
 }
 
-void FormatTimestamp(DWORD ts, char *szFormat, TCHAR *buff, int bufflen) 
+void FormatTimestamp(DWORD ts, char *szFormat, TCHAR *buff, int bufflen)
 {
 	TCHAR swzForm[16];
 	DBTIMETOSTRINGT dbt = {0};
@@ -155,14 +155,14 @@ void FormatTimestamp(DWORD ts, char *szFormat, TCHAR *buff, int bufflen)
 	CallService(MS_DB_TIME_TIMESTAMPTOSTRINGT, (WPARAM)ts, (LPARAM)&dbt);
 }
 
-bool Uid(HANDLE hContact, char *szProto, TCHAR *buff, int bufflen) 
+bool Uid(HANDLE hContact, char *szProto, TCHAR *buff, int bufflen)
 {
 	char *tmpProto = NULL;
 
 	if (hContact) tmpProto = GetContactProto(hContact);
 	else tmpProto = szProto;
 
-	if (tmpProto) 
+	if (tmpProto)
 	{
 		char *szUid = ( char* )CallProtoService(tmpProto, PS_GETCAPS, PFLAG_UNIQUEIDSETTING, 0);
 		if (szUid && (INT_PTR)szUid != CALLSERVICE_NOTFOUND)
@@ -172,7 +172,7 @@ bool Uid(HANDLE hContact, char *szProto, TCHAR *buff, int bufflen)
 	return false;
 }
 
-bool UidName(char *szProto, TCHAR *buff, int bufflen) 
+bool UidName(char *szProto, TCHAR *buff, int bufflen)
 {
 	if (szProto)
 	{
@@ -181,33 +181,33 @@ bool UidName(char *szProto, TCHAR *buff, int bufflen)
 		{
 			a2t(szUidName, buff, bufflen);
 			return true;
-		}       
+		}
 	}
 	return false;
 }
 
-TCHAR *GetLastMessageText(HANDLE hContact) 
+TCHAR *GetLastMessageText(HANDLE hContact)
 {
 	DBEVENTINFO dbei = {0};
 	dbei.cbSize = sizeof(dbei);
 
 	HANDLE hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDLAST, (WPARAM)hContact, 0);
-	while (hDbEvent) 
+	while (hDbEvent)
 	{
 		dbei.cbBlob = 0;
 		CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbei);
 		if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & DBEF_SENT))
 			break;
-		
+
 		hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDPREV, (WPARAM)hDbEvent, 0);
 	}
 
-	if (hDbEvent) 
+	if (hDbEvent)
 	{
 		dbei.pBlob = (BYTE *)alloca(dbei.cbBlob);
 		CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbei);
 
-		if (dbei.cbBlob == 0 || dbei.pBlob == 0) 
+		if (dbei.cbBlob == 0 || dbei.pBlob == 0)
 			return 0;
 
 		TCHAR *buff = DbGetEventTextT( &dbei, CP_ACP );
@@ -223,27 +223,27 @@ TCHAR *GetLastMessageText(HANDLE hContact)
 
 bool CanRetrieveStatusMsg(HANDLE hContact, char *szProto)
 {
-	if (opt.bGetNewStatusMsg) 
+	if (opt.bGetNewStatusMsg)
 	{
 		int iFlags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_3, 0);
 		WORD wStatus = DBGetContactSettingWord(hContact, szProto, "Status", ID_STATUS_OFFLINE);
 		if ((CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND) && (iFlags & Proto_Status2Flag(wStatus)))
 		{
 			iFlags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0) & (PF1_VISLIST | PF1_INVISLIST);
-			if (opt.bDisableIfInvisible && iFlags) 
+			if (opt.bDisableIfInvisible && iFlags)
 			{
-				int iVisMode = DBGetContactSettingWord(hContact, szProto, "ApparentMode", 0); 
+				int iVisMode = DBGetContactSettingWord(hContact, szProto, "ApparentMode", 0);
 				int wProtoStatus = CallProtoService(szProto, PS_GETSTATUS, 0, 0);
 				if ((iVisMode == ID_STATUS_OFFLINE) || (wProtoStatus == ID_STATUS_INVISIBLE && iVisMode != ID_STATUS_ONLINE))
 					return false;
 				else
 					return true;
-			} 
+			}
 			else
 			{
 				return true;
 			}
-		} 
+		}
 		else
 		{
 			return false;
@@ -253,25 +253,25 @@ bool CanRetrieveStatusMsg(HANDLE hContact, char *szProto)
 	return false;
 }
 
-TCHAR *GetStatusMessageText(HANDLE hContact) 
+TCHAR *GetStatusMessageText(HANDLE hContact)
 {
 	TCHAR *swzMsg = 0;
 	DBVARIANT dbv;
 
 	char *szProto = GetContactProto(hContact);
-	if (szProto) 
+	if (szProto)
 	{
 		if (!strcmp(szProto, szMetaModuleName))
 		{
 			hContact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT, (WPARAM)hContact, 0);
 		}
-		else 
-		{	
+		else
+		{
 			WORD wStatus = (int)CallProtoService(szProto, PS_GETSTATUS, 0, 0);
-			if (wStatus == ID_STATUS_OFFLINE) 
+			if (wStatus == ID_STATUS_OFFLINE)
 				return NULL;
 
-			if (!DBGetContactSettingTString(hContact, MODULE, "TempStatusMsg", &dbv)) 
+			if (!DBGetContactSettingTString(hContact, MODULE, "TempStatusMsg", &dbv))
 			{
 				if (_tcslen(dbv.ptszVal) != 0)
 					swzMsg = mir_tstrdup(dbv.ptszVal);
@@ -279,7 +279,7 @@ TCHAR *GetStatusMessageText(HANDLE hContact)
 			}
 		}
 
-		if (!swzMsg) 
+		if (!swzMsg)
 		{
 			if (CanRetrieveStatusMsg(hContact, szProto))
 			{
@@ -287,7 +287,7 @@ TCHAR *GetStatusMessageText(HANDLE hContact)
 					return NULL;
 			}
 
-			if (!DBGetContactSettingTString(hContact, "CList", "StatusMsg", &dbv)) 
+			if (!DBGetContactSettingTString(hContact, "CList", "StatusMsg", &dbv))
 			{
 				if (dbv.ptszVal && _tcslen(dbv.ptszVal) != 0)
 					swzMsg = mir_tstrdup(dbv.ptszVal);
@@ -296,19 +296,19 @@ TCHAR *GetStatusMessageText(HANDLE hContact)
 		}
 	}
 
-	if (swzMsg) 
+	if (swzMsg)
 		StripBBCodesInPlace(swzMsg);
 
 	return swzMsg;
 }
 
-bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int bufflen) 
+bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int bufflen)
 {
 	if (!_tcscmp(swzRawSpec, _T("uid")))
 	{
 		return Uid(hContact, 0, buff, bufflen);
-	} 
-	else if (!_tcscmp(swzRawSpec, _T("proto"))) 
+	}
+	else if (!_tcscmp(swzRawSpec, _T("proto")))
 	{
 		char *szProto = GetContactProto(hContact);
 		if (szProto)
@@ -316,15 +316,15 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 			a2t(szProto, buff, bufflen);
 			return true;
 		}
-	} 
-	else if (!_tcscmp(swzRawSpec, _T("account"))) 
+	}
+	else if (!_tcscmp(swzRawSpec, _T("account")))
 	{
 		char *szProto = ( char* )CallService(MS_PROTO_GETCONTACTBASEACCOUNT, (WPARAM)hContact, 0);
-		if ((INT_PTR)szProto == CALLSERVICE_NOTFOUND) 
+		if ((INT_PTR)szProto == CALLSERVICE_NOTFOUND)
 		{
 			return GetSysSubstText(hContact, _T("proto"), buff, bufflen);
 		}
-		else if (szProto) 
+		else if (szProto)
 		{
 			PROTOACCOUNT *pa = ProtoGetAccount(szProto);
 			if (pa && pa->tszAccountName)
@@ -335,18 +335,18 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 			else
 				return GetSysSubstText(hContact, _T("proto"), buff, bufflen);
 		}
-	} 
-	else if (!_tcscmp(swzRawSpec, _T("time"))) 
+	}
+	else if (!_tcscmp(swzRawSpec, _T("time")))
 	{
 		if (tmi.printDateTime && !tmi.printDateTimeByContact(hContact, _T("t"), buff, bufflen, TZF_KNOWNONLY))
 			return true;
 	}
 	else if (!_tcscmp(swzRawSpec, _T("uidname")))
 	{
-		char *szProto = GetContactProto(hContact); 
+		char *szProto = GetContactProto(hContact);
 		return UidName(szProto, buff, bufflen);
 	}
-	else if (!_tcscmp(swzRawSpec, _T("status_msg"))) 
+	else if (!_tcscmp(swzRawSpec, _T("status_msg")))
 	{
 		TCHAR *swzMsg = GetStatusMessageText(hContact);
 		if (swzMsg)
@@ -355,7 +355,7 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 			mir_free(swzMsg);
 			return true;
 		}
-	} 
+	}
 	else if (!_tcscmp(swzRawSpec, _T("last_msg")))
 	{
 		TCHAR *swzMsg = GetLastMessageText(hContact);
@@ -365,8 +365,8 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 			mir_free(swzMsg);
 			return true;
 		}
-	} 
-	else if (!_tcscmp(swzRawSpec, _T("meta_subname"))) 
+	}
+	else if (!_tcscmp(swzRawSpec, _T("meta_subname")))
 	{
 		// get contact list name of active subcontact
 		HANDLE hSubContact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT, (WPARAM)hContact, 0);
@@ -374,35 +374,35 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 		TCHAR *swzNick = (TCHAR *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hSubContact, GCDNF_TCHAR);
 		if (swzNick) _tcsncpy(buff, swzNick, bufflen);
 		return true;
-	} 
+	}
 	else if (!_tcscmp(swzRawSpec, _T("meta_subuid")))
 	{
 		HANDLE hSubContact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT, (WPARAM)hContact, 0);
 		if (!hSubContact || (INT_PTR)hSubContact == CALLSERVICE_NOTFOUND) return false;
 		return Uid(hSubContact, 0, buff, bufflen);
-	} 
+	}
 	else if (!_tcscmp(swzRawSpec, _T("meta_subproto")))
 	{
 		// get protocol of active subcontact
 		HANDLE hSubContact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT, (WPARAM)hContact, 0);
-		if (!hSubContact || (INT_PTR)hSubContact == CALLSERVICE_NOTFOUND) 
+		if (!hSubContact || (INT_PTR)hSubContact == CALLSERVICE_NOTFOUND)
 			return false;
 		return GetSysSubstText(hSubContact, _T("account"), buff, bufflen);
-	} 
-	else if (!_tcscmp(swzRawSpec, _T("last_msg_time"))) 
+	}
+	else if (!_tcscmp(swzRawSpec, _T("last_msg_time")))
 	{
 		DWORD ts = LastMessageTimestamp(hContact);
 		if (ts == 0) return false;
 		FormatTimestamp(ts, "t", buff, bufflen);
 		return true;
-	} 
-	else if (!_tcscmp(swzRawSpec, _T("last_msg_date"))) 
+	}
+	else if (!_tcscmp(swzRawSpec, _T("last_msg_date")))
 	{
 		DWORD ts = LastMessageTimestamp(hContact);
 		if (ts == 0) return false;
 		FormatTimestamp(ts, "d", buff, bufflen);
 		return true;
-	} 
+	}
 	else if (!_tcscmp(swzRawSpec, _T("last_msg_reltime")))
 	{
 		DWORD ts = LastMessageTimestamp(hContact);
@@ -416,7 +416,7 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 		else if (h > 0) mir_sntprintf(buff, bufflen, TranslateT("%dh %dm"), h, m);
 		else mir_sntprintf(buff, bufflen, TranslateT("%dm"), m);
 		return true;
-	} 
+	}
 	else if (!_tcscmp(swzRawSpec, _T("msg_count_all")) || !_tcscmp(swzRawSpec, _T("msg_count_out")) || !_tcscmp(swzRawSpec, _T("msg_count_in")))
 	{
 		DWORD dwCountOut, dwCountIn;
@@ -442,9 +442,9 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 			if (dwDiff > (60 * 60 * 24 * 3))
 			{
 				DBWriteContactSettingDword(hTmpContact, MODULE, "LastCountTS", dwTime);
-				dwCountOut = dwCountIn = dwLastTs = 0;		
-			} 
-			else 
+				dwCountOut = dwCountIn = dwLastTs = 0;
+			}
+			else
 			{
 				dwCountOut = DBGetContactSettingDword(hTmpContact, MODULE, "MsgCountOut", 0);
 				dwCountIn = DBGetContactSettingDword(hTmpContact, MODULE, "MsgCountIn", 0);
@@ -454,21 +454,21 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 			dwNewTs = dwLastTs;
 
 			HANDLE dbe = (HANDLE)CallService(MS_DB_EVENT_FINDLAST, (WPARAM)hTmpContact, 0);
-			while (dbe != NULL) 
+			while (dbe != NULL)
 			{
 				DBEVENTINFO dbei = {0};
 				dbei.cbSize = sizeof(dbei);
 				if (!CallService(MS_DB_EVENT_GET, (WPARAM)dbe, (LPARAM)&dbei))
 				{
-					if (dbei.eventType == EVENTTYPE_MESSAGE) 
+					if (dbei.eventType == EVENTTYPE_MESSAGE)
 					{
 						dwNewTs = max(dwNewTs, dbei.timestamp);
-						if (dbei.timestamp > dwLastTs) 
+						if (dbei.timestamp > dwLastTs)
 						{
 							if (dbei.flags & DBEF_SENT) dwCountOut++;
 							else dwCountIn++;
-						} 
-						else 
+						}
+						else
 							break;
 					}
 				}
@@ -481,7 +481,7 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 				DBWriteContactSettingDword(hTmpContact, MODULE, "MsgCountIn", dwCountIn);
 				DBWriteContactSettingDword(hTmpContact, MODULE, "LastMsgTS", dwNewTs);
 			}
-			
+
 			dwMetaCountOut += dwCountOut;
 			dwMetaCountIn += dwCountIn;
 		}
@@ -498,22 +498,22 @@ bool GetSysSubstText(HANDLE hContact, TCHAR *swzRawSpec, TCHAR *buff, int buffle
 	return false;
 }
 
-bool GetSubstText(HANDLE hContact, const DISPLAYSUBST &ds, TCHAR *buff, int bufflen) 
+bool GetSubstText(HANDLE hContact, const DISPLAYSUBST &ds, TCHAR *buff, int bufflen)
 {
 	TranslateFunc *transFunc = 0;
 	for (int i = 0; i < iTransFuncsCount; i++)
 	{
-		if (translations[i].id == (DWORD)ds.iTranslateFuncId) 
+		if (translations[i].id == (DWORD)ds.iTranslateFuncId)
 		{
 			transFunc = translations[i].transFunc;
 			break;
 		}
 	}
 
-	if (!transFunc) 
+	if (!transFunc)
 		return false;
 
-	switch (ds.type) 
+	switch (ds.type)
 	{
 		case DVT_DB:
 			return transFunc(hContact, ds.szModuleName, ds.szSettingName, buff, bufflen) != 0;
@@ -528,15 +528,15 @@ bool GetSubstText(HANDLE hContact, const DISPLAYSUBST &ds, TCHAR *buff, int buff
 					return transFunc(hContact, "UserInfo", ds.szSettingName, buff, bufflen) != 0;
 			}
 			break;
-		}			
+		}
 	}
 	return false;
 }
 
-bool GetRawSubstText(HANDLE hContact, char *szRawSpec, TCHAR *buff, int bufflen) 
+bool GetRawSubstText(HANDLE hContact, char *szRawSpec, TCHAR *buff, int bufflen)
 {
 	size_t lenght = strlen(szRawSpec);
-	for (size_t i = 0; i < lenght; i++) 
+	for (size_t i = 0; i < lenght; i++)
 	{
 		if (szRawSpec[i] == '/')
 		{
@@ -550,7 +550,7 @@ bool GetRawSubstText(HANDLE hContact, char *szRawSpec, TCHAR *buff, int bufflen)
 						return true;
 					else
 						return translations[0].transFunc(hContact, "UserInfo", &szRawSpec[i + 1], buff, bufflen) != 0;
-				} 
+				}
 				else
 				{
 					return false;
@@ -565,7 +565,7 @@ bool GetRawSubstText(HANDLE hContact, char *szRawSpec, TCHAR *buff, int bufflen)
 	return false;
 }
 
-bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFirst, TCHAR *swzDest, int iDestLen) 
+bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFirst, TCHAR *swzDest, int iDestLen)
 {
 	// hack - allow empty strings before passing to variables (note - zero length strings return false after this)
 	if (swzDest && swzSource && _tcslen(swzSource) == 0) {
@@ -585,18 +585,18 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 
 	TCHAR swzVName[LABEL_LEN];
 	TCHAR swzRep[VALUE_LEN], swzAlt[VALUE_LEN];
-	while (si < iSourceLen && di < (size_t)iDestLen - 1) 
+	while (si < iSourceLen && di < (size_t)iDestLen - 1)
 	{
 		if (swzVarSrc[si] == _T('%'))
 		{
 			si++;
 			v = 0;
-			while (si < iSourceLen && v < LABEL_LEN) 
+			while (si < iSourceLen && v < LABEL_LEN)
 			{
 				if (swzVarSrc[si] == _T('%'))
-				{					
+				{
 					// two %'s in a row in variable name disabled: e.g. %a%%b% - this is atbbguous]
-					//if (si + 1 < iSourceLen && swzVarSrc[si + 1] == _T('%')) { 
+					//if (si + 1 < iSourceLen && swzVarSrc[si + 1] == _T('%')) {
 					//	si++; // skip first %, allow following code to add the second one to the variable name
 					//} else
 						break;
@@ -608,7 +608,7 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 			if (v == 0)  // bSubst len is 0 - just a % symbol
 			{
 				swzDest[di] = _T('%');
-			} 
+			}
 			else if (si < iSourceLen) // we found end %
 			{
 				swzVName[v] = 0;
@@ -618,11 +618,11 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 
 				// apply only to specific protocols
 				TCHAR *p = _tcsrchr(swzVName, _T('^')); // use last '^', so if you want a ^ in swzAlt text, you can just put a '^' on the end
-				if (p) 
+				if (p)
 				{
 					*p = 0;
 					p++;
-					if (*p) 
+					if (*p)
 					{
 						char *cp = GetContactProto(hContact);
 						if (cp != NULL)
@@ -633,12 +633,12 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 								cp = acc->szProtoName;
 							}
 						}
-						
+
 						if (cp == NULL)
 							goto empty;
 
 						bool negate = false;
-						if (*p == _T('!')) 
+						if (*p == _T('!'))
 						{
 							p++;
 							if (*p == 0) goto error;
@@ -666,7 +666,7 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 							}
 						}
 
-						if (negate ? spec : !spec) 
+						if (negate ? spec : !spec)
 							goto empty;
 					}
 				}
@@ -674,31 +674,31 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 				// get alternate text, if bSubst fails
 				swzAlt[0] = 0;
 				p = _tcschr(swzVName, _T('|')); // use first '|' - so you can use the '|' symbol in swzAlt text
-				if (p) 
+				if (p)
 				{
 					*p = 0; // clip swzAlt from swzVName
-					p++;	
+					p++;
 					if (_tcslen(p) > 4 && _tcsncmp(p, _T("raw:"), 4) == 0) // raw db substitution
-					{ 
+					{
 						char raw_spec[LABEL_LEN];
 						p += 4;
 						t2a(p, raw_spec, LABEL_LEN);
 						GetRawSubstText(hContact, raw_spec, swzAlt, VALUE_LEN);
-					} 
+					}
 					else if (_tcslen(p) > 4 && _tcsncmp(p, _T("sys:"), 4) == 0) // 'system' substitution
-					{ 
+					{
 						p += 4;
 						GetSysSubstText(hContact, p, swzAlt, VALUE_LEN);
-					} 
+					}
 					else
 					{
 						// see if we can find the bSubst
 						DSListNode *ds_node = opt.dsList;
-						while(ds_node) 
+						while(ds_node)
 						{
 							if (_tcscmp(ds_node->ds.swzName, p) == 0)
 								break;
-				
+
 							ds_node = ds_node->next;
 						}
 
@@ -706,28 +706,28 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 						{
 							GetSubstText(hContact, ds_node->ds, swzAlt, VALUE_LEN);
 						}
-						else 
+						else
 						{
 							_tcsncpy(swzAlt, p, VALUE_LEN);
 							bAltSubst = true;
 						}
 					}
 					swzAlt[VALUE_LEN - 1] = 0;
-					if (_tcslen(swzAlt) != 0) 
+					if (_tcslen(swzAlt) != 0)
 						bAltSubst = true;
 				}
-			
+
 				// get bSubst text
 				if (v > 4 && _tcsncmp(swzVName, _T("raw:"), 4) == 0) // raw db substitution
-				{ 
+				{
 					char raw_spec[LABEL_LEN];
 					t2a(&swzVName[4], raw_spec, LABEL_LEN);
 					bSubst = GetRawSubstText(hContact, raw_spec, swzRep, VALUE_LEN);
-				} 
+				}
 				else if (v > 4 && _tcsncmp(swzVName, _T("sys:"), 4) == 0) // 'system' substitution
 				{
 					bSubst = GetSysSubstText(hContact, &swzVName[4], swzRep, VALUE_LEN);
-				} 
+				}
 				else
 				{
 					// see if we can find the bSubst
@@ -736,13 +736,13 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 					{
 						if (_tcscmp(ds_node->ds.swzName, swzVName) == 0)
 							break;
-						
+
 						ds_node = ds_node->next;
 					}
 
-					if (!ds_node) 
+					if (!ds_node)
 						goto error; // no such bSubst
-				
+
 					bSubst = GetSubstText(hContact, ds_node->ds, swzRep, VALUE_LEN);
 				}
 
@@ -757,18 +757,18 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 					size_t alt_len = _tcslen(swzAlt);
 					_tcsncpy(&swzDest[di], swzAlt, min(alt_len, iDestLen - di));
 					di += alt_len - 1; // -1 because we inc at bottom of loop
-				} 
+				}
 				else
 				{
 					goto empty; // empty value
 				}
 
-			} 
+			}
 			else // no end % - error
 			{
 				goto error;
 			}
-		} 
+		}
 		else
 		{
 			swzDest[di] = swzVarSrc[si];
@@ -790,7 +790,7 @@ bool ApplySubst(HANDLE hContact, const TCHAR *swzSource, bool parseTipperVarsFir
 
 
 	// check for a 'blank' string - just spaces etc
-	for (si = 0; si <= di; si++) 
+	for (si = 0; si <= di; si++)
 	{
 		if (swzDest[si] != 0 && swzDest[si] != _T(' ') && swzDest[si] != _T('\t') && swzDest[si] != _T('\r') && swzDest[si] != _T('\n'))
 			return true;
@@ -809,21 +809,21 @@ error:
 	return true;
 }
 
-bool GetLabelText(HANDLE hContact, const DISPLAYITEM &di, TCHAR *buff, int bufflen) 
+bool GetLabelText(HANDLE hContact, const DISPLAYITEM &di, TCHAR *buff, int bufflen)
 {
 	return ApplySubst(hContact, di.swzLabel, false, buff, bufflen);
 }
 
-bool GetValueText(HANDLE hContact, const DISPLAYITEM &di, TCHAR *buff, int bufflen) 
+bool GetValueText(HANDLE hContact, const DISPLAYITEM &di, TCHAR *buff, int bufflen)
 {
 	return ApplySubst(hContact, di.swzValue, di.bParseTipperVarsFirst, buff, bufflen);
 }
 
-void TruncateString(TCHAR *swzText) 
+void TruncateString(TCHAR *swzText)
 {
-	if (swzText && opt.iLimitCharCount > 3) 
+	if (swzText && opt.iLimitCharCount > 3)
 	{
-		if ((int)_tcslen(swzText) > opt.iLimitCharCount) 
+		if ((int)_tcslen(swzText) > opt.iLimitCharCount)
 		{
 			swzText[opt.iLimitCharCount - 3] = 0;
 			_tcscat(swzText, _T("..."));
@@ -831,16 +831,16 @@ void TruncateString(TCHAR *swzText)
 	}
 }
 
-TCHAR *GetProtoStatusMessage(char *szProto, WORD wStatus) 
+TCHAR *GetProtoStatusMessage(char *szProto, WORD wStatus)
 {
-	if (!szProto || wStatus == ID_STATUS_OFFLINE) 
+	if (!szProto || wStatus == ID_STATUS_OFFLINE)
 		return NULL;
 
 	// check if protocol supports status message for status
 	int flags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_3, 0);
 	if (!(flags & Proto_Status2Flag(wStatus)))
 		return NULL;
-	
+
 	TCHAR *swzText = (TCHAR *)CallProtoService(szProto, PS_GETMYAWAYMSG, 0, SGMA_TCHAR);
 	if ((INT_PTR)swzText == CALLSERVICE_NOTFOUND)
 	{
@@ -866,65 +866,65 @@ TCHAR *GetProtoStatusMessage(char *szProto, WORD wStatus)
 	}
 
 	if (swzText && opt.bLimitMsg)
-		TruncateString(swzText); 
+		TruncateString(swzText);
 
 	return swzText;
 }
 
-TCHAR *GetProtoExtraStatusTitle(char *szProto) 
+TCHAR *GetProtoExtraStatusTitle(char *szProto)
 {
 	DBVARIANT dbv;
 	TCHAR *swzText = NULL;
 
-	if (!szProto) 
+	if (!szProto)
 		return NULL;
 
-	if (!DBGetContactSettingTString(0, szProto, "XStatusName", &dbv)) 
+	if (!DBGetContactSettingTString(0, szProto, "XStatusName", &dbv))
 	{
-		if (_tcslen(dbv.ptszVal) != 0) 
+		if (_tcslen(dbv.ptszVal) != 0)
 			swzText = mir_tstrdup(dbv.ptszVal);
 		DBFreeVariant(&dbv);
-	} 
+	}
 
-	if (!swzText) 
+	if (!swzText)
 	{
 		TCHAR buff[256];
 		if (EmptyXStatusToDefaultName(0, szProto, 0, buff, 256))
 			swzText = mir_tstrdup(buff);
-	}  
+	}
 
 	if (opt.bLimitMsg)
-		TruncateString(swzText); 
+		TruncateString(swzText);
 
 	return swzText;
 }
 
-TCHAR *GetProtoExtraStatusMessage(char *szProto) 
+TCHAR *GetProtoExtraStatusMessage(char *szProto)
 {
 	DBVARIANT dbv;
 	TCHAR *swzText = NULL;
 
-	if (!szProto) 
+	if (!szProto)
 		return NULL;
 
-	if (!DBGetContactSettingTString(0, szProto, "XStatusMsg", &dbv)) 
+	if (!DBGetContactSettingTString(0, szProto, "XStatusMsg", &dbv))
 	{
 		if (_tcslen(dbv.ptszVal) != 0)
 			swzText = mir_tstrdup(dbv.ptszVal);
 		DBFreeVariant(&dbv);
 
 		if (ServiceExists(MS_VARS_FORMATSTRING))
-		{		
+		{
 			HANDLE hContact = db_find_first();
 			char *proto = GetContactProto(hContact);
 			while(!proto)
 			{
 				hContact = db_find_next(hContact);
-				if (hContact) 
+				if (hContact)
 				{
 					proto = GetContactProto(hContact);
 				}
-				else 
+				else
 				{
 					hContact = NULL;
 					break;
@@ -932,27 +932,23 @@ TCHAR *GetProtoExtraStatusMessage(char *szProto)
 			}
 
 			TCHAR *tszParsed = (TCHAR *)variables_parse(swzText, NULL, hContact);
-			if (tszParsed) 
-			{
-				mir_free(swzText);
-				swzText = mir_tstrdup(tszParsed);
-				variables_free(tszParsed);
-			}
+			if (tszParsed)
+				replaceStrT(swzText, tszParsed);
 		}
 	}
 
 	if (opt.bLimitMsg)
-		TruncateString(swzText); 
+		TruncateString(swzText);
 
 	return swzText;
 }
 
-TCHAR *GetListeningTo(char *szProto) 
+TCHAR *GetListeningTo(char *szProto)
 {
 	DBVARIANT dbv;
 	TCHAR *swzText = NULL;
 
-	if (!szProto) 
+	if (!szProto)
 		return NULL;
 
 	if (!DBGetContactSettingTString(0, szProto, "ListeningTo", &dbv))
@@ -963,18 +959,18 @@ TCHAR *GetListeningTo(char *szProto)
 	}
 
 	if (opt.bLimitMsg)
-		TruncateString(swzText); 
+		TruncateString(swzText);
 
 	return swzText;
 }
 
-TCHAR *GetJabberAdvStatusText(char *szProto, const char *szSlot, const char *szValue) 
+TCHAR *GetJabberAdvStatusText(char *szProto, const char *szSlot, const char *szValue)
 {
 	DBVARIANT dbv;
 	TCHAR *swzText = NULL;
 	char szSetting[128];
 
-	if (!szProto) 
+	if (!szProto)
 		return NULL;
 
 	mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/%s", szProto, szSlot, szValue);
@@ -986,22 +982,22 @@ TCHAR *GetJabberAdvStatusText(char *szProto, const char *szSlot, const char *szV
 	}
 
 	if (opt.bLimitMsg)
-		TruncateString(swzText); 
+		TruncateString(swzText);
 
 	return swzText;
 }
 
-HICON GetJabberActivityIcon(HANDLE hContact, char *szProto)  
-{	
+HICON GetJabberActivityIcon(HANDLE hContact, char *szProto)
+{
 	DBVARIANT dbv;
 	HICON hIcon = NULL;
 	char szSetting[128];
 
-	if (!szProto) 
+	if (!szProto)
 		return NULL;
 
 	mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/%s", szProto, "activity", "icon");
-	if (!DBGetContactSettingString(hContact, "AdvStatus", szSetting, &dbv)) 
+	if (!DBGetContactSettingString(hContact, "AdvStatus", szSetting, &dbv))
 	{
 		hIcon = Skin_GetIcon(dbv.pszVal);
 		DBFreeVariant(&dbv);
-- 
cgit v1.2.3