1 /* Elementary Unicode string functions.
2 Copyright (C) 2002, 2005-2007 Free Software Foundation, Inc.
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)
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.
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
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
37 /* These work like the printf function family.
39 The format directive 'U' takes an UTF-8 string (const uint8_t *).
40 The format directive 'lU' takes an UTF-16 string (const uint16_t *).
41 The format directive 'llU' takes an UTF-32 string (const uint32_t *).
43 The prefix (ulc_, u8_, u16_, u16_) indicates the type of the resulting
44 string. The prefix 'ulc' stands for "locale encoded".
46 An infix 'v' indicates that a va_list is passed instead of multiple
49 The functions *sprintf have a 'buf' argument that is assumed to be large
50 enough. (DANGEROUS! Overflowing the buffer will crash the program.)
51 The functions *snprintf have a 'buf' argument that is assumed to be 'size'
52 units large. (DANGEROUS! The resulting string might be truncated in the
53 middle of a multibyte character.)
54 The functions *asprintf have a 'resultp' argument. The result will be
55 freshly allocated and stored in *resultp.
56 The functions *asnprintf have a (resultbuf, lengthp) argument pair. If
57 resultbuf is not NULL and the result fits into *lengthp units, it is put
58 in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated
59 string is returned. In both cases, *lengthp is set to the length (number
60 of units) of the returned string. In case of error, NULL is returned and
64 /* ASCII format string, result in locale dependent encoded 'char *'. */
66 ulc_sprintf (char *buf,
67 const char *format, ...);
69 ulc_snprintf (char *buf, size_t size,
70 const char *format, ...);
72 ulc_asprintf (char **resultp,
73 const char *format, ...);
75 ulc_asnprintf (char *resultbuf, size_t *lengthp,
76 const char *format, ...);
78 ulc_vsprintf (char *buf,
79 const char *format, va_list ap);
81 ulc_vsnprintf (char *buf, size_t size,
82 const char *format, va_list ap);
84 ulc_vasprintf (char **resultp,
85 const char *format, va_list ap);
87 ulc_vasnprintf (char *resultbuf, size_t *lengthp,
88 const char *format, va_list ap);
90 /* ASCII format string, result in UTF-8 format. */
92 u8_sprintf (uint8_t *buf,
93 const char *format, ...);
95 u8_snprintf (uint8_t *buf, size_t size,
96 const char *format, ...);
98 u8_asprintf (uint8_t **resultp,
99 const char *format, ...);
101 u8_asnprintf (uint8_t *resultbuf, size_t *lengthp,
102 const char *format, ...);
104 u8_vsprintf (uint8_t *buf,
105 const char *format, va_list ap);
107 u8_vsnprintf (uint8_t *buf, size_t size,
108 const char *format, va_list ap);
110 u8_vasprintf (uint8_t **resultp,
111 const char *format, va_list ap);
113 u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp,
114 const char *format, va_list ap);
116 /* UTF-8 format string, result in UTF-8 format. */
118 u8_u8_sprintf (uint8_t *buf,
119 const uint8_t *format, ...);
121 u8_u8_snprintf (uint8_t *buf, size_t size,
122 const uint8_t *format, ...);
124 u8_u8_asprintf (uint8_t **resultp,
125 const uint8_t *format, ...);
127 u8_u8_asnprintf (uint8_t *resultbuf, size_t *lengthp,
128 const uint8_t *format, ...);
130 u8_u8_vsprintf (uint8_t *buf,
131 const uint8_t *format, va_list ap);
133 u8_u8_vsnprintf (uint8_t *buf, size_t size,
134 const uint8_t *format, va_list ap);
136 u8_u8_vasprintf (uint8_t **resultp,
137 const uint8_t *format, va_list ap);
139 u8_u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp,
140 const uint8_t *format, va_list ap);
142 /* ASCII format string, result in UTF-16 format. */
144 u16_sprintf (uint16_t *buf,
145 const char *format, ...);
147 u16_snprintf (uint16_t *buf, size_t size,
148 const char *format, ...);
150 u16_asprintf (uint16_t **resultp,
151 const char *format, ...);
153 u16_asnprintf (uint16_t *resultbuf, size_t *lengthp,
154 const char *format, ...);
156 u16_vsprintf (uint16_t *buf,
157 const char *format, va_list ap);
159 u16_vsnprintf (uint16_t *buf, size_t size,
160 const char *format, va_list ap);
162 u16_vasprintf (uint16_t **resultp,
163 const char *format, va_list ap);
165 u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp,
166 const char *format, va_list ap);
168 /* UTF-16 format string, result in UTF-16 format. */
170 u16_u16_sprintf (uint16_t *buf,
171 const uint16_t *format, ...);
173 u16_u16_snprintf (uint16_t *buf, size_t size,
174 const uint16_t *format, ...);
176 u16_u16_asprintf (uint16_t **resultp,
177 const uint16_t *format, ...);
179 u16_u16_asnprintf (uint16_t *resultbuf, size_t *lengthp,
180 const uint16_t *format, ...);
182 u16_u16_vsprintf (uint16_t *buf,
183 const uint16_t *format, va_list ap);
185 u16_u16_vsnprintf (uint16_t *buf, size_t size,
186 const uint16_t *format, va_list ap);
188 u16_u16_vasprintf (uint16_t **resultp,
189 const uint16_t *format, va_list ap);
191 u16_u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp,
192 const uint16_t *format, va_list ap);
194 /* ASCII format string, result in UTF-32 format. */
196 u32_sprintf (uint32_t *buf,
197 const char *format, ...);
199 u32_snprintf (uint32_t *buf, size_t size,
200 const char *format, ...);
202 u32_asprintf (uint32_t **resultp,
203 const char *format, ...);
205 u32_asnprintf (uint32_t *resultbuf, size_t *lengthp,
206 const char *format, ...);
208 u32_vsprintf (uint32_t *buf,
209 const char *format, va_list ap);
211 u32_vsnprintf (uint32_t *buf, size_t size,
212 const char *format, va_list ap);
214 u32_vasprintf (uint32_t **resultp,
215 const char *format, va_list ap);
217 u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp,
218 const char *format, va_list ap);
220 /* UTF-32 format string, result in UTF-32 format. */
222 u32_u32_sprintf (uint32_t *buf,
223 const uint32_t *format, ...);
225 u32_u32_snprintf (uint32_t *buf, size_t size,
226 const uint32_t *format, ...);
228 u32_u32_asprintf (uint32_t **resultp,
229 const uint32_t *format, ...);
231 u32_u32_asnprintf (uint32_t *resultbuf, size_t *lengthp,
232 const uint32_t *format, ...);
234 u32_u32_vsprintf (uint32_t *buf,
235 const uint32_t *format, va_list ap);
237 u32_u32_vsnprintf (uint32_t *buf, size_t size,
238 const uint32_t *format, va_list ap);
240 u32_u32_vasprintf (uint32_t **resultp,
241 const uint32_t *format, va_list ap);
243 u32_u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp,
244 const uint32_t *format, va_list ap);
246 /* ASCII format string, output to FILE in locale dependent encoding. */
248 ulc_fprintf (FILE *stream,
249 const char *format, ...);
251 ulc_vfprintf (FILE *stream,
252 const char *format, va_list ap);
258 #endif /* _UNISTDIO_H */