| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | /* Decomposed printf argument list.   Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc.   This program is free software; you can redistribute it and/or modify it   under the terms of the GNU Library General Public License as published   by the Free Software Foundation; either version 2, or (at your option)   any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with this program; if not, write to the Free Software   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,   USA.  */#ifndef _PRINTF_ARGS_H#define _PRINTF_ARGS_H/* This file can be parametrized with the following macros:     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.     PRINTF_FETCHARGS   Name of the function to be declared.     STATIC             Set to 'static' to declare the function static.  *//* Default parameters.  */#ifndef PRINTF_FETCHARGS# define PRINTF_FETCHARGS printf_fetchargs#endif/* Get size_t.  */#include <stddef.h>/* Get wchar_t.  */#if HAVE_WCHAR_T# include <stddef.h>#endif/* Get wint_t.  */#if HAVE_WINT_T# include <wchar.h>#endif/* Get va_list.  */#include <stdarg.h>/* Argument types */typedef enum{  TYPE_NONE,  TYPE_SCHAR,  TYPE_UCHAR,  TYPE_SHORT,  TYPE_USHORT,  TYPE_INT,  TYPE_UINT,  TYPE_LONGINT,  TYPE_ULONGINT,#if HAVE_LONG_LONG_INT  TYPE_LONGLONGINT,  TYPE_ULONGLONGINT,#endif  TYPE_DOUBLE,  TYPE_LONGDOUBLE,  TYPE_CHAR,#if HAVE_WINT_T  TYPE_WIDE_CHAR,#endif  TYPE_STRING,#if HAVE_WCHAR_T  TYPE_WIDE_STRING,#endif  TYPE_POINTER,  TYPE_COUNT_SCHAR_POINTER,  TYPE_COUNT_SHORT_POINTER,  TYPE_COUNT_INT_POINTER,  TYPE_COUNT_LONGINT_POINTER#if HAVE_LONG_LONG_INT, TYPE_COUNT_LONGLONGINT_POINTER#endif#if ENABLE_UNISTDIO  /* The unistdio extensions.  */, TYPE_U8_STRING, TYPE_U16_STRING, TYPE_U32_STRING#endif} arg_type;/* Polymorphic argument */typedef struct{  arg_type type;  union  {    signed char			a_schar;    unsigned char		a_uchar;    short			a_short;    unsigned short		a_ushort;    int				a_int;    unsigned int		a_uint;    long int			a_longint;    unsigned long int		a_ulongint;#if HAVE_LONG_LONG_INT    long long int		a_longlongint;    unsigned long long int	a_ulonglongint;#endif    float			a_float;    double			a_double;    long double			a_longdouble;    int				a_char;#if HAVE_WINT_T    wint_t			a_wide_char;#endif    const char*			a_string;#if HAVE_WCHAR_T    const wchar_t*		a_wide_string;#endif    void*			a_pointer;    signed char *		a_count_schar_pointer;    short *			a_count_short_pointer;    int *			a_count_int_pointer;    long int *			a_count_longint_pointer;#if HAVE_LONG_LONG_INT    long long int *		a_count_longlongint_pointer;#endif#if ENABLE_UNISTDIO    /* The unistdio extensions.  */    const uint8_t *		a_u8_string;    const uint16_t *		a_u16_string;    const uint32_t *		a_u32_string;#endif  }  a;}argument;typedef struct{  size_t count;  argument *arg;}arguments;/* Fetch the arguments, putting them into a. */#ifdef STATICSTATIC#elseextern#endifint PRINTF_FETCHARGS (va_list args, arguments *a);#endif /* _PRINTF_ARGS_H */
 |