diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 | 
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /pcp/intl/printf-args.h | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'pcp/intl/printf-args.h')
| -rw-r--r-- | pcp/intl/printf-args.h | 157 | 
1 files changed, 157 insertions, 0 deletions
| diff --git a/pcp/intl/printf-args.h b/pcp/intl/printf-args.h new file mode 100644 index 0000000..89693df --- /dev/null +++ b/pcp/intl/printf-args.h @@ -0,0 +1,157 @@ +/* Decomposed printf argument list. +   Copyright (C) 1999, 2002-2003, 2006-2007, 2011 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as published by +   the Free Software Foundation; either version 2.1 of the License, 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 Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ + +#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; + +/* Number of directly allocated arguments (no malloc() needed).  */ +#define N_DIRECT_ALLOC_ARGUMENTS 7 + +typedef struct +{ +  size_t count; +  argument *arg; +  argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ | 
