BOOL INSTAPI SQLGetTranslator (HWND hwnd, LPSTR lpszName, WORD cbNameMax, WORD * pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD * pcbPathOut, DWORD * pvOption) { BOOL retcode = FALSE; /* Check input parameters */ CLEAR_ERROR (); if (!hwnd) { PUSH_ERROR (ODBC_ERROR_INVALID_HWND); goto quit; } if (!lpszName || !lpszPath || cbNameMax < 1 || cbPathMax < 1) { PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN); goto quit; } retcode = GetTranslator (hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption); quit: return retcode; }
bool ImportTranslate::ConvertString( const nsCString& inStr, nsCString& outStr, bool mimeHeader) { if (inStr.IsEmpty()) { outStr = inStr; return( PR_TRUE); } nsImportTranslator *pTrans = GetTranslator(); // int maxLen = (int) pTrans->GetMaxBufferSize( inStr.Length()); // int hLen = 0; nsCString set; nsCString lang; if (mimeHeader) { // add the charset and language pTrans->GetCharset( set); pTrans->GetLanguage( lang); } // Unfortunatly, we didn't implement ConvertBuffer for all translators, // just ConvertToFile. This means that this data will not always // be converted to the charset of pTrans. In that case... // We don't always have the data in the same charset as the current // translator... // It is safer to leave the charset and language field blank set.Truncate(); lang.Truncate(); PRUint8 * pBuf; /* pBuf = (P_U8) outStr.GetBuffer( maxLen); if (!pBuf) { delete pTrans; return( FALSE); } pTrans->ConvertBuffer( (PC_U8)(PC_S8)inStr, inStr.GetLength(), pBuf); outStr.ReleaseBuffer(); */ outStr = inStr; delete pTrans; // Now I need to run the string through the mime-header special char // encoder. pTrans = new CMHTranslator; pBuf = new PRUint8[pTrans->GetMaxBufferSize( outStr.Length())]; pTrans->ConvertBuffer( (const PRUint8 *)(outStr.get()), outStr.Length(), pBuf); delete pTrans; outStr.Truncate(); if (mimeHeader) { outStr = set; outStr += "'"; outStr += lang; outStr += "'"; } outStr += (const char *)pBuf; delete [] pBuf; return( PR_TRUE); }