From: Erik Faye-Lund Date: Tue, 09 Feb 2010 14:45:23 GMT Subject: Re: [PATCH 1/4] Add base64 encoder and decoder Message-ID: <40aa078e1002090645s63449057hf88c89a232933680@mail.gmail.com> In-Reply-To: <1265717345-2118-2-git-send-email-mitake@dcl.info.waseda.ac.jp> On Tue, Feb 9, 2010 at 1:09 PM, Hitoshi Mitake 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