From: Kevin McCarthy Date: Tue, 12 Feb 2019 23:58:13 +0000 (-0800) Subject: Add mutt_buffer helpers for base64 conversion X-Git-Tag: 2019-10-25~357^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9562460020b054f13e983ddf16bc16e2a12776b8;p=neomutt Add mutt_buffer helpers for base64 conversion Add mutt_buffer_from_base64() mutt_buffer_to_base64() to help with transitioning to buffers. Co-authored-by: Richard Russon --- diff --git a/mutt/base64.c b/mutt/base64.c index e4ef8780c..25801c8f7 100644 --- a/mutt/base64.c +++ b/mutt/base64.c @@ -33,6 +33,8 @@ #include "config.h" #include "base64.h" +#include "buffer.h" +#include "string2.h" #define BAD -1 @@ -171,3 +173,37 @@ int mutt_b64_decode(const char *in, char *out, size_t olen) return len; } + +/** + * mutt_b64_buffer_encode - Convert raw bytes to null-terminated base64 string + * @param buf Buffer for the result + * @param in Input buffer for the raw bytes + * @param len Length of the input buffer + * @retval num Length of the string written to the output buffer + */ +size_t mutt_b64_buffer_encode(struct Buffer *buf, const char *in, size_t len) +{ + mutt_buffer_increase_size(buf, ((len * 2) > LONG_STRING) ? (len * 2) : LONG_STRING); + size_t num = mutt_b64_encode(in, len, buf->data, buf->dsize); + mutt_buffer_fix_dptr(buf); + return num; +} + +/** + * mutt_b64_buffer_decode - Convert null-terminated base64 string to raw bytes + * @param buf Buffer for the result + * @param in Input buffer for the null-terminated base64-encoded string + * @retval num Success, bytes written + * @retval -1 Error + */ +int mutt_b64_buffer_decode(struct Buffer *buf, const char *in) +{ + mutt_buffer_increase_size(buf, mutt_str_strlen(in)); + int olen = mutt_b64_decode(in, buf->data, buf->dsize); + if (olen > 0) + buf->dptr = buf->data + olen; + else + buf->dptr = buf->data; + + return olen; +} diff --git a/mutt/base64.h b/mutt/base64.h index 745f2d13c..c55fced5b 100644 --- a/mutt/base64.h +++ b/mutt/base64.h @@ -23,6 +23,8 @@ #include +struct Buffer; + extern const int Index64[]; #define base64val(c) Index64[(unsigned int) (c)] @@ -30,4 +32,7 @@ extern const int Index64[]; int mutt_b64_decode(const char *in, char *out, size_t olen); size_t mutt_b64_encode(const char *in, size_t inlen, char *out, size_t outlen); +int mutt_b64_buffer_decode(struct Buffer *buf, const char *in); +size_t mutt_b64_buffer_encode(struct Buffer *buf, const char *in, size_t len); + #endif /* MUTT_LIB_BASE64_H */