From 5551a6e1727ea93f3fc7237dafdde42c2bdc1106 Mon Sep 17 00:00:00 2001 From: sje Date: Thu, 11 Oct 2007 07:38:57 +0000 Subject: sync with miranda svn git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@362 4f64403b-2f21-0410-a795-97e2b3489a10 --- db3x_autobackups/dbsettings.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) (limited to 'db3x_autobackups/dbsettings.c') diff --git a/db3x_autobackups/dbsettings.c b/db3x_autobackups/dbsettings.c index a8d347d..3e8f49d 100644 --- a/db3x_autobackups/dbsettings.c +++ b/db3x_autobackups/dbsettings.c @@ -26,6 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. DWORD GetModuleNameOfs(const char *szName); DBCachedContactValueList* AddToCachedContactList(HANDLE hContact, int index); +static int mirCp = CP_ACP; + HANDLE hCacheHeap = NULL; SortedList lContacts = {0}; HANDLE hLastCachedContact = NULL; @@ -386,12 +388,23 @@ static int GetContactSetting(WPARAM wParam,LPARAM lParam) return 1; if ( dgs->pValue->type == DBVT_UTF8 ) { - WCHAR* tmp; - char* val = mir_utf8decode( dgs->pValue->pszVal, &tmp ); - if ( val == NULL ) { - dgs->pValue->type = DBVT_WCHAR; + WCHAR* tmp = NULL; + char* p = NEWSTR_ALLOCA(dgs->pValue->pszVal); + if ( mir_utf8decode( p, &tmp ) != NULL ) { + BOOL bUsed = FALSE; + int result = WideCharToMultiByte( mirCp, 0, tmp, -1, NULL, 0, "?", &bUsed ); + mir_free( dgs->pValue->pszVal ); - dgs->pValue->pwszVal = tmp; + + if ( bUsed || result == 0 ) { + dgs->pValue->type = DBVT_WCHAR; + dgs->pValue->pwszVal = tmp; + } + else { + dgs->pValue->type = DBVT_ASCIIZ; + dgs->pValue->pszVal = mir_strdup( p ); + mir_free( tmp ); + } } else { dgs->pValue->type = DBVT_ASCIIZ; @@ -428,9 +441,10 @@ static int GetContactSettingStr(WPARAM wParam,LPARAM lParam) dgs->pValue->pwszVal = wszResult; } else { - char* savePtr = dgs->pValue->pszVal; - mir_utf8decode( dgs->pValue->pszVal, &dgs->pValue->pwszVal ); - mir_free( savePtr ); + char* savePtr = NEWSTR_ALLOCA(dgs->pValue->pszVal); + mir_free( dgs->pValue->pszVal ); + if ( !mir_utf8decode( savePtr, &dgs->pValue->pwszVal )) + return 1; } } else if ( iSaveType == DBVT_UTF8 ) { @@ -530,7 +544,7 @@ static int WriteContactSetting(WPARAM wParam,LPARAM lParam) int bytesRequired,bytesRemaining; DWORD ofsContact,ofsSettingsGroup,ofsBlobPtr; - if (dbcws == NULL) + if (dbcws == NULL || dbcws->szSetting==NULL || dbcws->szModule==NULL ) return 1; // the db format can't tolerate more than 255 bytes of space (incl. null) for settings+module name @@ -990,6 +1004,8 @@ int InitSettings(void) lGlobalSettings.increment=50; lResidentSettings.sortFunc=stringCompare2; lResidentSettings.increment=50; + + mirCp = CallService( MS_LANGPACK_GETCODEPAGE, 0, 0 ); return 0; } -- cgit v1.2.3