MCPcopy Create free account
hub / github.com/cinience/RedisStudio / LoadFromMem

Method LoadFromMem

DuiLib/Core/UIMarkup.cpp:261–375  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

259}
260
261bool CMarkup::LoadFromMem(BYTE* pByte, DWORD dwSize, int encoding)
262{
263#ifdef _UNICODE
264 if (encoding == XMLFILE_ENCODING_UTF8)
265 {
266 if( dwSize >= 3 && pByte[0] == 0xEF && pByte[1] == 0xBB && pByte[2] == 0xBF )
267 {
268 pByte += 3; dwSize -= 3;
269 }
270 DWORD nWide = ::MultiByteToWideChar( CP_UTF8, 0, (LPCSTR)pByte, dwSize, NULL, 0 );
271
272 m_pstrXML = static_cast<LPTSTR>(malloc((nWide + 1)*sizeof(TCHAR)));
273 ::MultiByteToWideChar( CP_UTF8, 0, (LPCSTR)pByte, dwSize, m_pstrXML, nWide );
274 m_pstrXML[nWide] = _T('\0');
275 }
276 else if (encoding == XMLFILE_ENCODING_ASNI)
277 {
278 DWORD nWide = ::MultiByteToWideChar( CP_ACP, 0, (LPCSTR)pByte, dwSize, NULL, 0 );
279
280 m_pstrXML = static_cast<LPTSTR>(malloc((nWide + 1)*sizeof(TCHAR)));
281 ::MultiByteToWideChar( CP_ACP, 0, (LPCSTR)pByte, dwSize, m_pstrXML, nWide );
282 m_pstrXML[nWide] = _T('\0');
283 }
284 else
285 {
286 if ( dwSize >= 2 && ( ( pByte[0] == 0xFE && pByte[1] == 0xFF ) || ( pByte[0] == 0xFF && pByte[1] == 0xFE ) ) )
287 {
288 dwSize = dwSize / 2 - 1;
289
290 if ( pByte[0] == 0xFE && pByte[1] == 0xFF )
291 {
292 pByte += 2;
293
294 for ( DWORD nSwap = 0 ; nSwap < dwSize ; nSwap ++ )
295 {
296 register CHAR nTemp = pByte[ ( nSwap << 1 ) + 0 ];
297 pByte[ ( nSwap << 1 ) + 0 ] = pByte[ ( nSwap << 1 ) + 1 ];
298 pByte[ ( nSwap << 1 ) + 1 ] = nTemp;
299 }
300 }
301 else
302 {
303 pByte += 2;
304 }
305
306 m_pstrXML = static_cast<LPTSTR>(malloc((dwSize + 1)*sizeof(TCHAR)));
307 ::CopyMemory( m_pstrXML, pByte, dwSize * sizeof(TCHAR) );
308 m_pstrXML[dwSize] = _T('\0');
309
310 pByte -= 2;
311 }
312 }
313#else // !_UNICODE
314 if (encoding == XMLFILE_ENCODING_UTF8)
315 {
316 if( dwSize >= 3 && pByte[0] == 0xEF && pByte[1] == 0xBB && pByte[2] == 0xBF )
317 {
318 pByte += 3; dwSize -= 3;

Callers 1

CreateMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected