(root)/
coreutils-9.4/
lib/
base64.h
       1  /* base64.h -- Encode binary data using printable characters.
       2     Copyright (C) 2004-2006, 2009-2023 Free Software Foundation, Inc.
       3     Written by Simon Josefsson.
       4  
       5     This file is free software: you can redistribute it and/or modify
       6     it under the terms of the GNU Lesser General Public License as
       7     published by the Free Software Foundation; either version 2.1 of the
       8     License, or (at your option) any later version.
       9  
      10     This file is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13     GNU Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public License
      16     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifndef BASE64_H
      19  # define BASE64_H
      20  
      21  /* This file uses _GL_ATTRIBUTE_CONST.  */
      22  #if !_GL_CONFIG_H_INCLUDED
      23   #error "Please include config.h first."
      24  #endif
      25  
      26  /* Get idx_t.  */
      27  # include <idx.h>
      28  
      29  # ifdef __cplusplus
      30  extern "C" {
      31  # endif
      32  
      33  /* This uses that the expression (n+(k-1))/k means the smallest
      34     integer >= n/k, i.e., the ceiling of n/k.  */
      35  # define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4)
      36  
      37  struct base64_decode_context
      38  {
      39    int i;
      40    char buf[4];
      41  };
      42  
      43  extern bool isbase64 (char ch) _GL_ATTRIBUTE_CONST;
      44  
      45  extern void base64_encode (const char *restrict in, idx_t inlen,
      46                             char *restrict out, idx_t outlen);
      47  
      48  extern idx_t base64_encode_alloc (const char *in, idx_t inlen, char **out);
      49  
      50  extern void base64_decode_ctx_init (struct base64_decode_context *ctx);
      51  
      52  extern bool base64_decode_ctx (struct base64_decode_context *ctx,
      53                                 const char *restrict in, idx_t inlen,
      54                                 char *restrict out, idx_t *outlen);
      55  
      56  extern bool base64_decode_alloc_ctx (struct base64_decode_context *ctx,
      57                                       const char *in, idx_t inlen,
      58                                       char **out, idx_t *outlen);
      59  
      60  #define base64_decode(in, inlen, out, outlen) \
      61          base64_decode_ctx (NULL, in, inlen, out, outlen)
      62  
      63  #define base64_decode_alloc(in, inlen, out, outlen) \
      64          base64_decode_alloc_ctx (NULL, in, inlen, out, outlen)
      65  
      66  # ifdef __cplusplus
      67  }
      68  # endif
      69  
      70  #endif /* BASE64_H */