]>
Commit | Line | Data |
---|---|---|
b0cacab0 TT |
1 | /* Decomposed printf argument list. |
2 | Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. | |
3 | ||
4 | This program is free software; you can redistribute it and/or modify it | |
5 | under the terms of the GNU Library General Public License as published | |
6 | by the Free Software Foundation; either version 2, or (at your option) | |
7 | any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | Library General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Library General Public | |
15 | License along with this program; if not, write to the Free Software | |
8785aaea | 16 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, |
b0cacab0 TT |
17 | USA. */ |
18 | ||
19 | #ifdef HAVE_CONFIG_H | |
20 | # include <config.h> | |
21 | #endif | |
22 | ||
23 | /* Specification. */ | |
24 | #include "printf-args.h" | |
25 | ||
26 | #ifdef STATIC | |
27 | STATIC | |
28 | #endif | |
29 | int | |
30 | printf_fetchargs (va_list args, arguments *a) | |
31 | { | |
32 | size_t i; | |
33 | argument *ap; | |
34 | ||
35 | for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) | |
36 | switch (ap->type) | |
37 | { | |
38 | case TYPE_SCHAR: | |
39 | ap->a.a_schar = va_arg (args, /*signed char*/ int); | |
40 | break; | |
41 | case TYPE_UCHAR: | |
42 | ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); | |
43 | break; | |
44 | case TYPE_SHORT: | |
45 | ap->a.a_short = va_arg (args, /*short*/ int); | |
46 | break; | |
47 | case TYPE_USHORT: | |
48 | ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); | |
49 | break; | |
50 | case TYPE_INT: | |
51 | ap->a.a_int = va_arg (args, int); | |
52 | break; | |
53 | case TYPE_UINT: | |
54 | ap->a.a_uint = va_arg (args, unsigned int); | |
55 | break; | |
56 | case TYPE_LONGINT: | |
57 | ap->a.a_longint = va_arg (args, long int); | |
58 | break; | |
59 | case TYPE_ULONGINT: | |
60 | ap->a.a_ulongint = va_arg (args, unsigned long int); | |
61 | break; | |
62 | #ifdef HAVE_LONG_LONG | |
63 | case TYPE_LONGLONGINT: | |
64 | ap->a.a_longlongint = va_arg (args, long long int); | |
65 | break; | |
66 | case TYPE_ULONGLONGINT: | |
67 | ap->a.a_ulonglongint = va_arg (args, unsigned long long int); | |
68 | break; | |
69 | #endif | |
70 | case TYPE_DOUBLE: | |
71 | ap->a.a_double = va_arg (args, double); | |
72 | break; | |
73 | #ifdef HAVE_LONG_DOUBLE | |
74 | case TYPE_LONGDOUBLE: | |
75 | ap->a.a_longdouble = va_arg (args, long double); | |
76 | break; | |
77 | #endif | |
78 | case TYPE_CHAR: | |
79 | ap->a.a_char = va_arg (args, int); | |
80 | break; | |
81 | #ifdef HAVE_WINT_T | |
82 | case TYPE_WIDE_CHAR: | |
83 | ap->a.a_wide_char = va_arg (args, wint_t); | |
84 | break; | |
85 | #endif | |
86 | case TYPE_STRING: | |
87 | ap->a.a_string = va_arg (args, const char *); | |
88 | break; | |
89 | #ifdef HAVE_WCHAR_T | |
90 | case TYPE_WIDE_STRING: | |
91 | ap->a.a_wide_string = va_arg (args, const wchar_t *); | |
92 | break; | |
93 | #endif | |
94 | case TYPE_POINTER: | |
95 | ap->a.a_pointer = va_arg (args, void *); | |
96 | break; | |
97 | case TYPE_COUNT_SCHAR_POINTER: | |
98 | ap->a.a_count_schar_pointer = va_arg (args, signed char *); | |
99 | break; | |
100 | case TYPE_COUNT_SHORT_POINTER: | |
101 | ap->a.a_count_short_pointer = va_arg (args, short *); | |
102 | break; | |
103 | case TYPE_COUNT_INT_POINTER: | |
104 | ap->a.a_count_int_pointer = va_arg (args, int *); | |
105 | break; | |
106 | case TYPE_COUNT_LONGINT_POINTER: | |
107 | ap->a.a_count_longint_pointer = va_arg (args, long int *); | |
108 | break; | |
109 | #ifdef HAVE_LONG_LONG | |
110 | case TYPE_COUNT_LONGLONGINT_POINTER: | |
111 | ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); | |
112 | break; | |
113 | #endif | |
114 | default: | |
115 | /* Unknown type. */ | |
116 | return -1; | |
117 | } | |
118 | return 0; | |
119 | } |