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

Function tss_encode_base64

src/tripwire/mailmessage.cpp:759–810  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

757
758
759size_t tss_encode_base64(const byte_t* pchSource, size_t nchSource, byte_t* pchBuffer, size_t nchBuffer)
760{
761 const size_t _ERROR = std::string::npos; // -1;
762
763
764 //--Assert Preconditions
765
766 if (pchSource == 0 || nchSource == 0)
767 return _ERROR;
768
769
770 //--If pchBuffer == 0, User is requesting Size
771
772 size_t nchBuf = tss_encode_base64_size(nchSource);
773
774 if (pchBuffer == 0) // Requesting Size
775 return nchBuf;
776
777 if (nchBuf > nchBuffer) // DOH!!
778 return _ERROR;
779
780
781 //--Get three characters at a time and encode them (watching linelen)
782
783 byte_t* pchBuf = (pchBuffer + 0);
784 const byte_t* pchSrc = (pchSource + 0);
785
786
787 const size_t _max_linelen = (_MAX_RFC822_LINE_LEN - _EOL_LEN);
788 size_t nLineLen = 0;
789
790 for (; nchSource;)
791 {
792 // Like iconv: Increment pointers and decrement sizes
793 tss_encode_digit_base64(pchSrc, nchSource, pchBuf, nchBuf);
794
795 nLineLen += 4;
796
797 if (nchSource == 0 || nLineLen > _max_linelen)
798 {
799 nLineLen = 0; // RESET:
800
801 const byte_t* pchEol = &_aszEoL[0];
802 while (*pchEol)
803 *pchBuf++ = *pchEol++;
804 }
805 }
806
807 *pchBuf = 0x00; // CAUTION: Null Terminate!!!
808
809 return (pchBuf - pchBuffer);
810}
811} // namespace
812
813

Callers 1

ConvertBase64Method · 0.85

Calls 2

tss_encode_base64_sizeFunction · 0.85
tss_encode_digit_base64Function · 0.85

Tested by

no test coverage detected