Thread (34 messages) flat view 34 messages, 6 authors, 2016-08-13

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help