|
1 /************************************************************************* |
|
2 * |
|
3 * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg. |
|
4 * |
|
5 * Permission to use, copy, modify, and distribute this software for any |
|
6 * purpose with or without fee is hereby granted, provided that the above |
|
7 * copyright notice and this permission notice appear in all copies. |
|
8 * |
|
9 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED |
|
10 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF |
|
11 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND |
|
12 * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. |
|
13 * |
|
14 * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. |
|
15 * |
|
16 ************************************************************************* |
|
17 * |
|
18 * http://ctrio.sourceforge.net/ |
|
19 * |
|
20 ************************************************************************ |
|
21 */ |
|
22 |
|
23 /** @file |
|
24 @internalComponent |
|
25 @released |
|
26 */ |
|
27 |
|
28 #ifndef TRIO_TRIO_H |
|
29 #define TRIO_TRIO_H |
|
30 |
|
31 #if !defined(WITHOUT_TRIO) |
|
32 |
|
33 /* |
|
34 * Use autoconf defines if present. Packages using trio must define |
|
35 * HAVE_CONFIG_H as a compiler option themselves. |
|
36 */ |
|
37 #if defined(HAVE_CONFIG_H) |
|
38 # include <config.h> |
|
39 #endif |
|
40 |
|
41 #include <xmlengtriodef.h> |
|
42 |
|
43 #include <stdio.h> |
|
44 #include <stdlib.h> |
|
45 #if defined(TRIO_COMPILER_ANCIENT) |
|
46 # include <varargs.h> |
|
47 #else |
|
48 # include <stdarg.h> |
|
49 #endif |
|
50 |
|
51 #ifdef __cplusplus |
|
52 extern "C" { |
|
53 #endif |
|
54 |
|
55 /* |
|
56 * Error codes. |
|
57 * |
|
58 * Remember to add a textual description to trio_strerror. |
|
59 */ |
|
60 enum { |
|
61 TRIO_EOF = 1, |
|
62 TRIO_EINVAL = 2, |
|
63 TRIO_ETOOMANY = 3, |
|
64 TRIO_EDBLREF = 4, |
|
65 TRIO_EGAP = 5, |
|
66 TRIO_ENOMEM = 6, |
|
67 TRIO_ERANGE = 7, |
|
68 TRIO_ERRNO = 8, |
|
69 TRIO_ECUSTOM = 9 |
|
70 }; |
|
71 |
|
72 /* Error macros */ |
|
73 #define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF) |
|
74 #define TRIO_ERROR_POSITION(x) ((-(x)) >> 8) |
|
75 #define TRIO_ERROR_NAME(x) trio_strerror(x) |
|
76 |
|
77 typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int)); |
|
78 typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t)); |
|
79 |
|
80 TRIO_CONST char *trio_strerror TRIO_PROTO((int)); |
|
81 |
|
82 /************************************************************************* |
|
83 * Print Functions |
|
84 */ |
|
85 |
|
86 int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...)); |
|
87 int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args)); |
|
88 int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args)); |
|
89 |
|
90 #ifndef XMLENGINE_EXCLUDE_FILE_FUNC |
|
91 int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...)); |
|
92 int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args)); |
|
93 int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args)); |
|
94 #endif |
|
95 |
|
96 int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...)); |
|
97 int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args)); |
|
98 int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args)); |
|
99 |
|
100 int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, |
|
101 TRIO_CONST char *format, ...)); |
|
102 int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, |
|
103 TRIO_CONST char *format, va_list args)); |
|
104 int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, |
|
105 TRIO_CONST char *format, void **args)); |
|
106 |
|
107 int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...)); |
|
108 int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args)); |
|
109 int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args)); |
|
110 |
|
111 int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...)); |
|
112 int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, |
|
113 va_list args)); |
|
114 int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, |
|
115 void **args)); |
|
116 |
|
117 int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...)); |
|
118 int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, |
|
119 va_list args)); |
|
120 |
|
121 char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...)); |
|
122 char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args)); |
|
123 |
|
124 int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...)); |
|
125 int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args)); |
|
126 |
|
127 /************************************************************************* |
|
128 * Scan Functions |
|
129 */ |
|
130 int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...)); |
|
131 int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args)); |
|
132 int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args)); |
|
133 |
|
134 #ifndef XMLENGINE_EXCLUDE_FILE_FUNC |
|
135 int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...)); |
|
136 int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args)); |
|
137 int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args)); |
|
138 #endif |
|
139 |
|
140 int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...)); |
|
141 int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args)); |
|
142 int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args)); |
|
143 |
|
144 int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, |
|
145 TRIO_CONST char *format, ...)); |
|
146 int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, |
|
147 TRIO_CONST char *format, va_list args)); |
|
148 int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, |
|
149 TRIO_CONST char *format, void **args)); |
|
150 |
|
151 int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...)); |
|
152 int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args)); |
|
153 int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args)); |
|
154 |
|
155 /************************************************************************* |
|
156 * Locale Functions |
|
157 */ |
|
158 void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint)); |
|
159 void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator)); |
|
160 void trio_locale_set_grouping TRIO_PROTO((char *grouping)); |
|
161 |
|
162 /************************************************************************* |
|
163 * Renaming |
|
164 */ |
|
165 #ifdef TRIO_REPLACE_STDIO |
|
166 /* Replace the <stdio.h> functions */ |
|
167 #ifndef HAVE_PRINTF |
|
168 # define printf trio_printf |
|
169 #endif |
|
170 #ifndef HAVE_VPRINTF |
|
171 # define vprintf trio_vprintf |
|
172 #endif |
|
173 #ifndef HAVE_FPRINTF |
|
174 # define fprintf trio_fprintf |
|
175 #endif |
|
176 #ifndef HAVE_VFPRINTF |
|
177 # define vfprintf trio_vfprintf |
|
178 #endif |
|
179 #ifndef HAVE_SPRINTF |
|
180 # define sprintf trio_sprintf |
|
181 #endif |
|
182 #ifndef HAVE_VSPRINTF |
|
183 # define vsprintf trio_vsprintf |
|
184 #endif |
|
185 #ifndef HAVE_SNPRINTF |
|
186 # define snprintf trio_snprintf |
|
187 #endif |
|
188 #ifndef HAVE_VSNPRINTF |
|
189 # define vsnprintf trio_vsnprintf |
|
190 #endif |
|
191 #ifndef HAVE_SCANF |
|
192 # define scanf trio_scanf |
|
193 #endif |
|
194 #ifndef HAVE_VSCANF |
|
195 # define vscanf trio_vscanf |
|
196 #endif |
|
197 #ifndef HAVE_FSCANF |
|
198 # define fscanf trio_fscanf |
|
199 #endif |
|
200 #ifndef HAVE_VFSCANF |
|
201 # define vfscanf trio_vfscanf |
|
202 #endif |
|
203 #ifndef HAVE_SSCANF |
|
204 # define sscanf trio_sscanf |
|
205 #endif |
|
206 #ifndef HAVE_VSSCANF |
|
207 # define vsscanf trio_vsscanf |
|
208 #endif |
|
209 /* These aren't stdio functions, but we make them look similar */ |
|
210 #define dprintf trio_dprintf |
|
211 #define vdprintf trio_vdprintf |
|
212 #define aprintf trio_aprintf |
|
213 #define vaprintf trio_vaprintf |
|
214 #define asprintf trio_asprintf |
|
215 #define vasprintf trio_vasprintf |
|
216 #define dscanf trio_dscanf |
|
217 #define vdscanf trio_vdscanf |
|
218 #endif |
|
219 |
|
220 #ifdef __cplusplus |
|
221 } /* extern "C" */ |
|
222 #endif |
|
223 |
|
224 #endif /* WITHOUT_TRIO */ |
|
225 |
|
226 #endif /* TRIO_TRIO_H */ |
|
227 |