static INT_PTR GetContactSetting(WPARAM wParam, LPARAM lParam) { DBCONTACTGETSETTING* dgs = ( DBCONTACTGETSETTING* )lParam; dgs->pValue->type = 0; if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 0 )) return 1; if ( dgs->pValue->type == DBVT_UTF8 ) { WCHAR* tmp = NULL; char* p = NEWSTR_ALLOCA(dgs->pValue->pszVal); if ( mir_utf8decode( p, &tmp ) != NULL ) { BOOL bUsed = FALSE; int result = WideCharToMultiByte( mirCp, WC_NO_BEST_FIT_CHARS, tmp, -1, NULL, 0, NULL, &bUsed ); mir_free( dgs->pValue->pszVal ); if ( bUsed || result == 0 ) { dgs->pValue->type = DBVT_WCHAR; dgs->pValue->pwszVal = tmp; } else { dgs->pValue->type = DBVT_ASCIIZ; dgs->pValue->pszVal = mir_alloc( result ); WideCharToMultiByte( mirCp, WC_NO_BEST_FIT_CHARS, tmp, -1, dgs->pValue->pszVal, result, NULL, NULL ); mir_free( tmp ); } } else { dgs->pValue->type = DBVT_ASCIIZ; mir_free( tmp ); } } return 0; }
STDMETHODIMP_(BOOL) CDb3Mmap::GetContactSetting(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) { dbv->type = 0; if (GetContactSettingWorker(contactID, szModule, szSetting, dbv, 0)) return 1; if (dbv->type == DBVT_UTF8) { WCHAR *tmp = NULL; char *p = NEWSTR_ALLOCA(dbv->pszVal); if (mir_utf8decode(p, &tmp) != NULL) { BOOL bUsed = FALSE; int result = WideCharToMultiByte(m_codePage, WC_NO_BEST_FIT_CHARS, tmp, -1, NULL, 0, NULL, &bUsed); mir_free(dbv->pszVal); if (bUsed || result == 0) { dbv->type = DBVT_WCHAR; dbv->pwszVal = tmp; } else { dbv->type = DBVT_ASCIIZ; dbv->pszVal = (char *)mir_alloc(result); WideCharToMultiByte(m_codePage, WC_NO_BEST_FIT_CHARS, tmp, -1, dbv->pszVal, result, NULL, NULL); mir_free(tmp); } } else { dbv->type = DBVT_ASCIIZ; mir_free(tmp); } } return 0; }
STDMETHODIMP_(BOOL) CDb3Mmap::GetContactSettingStatic(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) { if (GetContactSettingWorker(contactID, szModule, szSetting, dbv, 1)) return 1; if (dbv->type == DBVT_UTF8) { mir_utf8decode(dbv->pszVal, NULL); dbv->type = DBVT_ASCIIZ; } return 0; }
INT_PTR GetContactSettingStatic(WPARAM wParam, LPARAM lParam) { DBCONTACTGETSETTING* dgs = (DBCONTACTGETSETTING*)lParam; if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 1 )) return 1; if ( dgs->pValue->type == DBVT_UTF8 ) { mir_utf8decode( dgs->pValue->pszVal, NULL ); dgs->pValue->type = DBVT_ASCIIZ; } return 0; }
static INT_PTR GetContactSettingStr(WPARAM wParam, LPARAM lParam) { DBCONTACTGETSETTING* dgs = (DBCONTACTGETSETTING*)lParam; int iSaveType = dgs->pValue->type; if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 0 )) return 1; if ( iSaveType == 0 || iSaveType == dgs->pValue->type ) return 0; if ( dgs->pValue->type != DBVT_ASCIIZ && dgs->pValue->type != DBVT_UTF8 ) return 1; if ( iSaveType == DBVT_WCHAR ) { if ( dgs->pValue->type != DBVT_UTF8 ) { int len = MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, NULL, 0 ); wchar_t* wszResult = ( wchar_t* )mir_alloc(( len+1 )*sizeof( wchar_t )); if ( wszResult == NULL ) return 1; MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, wszResult, len ); wszResult[ len ] = 0; mir_free( dgs->pValue->pszVal ); dgs->pValue->pwszVal = wszResult; } else { 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 ) { char* tmpBuf = mir_utf8encode( dgs->pValue->pszVal ); if ( tmpBuf == NULL ) return 1; mir_free( dgs->pValue->pszVal ); dgs->pValue->pszVal = tmpBuf; } else if ( iSaveType == DBVT_ASCIIZ ) mir_utf8decode( dgs->pValue->pszVal, NULL ); dgs->pValue->type = iSaveType; return 0; }
STDMETHODIMP_(BOOL) CDb3Mmap::GetContactSettingStr(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) { int iSaveType = dbv->type; if (GetContactSettingWorker(contactID, szModule, szSetting, dbv, 0)) return 1; if (iSaveType == 0 || iSaveType == dbv->type) return 0; if (dbv->type != DBVT_ASCIIZ && dbv->type != DBVT_UTF8) return 1; if (iSaveType == DBVT_WCHAR) { if (dbv->type != DBVT_UTF8) { int len = MultiByteToWideChar(CP_ACP, 0, dbv->pszVal, -1, NULL, 0); wchar_t* wszResult = (wchar_t*)mir_alloc((len + 1)*sizeof(wchar_t)); if (wszResult == NULL) return 1; MultiByteToWideChar(CP_ACP, 0, dbv->pszVal, -1, wszResult, len); wszResult[len] = 0; mir_free(dbv->pszVal); dbv->pwszVal = wszResult; } else { char* savePtr = NEWSTR_ALLOCA(dbv->pszVal); mir_free(dbv->pszVal); if (!mir_utf8decode(savePtr, &dbv->pwszVal)) return 1; } } else if (iSaveType == DBVT_UTF8) { char* tmpBuf = mir_utf8encode(dbv->pszVal); if (tmpBuf == NULL) return 1; mir_free(dbv->pszVal); dbv->pszVal = tmpBuf; } else if (iSaveType == DBVT_ASCIIZ) mir_utf8decode(dbv->pszVal, NULL); dbv->type = iSaveType; return 0; }