CF_PRIVATE Boolean _openInputStream(_CFXMLInputStream *stream) { if (NULL == stream->data) { return false; } else { stream->currentByte = CFDataGetBytePtr(stream->data); if (determineEncoding(stream)) { stream->flags |= STREAM_OPEN; return true; } else { return false; } } }
size_t Utf8_16_Read::convert(char* buf, size_t len) { // bugfix by Jens Lorenz static size_t nSkip = 0; size_t ret = 0; m_pBuf = (ubyte*)buf; m_nLen = len; if (m_bFirstRead == true) { determineEncoding(); nSkip = m_nSkip; m_bFirstRead = false; } switch (m_eEncoding) { case uni7Bit: case uni8Bit: case uniCookie: { // Do nothing, pass through m_nBufSize = 0; m_pNewBuf = m_pBuf; ret = len; break; } case uniUTF8: { // Pass through after BOM m_nBufSize = 0; m_pNewBuf = m_pBuf + nSkip; ret = len - nSkip; break; } case uni16BE_NoBOM: case uni16LE_NoBOM: case uni16BE: case uni16LE: { size_t newSize = len + len / 2 + 1; if (m_nBufSize != newSize) { if (m_pNewBuf) delete [] m_pNewBuf; m_pNewBuf = NULL; m_pNewBuf = new ubyte[newSize]; m_nBufSize = newSize; } ubyte* pCur = m_pNewBuf; m_Iter16.set(m_pBuf + nSkip, len - nSkip, m_eEncoding); for (; m_Iter16; ++m_Iter16) { *pCur++ = m_Iter16.get(); } ret = pCur - m_pNewBuf; break; } default: break; } // necessary for second calls and more nSkip = 0; return ret; }