src/cx/printf.h

Sun, 23 Nov 2025 13:15:19 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 23 Nov 2025 13:15:19 +0100
changeset 1508
dfc0ddd9571e
parent 1426
3a89b31f0724
permissions
-rw-r--r--

optimize sorted insertion by using the infimum instead of the supremum

The reason is that the supremum returns the equal element with the smallest index, and we want the largest.
Therefore, we use the infimum, which already gives us the largest index when there are equal elements, and increase the index by one. The infimum is also guaranteed to exist in that case.

599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
29 * @file printf.h
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
30 * @brief Wrapper for write-functions with a printf-like interface.
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
31 * @author Mike Becker
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
32 * @author Olaf Wintermann
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
33 * @copyright 2-Clause BSD License
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 */
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 #ifndef UCX_PRINTF_H
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 #define UCX_PRINTF_H
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 #include "common.h"
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 #include "string.h"
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 #include <stdarg.h>
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
43 /**
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
44 * Attribute for printf-like functions.
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
45 * @param fmt_idx index of the format string parameter
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
46 * @param arg_idx index of the first formatting argument
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
47 */
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
48 #define cx_attr_printf(fmt_idx, arg_idx) \
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
49 __attribute__((__format__(printf, fmt_idx, arg_idx)))
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
50
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 #ifdef __cplusplus
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 extern "C" {
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 #endif
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54
805
26500fc24058 add constant for reading out printf sbo size - relates to #343
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
55
26500fc24058 add constant for reading out printf sbo size - relates to #343
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
56 /**
26500fc24058 add constant for reading out printf sbo size - relates to #343
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
57 * The maximum string length that fits into stack memory.
26500fc24058 add constant for reading out printf sbo size - relates to #343
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
58 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
59 CX_EXPORT extern const unsigned cx_printf_sbo_size;
805
26500fc24058 add constant for reading out printf sbo size - relates to #343
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
60
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
62 * A @c fprintf like function which writes the output to a stream by
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 * using a write_func.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 * @param stream the stream the data is written to
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 * @param wfc the write function
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 * @param ... additional arguments
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
69 * @return the total number of bytes written or an error code from stdlib printf implementation
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
71 cx_attr_nonnull_arg(1, 2, 3) cx_attr_printf(3, 4) cx_attr_cstr_arg(3)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
72 CX_EXPORT int cx_fprintf(void *stream, cx_write_func wfc, const char *fmt, ...);
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
75 * A @c vfprintf like function which writes the output to a stream by
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 * using a write_func.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 * @param stream the stream the data is written to
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 * @param wfc the write function
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 * @param ap argument list
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
82 * @return the total number of bytes written or an error code from stdlib printf implementation
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 * @see cx_fprintf()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
85 cx_attr_nonnull cx_attr_cstr_arg(3)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
86 CX_EXPORT int cx_vfprintf(void *stream, cx_write_func wfc, const char *fmt, va_list ap);
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 /**
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
89 * An @c asprintf like function which allocates space for a string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
92 * @note The resulting string is guaranteed to be zero-terminated,
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
93 * unless there was an error, in which case the string's pointer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
94 * will be @c NULL.
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
95 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96 * @param allocator the CxAllocator used for allocating the string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98 * @param ... additional arguments
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 * @return the formatted string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 * @see cx_strfree_a()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
102 cx_attr_nonnull_arg(1, 2) cx_attr_printf(2, 3) cx_attr_cstr_arg(2)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
103 CX_EXPORT cxmutstr cx_asprintf_a(const CxAllocator *allocator, const char *fmt, ...);
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
104
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 /**
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
106 * An @c asprintf like function which allocates space for a string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
109 * @note The resulting string is guaranteed to be zero-terminated,
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
110 * unless there was an error, in which case the string's pointer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
111 * will be @c NULL.
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
113 * @param fmt (@c char*) format string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 * @param ... additional arguments
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
115 * @return (@c cxmutstr) the formatted string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116 * @see cx_strfree()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
117 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
118 #define cx_asprintf(fmt, ...) cx_asprintf_a(cxDefaultAllocator, fmt, __VA_ARGS__)
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
121 * A @c vasprintf like function which allocates space for a string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
124 * @note The resulting string is guaranteed to be zero-terminated,
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
125 * unless there was an error, in which case the string's pointer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
126 * will be @c NULL.
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
127 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
128 * @param allocator the CxAllocator used for allocating the string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
129 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
130 * @param ap argument list
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
131 * @return the formatted string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
132 * @see cx_asprintf_a()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
133 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
134 cx_attr_nonnull cx_attr_cstr_arg(2)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
135 CX_EXPORT cxmutstr cx_vasprintf_a(const CxAllocator *allocator, const char *fmt, va_list ap);
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
136
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
137 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
138 * A @c vasprintf like function which allocates space for a string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
139 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
140 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
141 * @note The resulting string is guaranteed to be zero-terminated,
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
142 * unless there was an error, in which case the string's pointer
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
143 * will be @c NULL.
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
144 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
145 * @param fmt (@c char*) format string
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
146 * @param ap (@c va_list) argument list
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
147 * @return (@c cxmutstr) the formatted string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
148 * @see cx_asprintf()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
149 */
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
150 #define cx_vasprintf(fmt, ap) cx_vasprintf_a(cxDefaultAllocator, fmt, ap)
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
151
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
152 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
153 * A @c printf like function which writes the output to a CxBuffer.
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
154 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
155 * @param buffer (@c CxBuffer*) a pointer to the buffer the data is written to
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
156 * @param fmt (@c char*) the format string
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 * @param ... additional arguments
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
158 * @return (@c int) the total number of bytes written or an error code from stdlib printf implementation
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
159 * @see cx_fprintf()
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
160 * @see cxBufferWrite()
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
161 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
162 #define cx_bprintf(buffer, fmt, ...) cx_fprintf((void*)buffer, cxBufferWriteFunc, fmt, __VA_ARGS__)
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
163
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
164
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
165 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
166 * An @c sprintf like function which reallocates the string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
167 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
168 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
169 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
170 * @note The resulting string, if successful, is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
171 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
172 * @param str (@c char**) a pointer to the string buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
173 * @param len (@c size_t*) a pointer to the length of the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
174 * @param fmt (@c char*) the format string
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
175 * @param ... additional arguments
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
176 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
177 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
178 #define cx_sprintf(str, len, fmt, ...) cx_sprintf_a(cxDefaultAllocator, str, len, fmt, __VA_ARGS__)
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
179
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
180 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
181 * An @c sprintf like function which reallocates the string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
182 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
183 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
184 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
185 * @note The resulting string, if successful, is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
186 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
187 * @attention The original buffer MUST have been allocated with the same allocator!
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
188 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
189 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
190 * @param str a pointer to the string buffer
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
191 * @param len a pointer to the length of the buffer
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
192 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
193 * @param ... additional arguments
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
194 * @return the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
195 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
196 cx_attr_nonnull_arg(1, 2, 3, 4) cx_attr_printf(4, 5) cx_attr_cstr_arg(4)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
197 CX_EXPORT int cx_sprintf_a(const CxAllocator *alloc, char **str, size_t *len, const char *fmt, ...);
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
198
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
199
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
200 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
201 * An @c sprintf like function which reallocates the string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
202 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
203 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
204 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
205 * @note The resulting string, if successful, is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
206 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
207 * @param str (@c char**) a pointer to the string buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
208 * @param len (@c size_t*) a pointer to the length of the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
209 * @param fmt (@c char*) the format string
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
210 * @param ap (@c va_list) argument list
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
211 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
212 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
213 #define cx_vsprintf(str, len, fmt, ap) cx_vsprintf_a(cxDefaultAllocator, str, len, fmt, ap)
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
214
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
215 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
216 * An @c sprintf like function which reallocates the string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
217 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
218 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
219 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
220 * @note The resulting string is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
221 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
222 * @attention The original buffer MUST have been allocated with the same allocator!
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
223 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
224 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
225 * @param str a pointer to the string buffer
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
226 * @param len a pointer to the length of the buffer
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
227 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
228 * @param ap argument list
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
229 * @return the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
230 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
231 cx_attr_nonnull cx_attr_cstr_arg(4) cx_attr_access_rw(2) cx_attr_access_rw(3)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
232 CX_EXPORT int cx_vsprintf_a(const CxAllocator *alloc, char **str, size_t *len, const char *fmt, va_list ap);
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
233
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
234
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
235 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
236 * An @c sprintf like function which allocates a new string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
237 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
238 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
239 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
240 * The location of the resulting string will @em always be stored to @p str. When the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
241 * was sufficiently large, @p buf itself will be stored to the location of @p str.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
242 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
243 * @note The resulting string, if successful, is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
244 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
245 * @remark When a new string needed to be allocated, the contents of @p buf will be
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
246 * poisoned after the call, because this function tries to produce the string in @p buf, first.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
247 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
248 * @param buf (@c char*) a pointer to the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
249 * @param len (@c size_t*) a pointer to the length of the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
250 * @param str (@c char**) a pointer where the location of the result shall be stored
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
251 * @param fmt (@c char*) the format string
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
252 * @param ... additional arguments
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
253 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
254 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
255 #define cx_sprintf_s(buf, len, str, fmt, ...) cx_sprintf_sa(cxDefaultAllocator, buf, len, str, fmt, __VA_ARGS__)
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
256
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
257 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
258 * An @c sprintf like function which allocates a new string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
259 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
260 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
261 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
262 * The location of the resulting string will @em always be stored to @p str. When the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
263 * was sufficiently large, @p buf itself will be stored to the location of @p str.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
264 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
265 * @note The resulting string, if successful, is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
266 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
267 * @remark When a new string needed to be allocated, the contents of @p buf will be
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
268 * poisoned after the call, because this function tries to produce the string in @p buf, first.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
269 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
270 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
271 * @param buf a pointer to the buffer
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
272 * @param len a pointer to the length of the buffer
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
273 * @param str a pointer where the location of the result shall be stored
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
274 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
275 * @param ... additional arguments
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
276 * @return the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
277 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
278 cx_attr_nonnull_arg(1, 2, 4, 5) cx_attr_printf(5, 6) cx_attr_cstr_arg(5)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
279 cx_attr_access_rw(2) cx_attr_access_rw(3) cx_attr_access_rw(4)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
280 CX_EXPORT int cx_sprintf_sa(const CxAllocator *alloc, char *buf, size_t *len, char **str, const char *fmt, ...);
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
281
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
282 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
283 * An @c sprintf like function which allocates a new string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
284 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
285 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
286 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
287 * The location of the resulting string will @em always be stored to @p str. When the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
288 * was sufficiently large, @p buf itself will be stored to the location of @p str.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
289 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
290 * @note The resulting string is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
291 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
292 * @remark When a new string needed to be allocated, the contents of @p buf will be
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
293 * poisoned after the call, because this function tries to produce the string in @p buf, first.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
294 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
295 * @param buf (@c char*) a pointer to the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
296 * @param len (@c size_t*) a pointer to the length of the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
297 * @param str (@c char**) a pointer where the location of the result shall be stored
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
298 * @param fmt (@c char*) the format string
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
299 * @param ap (@c va_list) argument list
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
300 * @return (@c int) the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
301 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
302 #define cx_vsprintf_s(buf, len, str, fmt, ap) cx_vsprintf_sa(cxDefaultAllocator, buf, len, str, fmt, ap)
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
303
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
304 /**
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
305 * An @c sprintf like function which allocates a new string when the buffer is not large enough.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
306 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
307 * The size of the buffer will be updated in @p len when necessary.
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
308 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
309 * The location of the resulting string will @em always be stored to @p str. When the buffer
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
310 * was sufficiently large, @p buf itself will be stored to the location of @p str.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
311 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
312 * @note The resulting string is guaranteed to be zero-terminated.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
313 *
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
314 * @remark When a new string needed to be allocated, the contents of @p buf will be
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
315 * poisoned after the call, because this function tries to produce the string in @p buf, first.
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
316 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
317 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
318 * @param buf a pointer to the buffer
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
319 * @param len a pointer to the length of the buffer
1105
5c16dc362684 refine docs for printf.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
320 * @param str a pointer where the location of the result shall be stored
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
321 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
322 * @param ap argument list
1424
563033aa998c fixes tons of typos and grammar issues across the documentation - fixes #667
Mike Becker <universe@uap-core.de>
parents: 1285
diff changeset
323 * @return the length of the produced string or an error code from stdlib printf implementation
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
324 */
1426
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
325 cx_attr_nonnull cx_attr_cstr_arg(5)
3a89b31f0724 clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents: 1424
diff changeset
326 CX_EXPORT int cx_vsprintf_sa(const CxAllocator *alloc, char *buf, size_t *len, char **str, const char *fmt, va_list ap);
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
327
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
328
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
329 #ifdef __cplusplus
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
330 } // extern "C"
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
331 #endif
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
332
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
333 #endif //UCX_PRINTF_H

mercurial