Mercurial > libjeffpc
changeset 739:c70b925f6484
base64: move encoding/decoding logic to internal static inline helpers
This will make base64url encoder/decoder trivial to implement as the only
difference between it and base64 is the alphabet.
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Sun, 31 Mar 2019 14:53:30 +0300 |
parents | d8e454369daf |
children | 12be3c54727b |
files | base64.c |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/base64.c Sun Mar 31 14:53:04 2019 +0300 +++ b/base64.c Sun Mar 31 14:53:30 2019 +0300 @@ -63,9 +63,10 @@ INV, INV, INV, INV, INV, INV, INV, INV, /* 0xf8..0xff */ }; -void base64_encode(char *out, const void *_in, size_t inlen) +__attribute__((always_inline)) +static inline void __b64_encode(char *out, const void *_in, size_t inlen, + const char *table) { - const char *table = b64_encode_table; const uint8_t *in = _in; const size_t groups = inlen / 3; uint32_t v; @@ -114,9 +115,15 @@ } } -ssize_t base64_decode(void *_out, const char *_in, size_t inlen) +void base64_encode(char *out, const void *in, size_t inlen) { - const uint8_t *table = b64_decode_table; + __b64_encode(out, in, inlen, b64_encode_table); +} + +__attribute__((always_inline)) +static inline ssize_t __b64_decode(void *_out, const char *_in, size_t inlen, + const uint8_t *table) +{ const uint8_t *in = (const uint8_t *) _in; uint8_t *out = _out; size_t groups; @@ -181,3 +188,8 @@ return (groups * 3); } } + +ssize_t base64_decode(void *out, const char *in, size_t inlen) +{ + return __b64_decode(out, in, inlen, b64_decode_table); +}