MCPcopy Create free account
hub / github.com/amule-project/amule / EncodeBase64

Function EncodeBase64

src/OtherFunctions.cpp:446–538  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

444
445
446wxString EncodeBase64(const char *pbBufferIn, unsigned int bufLen)
447{
448 wxString pbBufferOut;
449 wxString strHeader;
450
451 if( !strHeaderLine.IsEmpty() ) {
452 strHeader = "-----BEGIN " + strHeaderLine + "-----";
453 if( g_fUseCRLF ) {
454 strHeader += "\r";
455 }
456 strHeader += "\n";
457 }
458
459 unsigned long nDiv = ((unsigned long)bufLen) / 3;
460 unsigned long nRem = ((unsigned long)bufLen) % 3;
461 unsigned int NewLineSize = g_fUseCRLF ? 2 : 1;
462
463 // Allocate enough space in the output buffer to speed up things
464 pbBufferOut.Alloc(
465 strHeader.Len() * 2 + // header/footer
466 (bufLen * 4) / 3 + 1 + // Number of codes
467 nDiv * NewLineSize + // Number of new lines
468 (nRem ? 1 : 0) * NewLineSize ); // Last line
469 pbBufferOut = strHeader;
470
471 unsigned long nChars = 0;
472 const unsigned char *pIn = (unsigned char*)pbBufferIn;
473 while( nDiv > 0 ) {
474 pbBufferOut += to_b64[ (pIn[0] >> 2) & 0x3f];
475 pbBufferOut += to_b64[((pIn[0] << 4) & 0x30) | ((pIn[1] >> 4) & 0xf)];
476 pbBufferOut += to_b64[((pIn[1] << 2) & 0x3c) | ((pIn[2] >> 6) & 0x3)];
477 pbBufferOut += to_b64[ pIn[2] & 0x3f];
478 pIn += 3;
479 nDiv--;
480 nChars += 4;
481 if( nChars >= g_nCharsPerLine && g_nCharsPerLine != 0 ) {
482 nChars = 0;
483 if( g_fUseCRLF ) {
484 pbBufferOut += "\r";
485 }
486 pbBufferOut += "\n";
487 }
488 }
489 switch( nRem ) {
490 case 2:
491 pbBufferOut += to_b64[ (pIn[0] >> 2) & 0x3f];
492 pbBufferOut += to_b64[((pIn[0] << 4) & 0x30) | ((pIn[1] >> 4) & 0xf)];
493 pbBufferOut += to_b64[ (pIn[1] << 2) & 0x3c];
494 pbBufferOut += "=";
495 nChars += 4;
496 if( nChars >= g_nCharsPerLine && g_nCharsPerLine != 0 ) {
497 nChars = 0;
498 if( g_fUseCRLF ) {
499 pbBufferOut += "\r";
500 }
501 pbBufferOut += "\n";
502 }
503 break;

Callers 1

Calls 1

IsEmptyMethod · 0.45

Tested by

no test coverage detected