MCPcopy Create free account
hub / github.com/nodejs/nan / base64_encode

Function base64_encode

nan_string_bytes.h:142–203  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140
141
142static size_t base64_encode(const char* src,
143 size_t slen,
144 char* dst,
145 size_t dlen) {
146 // We know how much we'll write, just make sure that there's space.
147 assert(dlen >= base64_encoded_size(slen) &&
148 "not enough space provided for base64 encode");
149
150 dlen = base64_encoded_size(slen);
151
152 unsigned a;
153 unsigned b;
154 unsigned c;
155 unsigned i;
156 unsigned k;
157 unsigned n;
158
159 static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
160 "abcdefghijklmnopqrstuvwxyz"
161 "0123456789+/";
162
163 i = 0;
164 k = 0;
165 n = slen / 3 * 3;
166
167 while (i < n) {
168 a = src[i + 0] & 0xff;
169 b = src[i + 1] & 0xff;
170 c = src[i + 2] & 0xff;
171
172 dst[k + 0] = table[a >> 2];
173 dst[k + 1] = table[((a & 3) << 4) | (b >> 4)];
174 dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)];
175 dst[k + 3] = table[c & 0x3f];
176
177 i += 3;
178 k += 4;
179 }
180
181 if (n != slen) {
182 switch (slen - n) {
183 case 1:
184 a = src[i + 0] & 0xff;
185 dst[k + 0] = table[a >> 2];
186 dst[k + 1] = table[(a & 3) << 4];
187 dst[k + 2] = '=';
188 dst[k + 3] = '=';
189 break;
190
191 case 2:
192 a = src[i + 0] & 0xff;
193 b = src[i + 1] & 0xff;
194 dst[k + 0] = table[a >> 2];
195 dst[k + 1] = table[((a & 3) << 4) | (b >> 4)];
196 dst[k + 2] = table[(b & 0x0f) << 2];
197 dst[k + 3] = '=';
198 break;
199 }

Callers 1

EncodeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected