diff options
Diffstat (limited to '')
-rw-r--r-- | lib/base32.h | 53 |
1 files changed, 45 insertions, 8 deletions
diff --git a/lib/base32.h b/lib/base32.h index 2e784d9..eadbeae 100644 --- a/lib/base32.h +++ b/lib/base32.h @@ -1,5 +1,5 @@ /* base32.h -- Encode binary data using printable characters. - Copyright (C) 2004-2006, 2009-2023 Free Software Foundation, Inc. + Copyright (C) 2004-2006, 2009-2024 Free Software Foundation, Inc. Adapted from Simon Josefsson's base64 code by Gijs van Tulder. This file is free software: you can redistribute it and/or modify @@ -16,19 +16,33 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef BASE32_H -# define BASE32_H +#define BASE32_H -/* This file uses _GL_ATTRIBUTE_CONST. */ +/* This file uses _GL_INLINE_HEADER_BEGIN. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif -/* Get idx_t. */ -# include <idx.h> +/* Get idx_t. */ +#include <idx.h> + +/* Pacify GCC in isubase32. */ +#if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__) +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef BASE32_INLINE +# define BASE32_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* This uses that the expression (n+(k-1))/k means the smallest integer >= n/k, i.e., the ceiling of n/k. */ -# define BASE32_LENGTH(inlen) ((((inlen) + 4) / 5) * 8) +#define BASE32_LENGTH(inlen) ((((inlen) + 4) / 5) * 8) struct base32_decode_context { @@ -36,14 +50,31 @@ struct base32_decode_context char buf[8]; }; -extern bool isbase32 (char ch) _GL_ATTRIBUTE_CONST; +extern signed char const base32_to_int[256]; + +BASE32_INLINE bool +isubase32 (unsigned char ch) +{ + return ch < sizeof base32_to_int && 0 <= base32_to_int[ch]; +} + +BASE32_INLINE bool +isbase32 (char ch) +{ + return isubase32 (ch); +} extern void base32_encode (const char *restrict in, idx_t inlen, char *restrict out, idx_t outlen); extern idx_t base32_encode_alloc (const char *in, idx_t inlen, char **out); -extern void base32_decode_ctx_init (struct base32_decode_context *ctx); +/* Initialize decode-context buffer, CTX. */ +BASE32_INLINE void +base32_decode_ctx_init (struct base32_decode_context *ctx) +{ + ctx->i = 0; +} extern bool base32_decode_ctx (struct base32_decode_context *ctx, const char *restrict in, idx_t inlen, @@ -59,4 +90,10 @@ extern bool base32_decode_alloc_ctx (struct base32_decode_context *ctx, #define base32_decode_alloc(in, inlen, out, outlen) \ base32_decode_alloc_ctx (NULL, in, inlen, out, outlen) +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + #endif /* BASE32_H */ |