Re: [PATCH 1/4] Add base64 encoder and decoder
From: Erik Faye-Lund <hidden>
Date: 2016-06-15 22:48:12
On Tue, Feb 9, 2010 at 1:09 PM, Hitoshi Mitake [off-list ref] wrote:
+void base64_encode(char *out, const char *in, int inlen)
+{
+ const char *inp = in;
+ char *outp = out;...Why? It's copying the pointers to pointers of identical type with different names, and never using the originals again... Looks like a sloppy extraction from another code-base to me.
+
+ while (inlen >= 3) {
+ *outp++ = base64char[(inp[0] >> 2) & 0x3f];
+ *outp++ = base64char[((inp[0] & 0x03) << 4) |
+ ((inp[1] >> 4) & 0x0f)];
+ *outp++ = base64char[((inp[1] & 0x0f) << 2) |
+ ((inp[2] >> 6) & 0x03)];
+ *outp++ = base64char[inp[2] & 0x3f];
+
+ inp += 3;
+ inlen -= 3;
+ }
+
+ if (inlen > 0) {
+ *outp++ = base64char[(inp[0] >> 2) & 0x3f];
+ if (inlen == 1) {
+ *outp++ = base64char[(inp[0] & 0x03) << 4];
+ *outp++ = '=';
+ } else {
+ *outp++ = base64char[((inp[0] & 0x03) << 4) |
+ ((inp[1] >> 4) & 0x0f)];
+ *outp++ = base64char[((inp[1] & 0x0f) << 2)];
+ }
+ *outp++ = '=';
+ }
+
+ *outp = '\0';
+}If inlen is 0, a single '=' should be emitted (plus the obvious zero termination). It could be that the code deals with that by making sure that inlen never is zero, though. -- Erik "kusma" Faye-Lund