25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 /** |
28 /** |
29 * @file printf.h |
29 * @file printf.h |
30 * @brief Wrapper for write functions with a printf-like interface. |
30 * @brief Wrapper for write-functions with a printf-like interface. |
31 * @author Mike Becker |
31 * @author Mike Becker |
32 * @author Olaf Wintermann |
32 * @author Olaf Wintermann |
33 * @copyright 2-Clause BSD License |
33 * @copyright 2-Clause BSD License |
34 */ |
34 */ |
35 |
35 |
100 const char *fmt, |
100 const char *fmt, |
101 va_list ap |
101 va_list ap |
102 ); |
102 ); |
103 |
103 |
104 /** |
104 /** |
105 * A @c asprintf like function which allocates space for a string |
105 * An @c asprintf like function which allocates space for a string |
106 * the result is written to. |
106 * the result is written to. |
107 * |
107 * |
108 * @note The resulting string is guaranteed to be zero-terminated, |
108 * @note The resulting string is guaranteed to be zero-terminated, |
109 * unless there was an error, in which case the string's pointer |
109 * unless there was an error, in which case the string's pointer |
110 * will be @c NULL. |
110 * will be @c NULL. |
124 const char *fmt, |
124 const char *fmt, |
125 ... |
125 ... |
126 ); |
126 ); |
127 |
127 |
128 /** |
128 /** |
129 * A @c asprintf like function which allocates space for a string |
129 * An @c asprintf like function which allocates space for a string |
130 * the result is written to. |
130 * the result is written to. |
131 * |
131 * |
132 * @note The resulting string is guaranteed to be zero-terminated, |
132 * @note The resulting string is guaranteed to be zero-terminated, |
133 * unless there was an error, in which case the string's pointer |
133 * unless there was an error, in which case the string's pointer |
134 * will be @c NULL. |
134 * will be @c NULL. |
167 /** |
167 /** |
168 * A @c vasprintf like function which allocates space for a string |
168 * A @c vasprintf like function which allocates space for a string |
169 * the result is written to. |
169 * the result is written to. |
170 * |
170 * |
171 * @note The resulting string is guaranteed to be zero-terminated, |
171 * @note The resulting string is guaranteed to be zero-terminated, |
172 * unless there was in error, in which case the string's pointer |
172 * unless there was an error, in which case the string's pointer |
173 * will be @c NULL. |
173 * will be @c NULL. |
174 * |
174 * |
175 * @param fmt (@c char*) format string |
175 * @param fmt (@c char*) format string |
176 * @param ap (@c va_list) argument list |
176 * @param ap (@c va_list) argument list |
177 * @return (@c cxmutstr) the formatted string |
177 * @return (@c cxmutstr) the formatted string |
202 * |
202 * |
203 * @param str (@c char**) a pointer to the string buffer |
203 * @param str (@c char**) a pointer to the string buffer |
204 * @param len (@c size_t*) a pointer to the length of the buffer |
204 * @param len (@c size_t*) a pointer to the length of the buffer |
205 * @param fmt (@c char*) the format string |
205 * @param fmt (@c char*) the format string |
206 * @param ... additional arguments |
206 * @param ... additional arguments |
207 * @return (@c int) the length of produced string or an error code from stdlib printf implementation |
207 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation |
208 */ |
208 */ |
209 #define cx_sprintf(str, len, fmt, ...) cx_sprintf_a(cxDefaultAllocator, str, len, fmt, __VA_ARGS__) |
209 #define cx_sprintf(str, len, fmt, ...) cx_sprintf_a(cxDefaultAllocator, str, len, fmt, __VA_ARGS__) |
210 |
210 |
211 /** |
211 /** |
212 * An @c sprintf like function which reallocates the string when the buffer is not large enough. |
212 * An @c sprintf like function which reallocates the string when the buffer is not large enough. |
220 * @param alloc the allocator to use |
220 * @param alloc the allocator to use |
221 * @param str a pointer to the string buffer |
221 * @param str a pointer to the string buffer |
222 * @param len a pointer to the length of the buffer |
222 * @param len a pointer to the length of the buffer |
223 * @param fmt the format string |
223 * @param fmt the format string |
224 * @param ... additional arguments |
224 * @param ... additional arguments |
225 * @return the length of produced string or an error code from stdlib printf implementation |
225 * @return the length of the produced string or an error code from stdlib printf implementation |
226 */ |
226 */ |
227 cx_attr_nonnull_arg(1, 2, 3, 4) |
227 cx_attr_nonnull_arg(1, 2, 3, 4) |
228 cx_attr_printf(4, 5) |
228 cx_attr_printf(4, 5) |
229 cx_attr_cstr_arg(4) |
229 cx_attr_cstr_arg(4) |
230 cx_attr_export |
230 cx_attr_export |
246 * |
246 * |
247 * @param str (@c char**) a pointer to the string buffer |
247 * @param str (@c char**) a pointer to the string buffer |
248 * @param len (@c size_t*) a pointer to the length of the buffer |
248 * @param len (@c size_t*) a pointer to the length of the buffer |
249 * @param fmt (@c char*) the format string |
249 * @param fmt (@c char*) the format string |
250 * @param ap (@c va_list) argument list |
250 * @param ap (@c va_list) argument list |
251 * @return (@c int) the length of produced string or an error code from stdlib printf implementation |
251 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation |
252 */ |
252 */ |
253 #define cx_vsprintf(str, len, fmt, ap) cx_vsprintf_a(cxDefaultAllocator, str, len, fmt, ap) |
253 #define cx_vsprintf(str, len, fmt, ap) cx_vsprintf_a(cxDefaultAllocator, str, len, fmt, ap) |
254 |
254 |
255 /** |
255 /** |
256 * An @c sprintf like function which reallocates the string when the buffer is not large enough. |
256 * An @c sprintf like function which reallocates the string when the buffer is not large enough. |
264 * @param alloc the allocator to use |
264 * @param alloc the allocator to use |
265 * @param str a pointer to the string buffer |
265 * @param str a pointer to the string buffer |
266 * @param len a pointer to the length of the buffer |
266 * @param len a pointer to the length of the buffer |
267 * @param fmt the format string |
267 * @param fmt the format string |
268 * @param ap argument list |
268 * @param ap argument list |
269 * @return the length of produced string or an error code from stdlib printf implementation |
269 * @return the length of the produced string or an error code from stdlib printf implementation |
270 */ |
270 */ |
271 cx_attr_nonnull |
271 cx_attr_nonnull |
272 cx_attr_cstr_arg(4) |
272 cx_attr_cstr_arg(4) |
273 cx_attr_access_rw(2) |
273 cx_attr_access_rw(2) |
274 cx_attr_access_rw(3) |
274 cx_attr_access_rw(3) |
298 * @param buf (@c char*) a pointer to the buffer |
298 * @param buf (@c char*) a pointer to the buffer |
299 * @param len (@c size_t*) a pointer to the length of the buffer |
299 * @param len (@c size_t*) a pointer to the length of the buffer |
300 * @param str (@c char**) a pointer where the location of the result shall be stored |
300 * @param str (@c char**) a pointer where the location of the result shall be stored |
301 * @param fmt (@c char*) the format string |
301 * @param fmt (@c char*) the format string |
302 * @param ... additional arguments |
302 * @param ... additional arguments |
303 * @return (@c int) the length of produced string or an error code from stdlib printf implementation |
303 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation |
304 */ |
304 */ |
305 #define cx_sprintf_s(buf, len, str, fmt, ...) cx_sprintf_sa(cxDefaultAllocator, buf, len, str, fmt, __VA_ARGS__) |
305 #define cx_sprintf_s(buf, len, str, fmt, ...) cx_sprintf_sa(cxDefaultAllocator, buf, len, str, fmt, __VA_ARGS__) |
306 |
306 |
307 /** |
307 /** |
308 * An @c sprintf like function which allocates a new string when the buffer is not large enough. |
308 * An @c sprintf like function which allocates a new string when the buffer is not large enough. |
321 * @param buf a pointer to the buffer |
321 * @param buf a pointer to the buffer |
322 * @param len a pointer to the length of the buffer |
322 * @param len a pointer to the length of the buffer |
323 * @param str a pointer where the location of the result shall be stored |
323 * @param str a pointer where the location of the result shall be stored |
324 * @param fmt the format string |
324 * @param fmt the format string |
325 * @param ... additional arguments |
325 * @param ... additional arguments |
326 * @return the length of produced string or an error code from stdlib printf implementation |
326 * @return the length of the produced string or an error code from stdlib printf implementation |
327 */ |
327 */ |
328 cx_attr_nonnull_arg(1, 2, 4, 5) |
328 cx_attr_nonnull_arg(1, 2, 4, 5) |
329 cx_attr_printf(5, 6) |
329 cx_attr_printf(5, 6) |
330 cx_attr_cstr_arg(5) |
330 cx_attr_cstr_arg(5) |
331 cx_attr_access_rw(2) |
331 cx_attr_access_rw(2) |
357 * @param buf (@c char*) a pointer to the buffer |
357 * @param buf (@c char*) a pointer to the buffer |
358 * @param len (@c size_t*) a pointer to the length of the buffer |
358 * @param len (@c size_t*) a pointer to the length of the buffer |
359 * @param str (@c char**) a pointer where the location of the result shall be stored |
359 * @param str (@c char**) a pointer where the location of the result shall be stored |
360 * @param fmt (@c char*) the format string |
360 * @param fmt (@c char*) the format string |
361 * @param ap (@c va_list) argument list |
361 * @param ap (@c va_list) argument list |
362 * @return (@c int) the length of produced string or an error code from stdlib printf implementation |
362 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation |
363 */ |
363 */ |
364 #define cx_vsprintf_s(buf, len, str, fmt, ap) cx_vsprintf_sa(cxDefaultAllocator, buf, len, str, fmt, ap) |
364 #define cx_vsprintf_s(buf, len, str, fmt, ap) cx_vsprintf_sa(cxDefaultAllocator, buf, len, str, fmt, ap) |
365 |
365 |
366 /** |
366 /** |
367 * An @c sprintf like function which allocates a new string when the buffer is not large enough. |
367 * An @c sprintf like function which allocates a new string when the buffer is not large enough. |
380 * @param buf a pointer to the buffer |
380 * @param buf a pointer to the buffer |
381 * @param len a pointer to the length of the buffer |
381 * @param len a pointer to the length of the buffer |
382 * @param str a pointer where the location of the result shall be stored |
382 * @param str a pointer where the location of the result shall be stored |
383 * @param fmt the format string |
383 * @param fmt the format string |
384 * @param ap argument list |
384 * @param ap argument list |
385 * @return the length of produced string or an error code from stdlib printf implementation |
385 * @return the length of the produced string or an error code from stdlib printf implementation |
386 */ |
386 */ |
387 cx_attr_nonnull |
387 cx_attr_nonnull |
388 cx_attr_cstr_arg(5) |
388 cx_attr_cstr_arg(5) |
389 cx_attr_export |
389 cx_attr_export |
390 int cx_vsprintf_sa( |
390 int cx_vsprintf_sa( |