printf-args.c

00001 /* Decomposed printf argument list.
00002    Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
00003 
00004    This program is free software; you can redistribute it and/or modify
00005    it under the terms of the GNU Lesser General Public License as published by
00006    the Free Software Foundation; either version 2.1, or (at your option)
00007    any later version.
00008 
00009    This program is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012    GNU Lesser General Public License for more details.
00013 
00014    You should have received a copy of the GNU Lesser General Public License along
00015    with this program; if not, write to the Free Software Foundation,
00016    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
00017 
00018 #ifdef HAVE_CONFIG_H
00019 # include <config.h>
00020 #endif
00021 
00022 /* Specification.  */
00023 #include "printf-args.h"
00024 
00025 #ifdef STATIC
00026 STATIC
00027 #endif
00028 int
00029 printf_fetchargs (va_list args, arguments *a)
00030 {
00031   size_t i;
00032   argument *ap;
00033 
00034   for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
00035     switch (ap->type)
00036       {
00037       case TYPE_SCHAR:
00038         ap->a.a_schar = va_arg (args, /*signed char*/ int);
00039         break;
00040       case TYPE_UCHAR:
00041         ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
00042         break;
00043       case TYPE_SHORT:
00044         ap->a.a_short = va_arg (args, /*short*/ int);
00045         break;
00046       case TYPE_USHORT:
00047         ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
00048         break;
00049       case TYPE_INT:
00050         ap->a.a_int = va_arg (args, int);
00051         break;
00052       case TYPE_UINT:
00053         ap->a.a_uint = va_arg (args, unsigned int);
00054         break;
00055       case TYPE_LONGINT:
00056         ap->a.a_longint = va_arg (args, long int);
00057         break;
00058       case TYPE_ULONGINT:
00059         ap->a.a_ulongint = va_arg (args, unsigned long int);
00060         break;
00061 #ifdef HAVE_LONG_LONG
00062       case TYPE_LONGLONGINT:
00063         ap->a.a_longlongint = va_arg (args, long long int);
00064         break;
00065       case TYPE_ULONGLONGINT:
00066         ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
00067         break;
00068 #endif
00069       case TYPE_DOUBLE:
00070         ap->a.a_double = va_arg (args, double);
00071         break;
00072 #ifdef HAVE_LONG_DOUBLE
00073       case TYPE_LONGDOUBLE:
00074         ap->a.a_longdouble = va_arg (args, long double);
00075         break;
00076 #endif
00077       case TYPE_CHAR:
00078         ap->a.a_char = va_arg (args, int);
00079         break;
00080 #ifdef HAVE_WINT_T
00081       case TYPE_WIDE_CHAR:
00082         ap->a.a_wide_char = va_arg (args, wint_t);
00083         break;
00084 #endif
00085       case TYPE_STRING:
00086         ap->a.a_string = va_arg (args, const char *);
00087         break;
00088 #ifdef HAVE_WCHAR_T
00089       case TYPE_WIDE_STRING:
00090         ap->a.a_wide_string = va_arg (args, const wchar_t *);
00091         break;
00092 #endif
00093       case TYPE_POINTER:
00094         ap->a.a_pointer = va_arg (args, void *);
00095         break;
00096       case TYPE_COUNT_SCHAR_POINTER:
00097         ap->a.a_count_schar_pointer = va_arg (args, signed char *);
00098         break;
00099       case TYPE_COUNT_SHORT_POINTER:
00100         ap->a.a_count_short_pointer = va_arg (args, short *);
00101         break;
00102       case TYPE_COUNT_INT_POINTER:
00103         ap->a.a_count_int_pointer = va_arg (args, int *);
00104         break;
00105       case TYPE_COUNT_LONGINT_POINTER:
00106         ap->a.a_count_longint_pointer = va_arg (args, long int *);
00107         break;
00108 #ifdef HAVE_LONG_LONG
00109       case TYPE_COUNT_LONGLONGINT_POINTER:
00110         ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
00111         break;
00112 #endif
00113       default:
00114         /* Unknown type.  */
00115         return -1;
00116       }
00117   return 0;
00118 }

Generated on Thu Jan 24 16:50:54 2008 for WvStreams by  doxygen 1.5.4