MCPcopy Create free account
hub / github.com/ddnet/ddnet / str_base64

Function str_base64

src/base/str.cpp:688–738  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

686}
687
688void str_base64(char *dst, int dst_size, const void *data_raw, int data_size)
689{
690 static const char DIGITS[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
691
692 const unsigned char *data = (const unsigned char *)data_raw;
693 unsigned value = 0;
694 int num_bits = 0;
695 int i = 0;
696 int o = 0;
697
698 dst_size -= 1;
699 dst[dst_size] = 0;
700 while(true)
701 {
702 if(num_bits < 6 && i < data_size)
703 {
704 value = (value << 8) | data[i];
705 num_bits += 8;
706 i += 1;
707 }
708 if(o == dst_size)
709 {
710 return;
711 }
712 if(num_bits > 0)
713 {
714 unsigned padded;
715 if(num_bits >= 6)
716 {
717 padded = (value >> (num_bits - 6)) & 0x3f;
718 }
719 else
720 {
721 padded = (value << (6 - num_bits)) & 0x3f;
722 }
723 dst[o] = DIGITS[padded];
724 num_bits -= 6;
725 o += 1;
726 }
727 else if(o % 4 != 0)
728 {
729 dst[o] = '=';
730 o += 1;
731 }
732 else
733 {
734 dst[o] = 0;
735 return;
736 }
737 }
738}
739
740static int base64_digit_value(char digit)
741{

Callers 2

StrBase64StrFunction · 0.85
TESTFunction · 0.85

Calls

no outgoing calls

Tested by 2

StrBase64StrFunction · 0.68
TESTFunction · 0.68