00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifdef HAVE_CONFIG_H
00019 # include <config.h>
00020 #endif
00021
00022
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, int);
00039 break;
00040 case TYPE_UCHAR:
00041 ap->a.a_uchar = va_arg (args, int);
00042 break;
00043 case TYPE_SHORT:
00044 ap->a.a_short = va_arg (args, int);
00045 break;
00046 case TYPE_USHORT:
00047 ap->a.a_ushort = va_arg (args, 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
00115 return -1;
00116 }
00117 return 0;
00118 }