void b64_encode()

in src/base64.c [39:61]


void b64_encode(const char* src, unsigned srclen, char* dst) {
  unsigned buf = 0;
  int pos = 2;

  while (srclen--) {
    buf |= (unsigned char)*(src++) << ((pos--) << 3);

    if (pos < 0) {
      *dst++ = bin_to_b64[(buf >> 18) & 0x3f];
      *dst++ = bin_to_b64[(buf >> 12) & 0x3f];
      *dst++ = bin_to_b64[(buf >> 6) & 0x3f];
      *dst++ = bin_to_b64[buf & 0x3f];
      pos = 2;
      buf = 0;
    }
  }
  if (pos != 2) {
    *dst++ = bin_to_b64[(buf >> 18) & 0x3f];
    *dst++ = bin_to_b64[(buf >> 12) & 0x3f];
    *dst++ = (pos == 0) ? bin_to_b64[(buf >> 6) & 0x3f] : '=';
    *dst++ = '=';
  }
}