int m17n_ccx_filter(M17nCCX *m17n,FILE *in,FILE *out){ int rcode = -1; int ecode; m17n->m_mtext = 0; m17n->m_dec = mconv_stream_converter(m17n->m_icode,in); if( m17n->m_dec == 0 ){ m17n_ccx_freeconv(m17n); return -1; } m17n->m_enc = mconv_stream_converter(m17n->m_ocode,out); if( m17n->m_enc == 0 ){ m17n_ccx_freeconv(m17n); return -2; } LAP("converter-set"); m17n->m_mtext = mtext(); m17n->m_dec->lenient = 1; mconv_decode(m17n->m_dec,m17n->m_mtext); LAP("decoded"); m17n->m_enc->lenient = 1; m17n->m_enc->last_block = 1; ecode = mconv_encode(m17n->m_enc,m17n->m_mtext); rcode = 0; LAP("encoded"); m17n_ccx_freeconv(m17n); LAP("filter-done"); return rcode; }
static MText * mtext_from_utf8 (TableContext *context, const unsigned char *buf, size_t size) { mconv_reset_converter (context->converter); mconv_rebind_buffer (context->converter, buf, size); return mconv_decode (context->converter, mtext ()); }
int m17n_ccx_string(M17nCCX *m17n,const char *istr,int len,char *ostr,int siz){ const unsigned char *uistr = (const unsigned char*)istr; const unsigned char *uostr = (const unsigned char*)ostr; int rcode = -1; int ecode; int oleng = 1; m17n->m_mtext = 0; m17n->m_dec = mconv_buffer_converter(m17n->m_icode,uistr,len); if( m17n->m_dec == 0 ){ m17n_ccx_freeconv(m17n); return -1; } m17n->m_enc = mconv_buffer_converter(m17n->m_ocode,uostr,siz-1); if( m17n->m_enc == 0 ){ m17n_ccx_freeconv(m17n); return -2; } LAP("converter-set"); m17n->m_mtext = mtext(); m17n->m_dec->lenient = 1; mconv_decode(m17n->m_dec,m17n->m_mtext); LAP("decoded"); m17n->m_enc->lenient = 1; m17n->m_enc->last_block = 1; ecode = mconv_encode(m17n->m_enc,m17n->m_mtext); oleng = m17n->m_enc->nbytes; ostr[oleng] = 0; rcode = oleng; LAP("encoded"); m17n_ccx_freeconv(m17n); LAP("filter-done"); return rcode; }