Blame gl/printf-parse.h

Packit Service 4684c1
/* Parse printf format string.
Packit Service 4684c1
   Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2020 Free Software
Packit Service 4684c1
   Foundation, Inc.
Packit Service 4684c1
Packit Service 4684c1
   This program is free software; you can redistribute it and/or modify
Packit Service 4684c1
   it under the terms of the GNU Lesser General Public License as published by
Packit Service 4684c1
   the Free Software Foundation; either version 2.1, or (at your option)
Packit Service 4684c1
   any later version.
Packit Service 4684c1
Packit Service 4684c1
   This program is distributed in the hope that it will be useful,
Packit Service 4684c1
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 4684c1
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 4684c1
   GNU Lesser General Public License for more details.
Packit Service 4684c1
Packit Service 4684c1
   You should have received a copy of the GNU Lesser General Public License along
Packit Service 4684c1
   with this program; if not, see <https://www.gnu.org/licenses/>.  */
Packit Service 4684c1
Packit Service 4684c1
#ifndef _PRINTF_PARSE_H
Packit Service 4684c1
#define _PRINTF_PARSE_H
Packit Service 4684c1
Packit Service 4684c1
/* This file can be parametrized with the following macros:
Packit Service 4684c1
     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
Packit Service 4684c1
     STATIC             Set to 'static' to declare the function static.  */
Packit Service 4684c1
Packit Service 4684c1
#if HAVE_FEATURES_H
Packit Service 4684c1
# include <features.h> /* for __GLIBC__, __UCLIBC__ */
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
#include "printf-args.h"
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
/* Flags */
Packit Service 4684c1
#define FLAG_GROUP       1      /* ' flag */
Packit Service 4684c1
#define FLAG_LEFT        2      /* - flag */
Packit Service 4684c1
#define FLAG_SHOWSIGN    4      /* + flag */
Packit Service 4684c1
#define FLAG_SPACE       8      /* space flag */
Packit Service 4684c1
#define FLAG_ALT        16      /* # flag */
Packit Service 4684c1
#define FLAG_ZERO       32
Packit Service 4684c1
#if __GLIBC__ >= 2 && !defined __UCLIBC__
Packit Service 4684c1
# define FLAG_LOCALIZED 64      /* I flag, uses localized digits */
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
/* arg_index value indicating that no argument is consumed.  */
Packit Service 4684c1
#define ARG_NONE        (~(size_t)0)
Packit Service 4684c1
Packit Service 4684c1
/* xxx_directive: A parsed directive.
Packit Service 4684c1
   xxx_directives: A parsed format string.  */
Packit Service 4684c1
Packit Service 4684c1
/* Number of directly allocated directives (no malloc() needed).  */
Packit Service 4684c1
#define N_DIRECT_ALLOC_DIRECTIVES 7
Packit Service 4684c1
Packit Service 4684c1
/* A parsed directive.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  const char* dir_start;
Packit Service 4684c1
  const char* dir_end;
Packit Service 4684c1
  int flags;
Packit Service 4684c1
  const char* width_start;
Packit Service 4684c1
  const char* width_end;
Packit Service 4684c1
  size_t width_arg_index;
Packit Service 4684c1
  const char* precision_start;
Packit Service 4684c1
  const char* precision_end;
Packit Service 4684c1
  size_t precision_arg_index;
Packit Service 4684c1
  char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
Packit Service 4684c1
  size_t arg_index;
Packit Service 4684c1
}
Packit Service 4684c1
char_directive;
Packit Service 4684c1
Packit Service 4684c1
/* A parsed format string.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  size_t count;
Packit Service 4684c1
  char_directive *dir;
Packit Service 4684c1
  size_t max_width_length;
Packit Service 4684c1
  size_t max_precision_length;
Packit Service 4684c1
  char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
Packit Service 4684c1
}
Packit Service 4684c1
char_directives;
Packit Service 4684c1
Packit Service 4684c1
#if ENABLE_UNISTDIO
Packit Service 4684c1
Packit Service 4684c1
/* A parsed directive.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  const uint8_t* dir_start;
Packit Service 4684c1
  const uint8_t* dir_end;
Packit Service 4684c1
  int flags;
Packit Service 4684c1
  const uint8_t* width_start;
Packit Service 4684c1
  const uint8_t* width_end;
Packit Service 4684c1
  size_t width_arg_index;
Packit Service 4684c1
  const uint8_t* precision_start;
Packit Service 4684c1
  const uint8_t* precision_end;
Packit Service 4684c1
  size_t precision_arg_index;
Packit Service 4684c1
  uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
Packit Service 4684c1
  size_t arg_index;
Packit Service 4684c1
}
Packit Service 4684c1
u8_directive;
Packit Service 4684c1
Packit Service 4684c1
/* A parsed format string.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  size_t count;
Packit Service 4684c1
  u8_directive *dir;
Packit Service 4684c1
  size_t max_width_length;
Packit Service 4684c1
  size_t max_precision_length;
Packit Service 4684c1
  u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
Packit Service 4684c1
}
Packit Service 4684c1
u8_directives;
Packit Service 4684c1
Packit Service 4684c1
/* A parsed directive.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  const uint16_t* dir_start;
Packit Service 4684c1
  const uint16_t* dir_end;
Packit Service 4684c1
  int flags;
Packit Service 4684c1
  const uint16_t* width_start;
Packit Service 4684c1
  const uint16_t* width_end;
Packit Service 4684c1
  size_t width_arg_index;
Packit Service 4684c1
  const uint16_t* precision_start;
Packit Service 4684c1
  const uint16_t* precision_end;
Packit Service 4684c1
  size_t precision_arg_index;
Packit Service 4684c1
  uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
Packit Service 4684c1
  size_t arg_index;
Packit Service 4684c1
}
Packit Service 4684c1
u16_directive;
Packit Service 4684c1
Packit Service 4684c1
/* A parsed format string.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  size_t count;
Packit Service 4684c1
  u16_directive *dir;
Packit Service 4684c1
  size_t max_width_length;
Packit Service 4684c1
  size_t max_precision_length;
Packit Service 4684c1
  u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
Packit Service 4684c1
}
Packit Service 4684c1
u16_directives;
Packit Service 4684c1
Packit Service 4684c1
/* A parsed directive.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  const uint32_t* dir_start;
Packit Service 4684c1
  const uint32_t* dir_end;
Packit Service 4684c1
  int flags;
Packit Service 4684c1
  const uint32_t* width_start;
Packit Service 4684c1
  const uint32_t* width_end;
Packit Service 4684c1
  size_t width_arg_index;
Packit Service 4684c1
  const uint32_t* precision_start;
Packit Service 4684c1
  const uint32_t* precision_end;
Packit Service 4684c1
  size_t precision_arg_index;
Packit Service 4684c1
  uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
Packit Service 4684c1
  size_t arg_index;
Packit Service 4684c1
}
Packit Service 4684c1
u32_directive;
Packit Service 4684c1
Packit Service 4684c1
/* A parsed format string.  */
Packit Service 4684c1
typedef struct
Packit Service 4684c1
{
Packit Service 4684c1
  size_t count;
Packit Service 4684c1
  u32_directive *dir;
Packit Service 4684c1
  size_t max_width_length;
Packit Service 4684c1
  size_t max_precision_length;
Packit Service 4684c1
  u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
Packit Service 4684c1
}
Packit Service 4684c1
u32_directives;
Packit Service 4684c1
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
/* Parses the format string.  Fills in the number N of directives, and fills
Packit Service 4684c1
   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
Packit Service 4684c1
   to the end of the format string.  Also fills in the arg_type fields of the
Packit Service 4684c1
   arguments and the needed count of arguments.  */
Packit Service 4684c1
#if ENABLE_UNISTDIO
Packit Service 4684c1
extern int
Packit Service 4684c1
       ulc_printf_parse (const char *format, char_directives *d, arguments *a);
Packit Service 4684c1
extern int
Packit Service 4684c1
       u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a);
Packit Service 4684c1
extern int
Packit Service 4684c1
       u16_printf_parse (const uint16_t *format, u16_directives *d,
Packit Service 4684c1
                         arguments *a);
Packit Service 4684c1
extern int
Packit Service 4684c1
       u32_printf_parse (const uint32_t *format, u32_directives *d,
Packit Service 4684c1
                         arguments *a);
Packit Service 4684c1
#else
Packit Service 4684c1
# ifdef STATIC
Packit Service 4684c1
STATIC
Packit Service 4684c1
# else
Packit Service 4684c1
extern
Packit Service 4684c1
# endif
Packit Service 4684c1
int printf_parse (const char *format, char_directives *d, arguments *a);
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
#endif /* _PRINTF_PARSE_H */