MCPcopy Create free account
hub / github.com/Tripwire/tripwire-open-source / tss_ReverseConvert

Function tss_ReverseConvert

src/core/codeconvert.cpp:473–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

471};
472
473bool tss_ReverseConvert(iconv_t revConv, const char* pConvertedFrom, size_t nFrom, char* pConvertedTo, size_t nTo)
474{
475 cDebug d("tss_ReverseConvert< B, S, C >()");
476 d.TraceDebug("Converted from: %s\n", util_output_bytes((void*)pConvertedFrom, nFrom).c_str());
477 d.TraceDebug("Converted to: %s\n", util_output_bytes((void*)pConvertedTo, nTo).c_str());
478
479 char aBuffer[MB_LEN_MAX];
480# ifdef DEBUG
481 for (size_t foo = 0; foo < sizeof(aBuffer); foo++)
482 aBuffer[foo] = 0xCD;
483# endif
484 char* pBuf = &aBuffer[0];
485 size_t nBuf = sizeof(aBuffer);
486
487 const char* pSrc = pConvertedTo;
488 size_t nSrc = nTo;
489
490 size_t nConv = // NOTE:
491 iconv(revConv, // On return, these addresses
492 (ICONV_SOURCE_TYPE**)&pSrc, // are set for one past the last
493 &nSrc, // "item" converted successfully
494 &pBuf,
495 &nBuf);
496
497 if (nConv == (size_t)-1)
498 {
499 d.TraceDebug("reverse conversion failed: iconv error\n");
500 return false;
501 }
502
503 d.TraceDebug("sizeof( aBuffer ): %u, nBuf: %u, nFrom: %u\n", sizeof(aBuffer), nBuf, nFrom);
504 d.TraceDebug("reverse conversion got: %s\n", util_output_bytes((void*)&aBuffer[0], sizeof(aBuffer) - nBuf).c_str());
505
506 if (((sizeof(aBuffer) - nBuf) != nFrom) || // convertedFrom and check must be same size
507 (0 != memcmp(pConvertedFrom, &aBuffer[0], nFrom))) // must be same value, too
508 {
509 d.TraceDebug("reverse conversion failed: converted to a different value\n");
510 return false;
511 }
512
513 return true;
514}
515
516template<class CharT> bool tss_IsFlaggedCharacter(CharT ch)
517{

Callers 1

tss_ConvertOneCharacterFunction · 0.85

Calls 3

util_output_bytesFunction · 0.85
c_strMethod · 0.80
TraceDebugMethod · 0.60

Tested by

no test coverage detected