src/cx/printf.h

Sun, 22 Dec 2024 22:10:04 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 22 Dec 2024 22:10:04 +0100
changeset 1047
40aad3f0bc9e
parent 985
68754c7de906
permissions
-rw-r--r--

don't trust that size_t always has word width

it should be the case on all platforms supported by UCX, but it's not strictly defined in POSIX that it must be the 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 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 * \file printf.h
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 * \brief Wrapper for write functions with a printf-like interface.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 * \author Mike Becker
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 * \author Olaf Wintermann
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 * \copyright 2-Clause BSD License
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 */
926
8fdd8d78c14b fix several survivors of east-const and some missing consts
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
59 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 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 * A \c fprintf like function which writes the output to a stream by
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
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 * @return the total number of bytes written
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
71 cx_attr_nonnull_arg(1, 2, 3)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
72 cx_attr_printf(3, 4)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
73 cx_attr_cstr_arg(3)
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
74 int cx_fprintf(
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
75 void *stream,
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
76 cx_write_func wfc,
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 849
diff changeset
77 const char *fmt,
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
78 ...
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
79 );
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 * A \c vfprintf like function which writes the output to a stream by
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 * using a write_func.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 * @param stream the stream the data is written to
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 * @param wfc the write function
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 * @param ap argument list
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 * @return the total number of bytes written
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 * @see cx_fprintf()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
92 cx_attr_nonnull
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
93 cx_attr_cstr_arg(3)
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
94 int cx_vfprintf(
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
95 void *stream,
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
96 cx_write_func wfc,
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 849
diff changeset
97 const char *fmt,
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
98 va_list ap
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
99 );
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102 * A \c asprintf like function which allocates space for a string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
103 * the result is written to.
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 * \note The resulting string is guaranteed to be zero-terminated.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 * @param allocator the CxAllocator used for allocating the string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 * @param ... additional arguments
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110 * @return the formatted string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111 * @see cx_strfree_a()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
113 cx_attr_nonnull_arg(1, 2)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
114 cx_attr_printf(2, 3)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
115 cx_attr_cstr_arg(2)
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
116 cxmutstr cx_asprintf_a(
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 849
diff changeset
117 const CxAllocator *allocator,
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 849
diff changeset
118 const char *fmt,
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
119 ...
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
120 );
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123 * A \c asprintf like function which allocates space for a string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
124 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
125 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
126 * \note The resulting string is guaranteed to be zero-terminated.
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 fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
129 * @param ... additional arguments
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
130 * @return the formatted string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
131 * @see cx_strfree()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
132 */
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
133 #define cx_asprintf(fmt, ...) \
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
134 cx_asprintf_a(cxDefaultAllocator, fmt, __VA_ARGS__)
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
135
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 * A \c vasprintf like function which allocates space for a string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
138 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
139 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
140 * \note The resulting string is guaranteed to be zero-terminated.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
141 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
142 * @param allocator the CxAllocator used for allocating the string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
143 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
144 * @param ap argument list
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
145 * @return the formatted string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
146 * @see cx_asprintf_a()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
147 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
148 cx_attr_nonnull
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
149 cx_attr_cstr_arg(2)
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
150 cxmutstr cx_vasprintf_a(
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 849
diff changeset
151 const CxAllocator *allocator,
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 849
diff changeset
152 const char *fmt,
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
153 va_list ap
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
154 );
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
155
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
156 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 * A \c vasprintf like function which allocates space for a string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
158 * the result is written to.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
160 * \note The resulting string is guaranteed to be zero-terminated.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
161 *
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
162 * @param fmt format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
163 * @param ap argument list
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
164 * @return the formatted string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
165 * @see cx_asprintf()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
166 */
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
167 #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
168
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
169 /**
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
170 * A \c printf like function which writes the output to a CxBuffer.
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
171 *
635
d4845058239a add attributes to printf functions
Mike Becker <universe@uap-core.de>
parents: 599
diff changeset
172 * @param buffer a pointer to the buffer the data is written to
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
173 * @param fmt the format string
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
174 * @param ... additional arguments
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
175 * @return the total number of bytes written
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
176 * @see ucx_fprintf()
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
177 */
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
178 #define cx_bprintf(buffer, fmt, ...) cx_fprintf((CxBuffer*)buffer, \
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
179 (cx_write_func) cxBufferWrite, fmt, __VA_ARGS__)
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
181
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
182 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
183 * An \c sprintf like function which reallocates the string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
184 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
185 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
186 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
187 * \note The resulting string is guaranteed to be zero-terminated.
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 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
190 * @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
191 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
192 * @param ... additional arguments
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
193 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
194 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
195 #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
196
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
197 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
198 * An \c sprintf like function which reallocates the string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
199 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
200 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
201 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
202 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
203 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
204 * \attention The original buffer MUST have been allocated with the same allocator!
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
205 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
206 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
207 * @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
208 * @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
209 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
210 * @param ... additional arguments
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
211 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
212 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
213 cx_attr_nonnull_arg(1, 2, 3, 4)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
214 cx_attr_printf(4, 5)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
215 cx_attr_cstr_arg(4)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
216 int cx_sprintf_a(
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
217 CxAllocator *alloc,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
218 char **str,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
219 size_t *len,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
220 const char *fmt,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
221 ...
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
222 );
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
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
225 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
226 * An \c sprintf like function which reallocates the string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
227 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
228 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
229 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
230 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
231 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
232 * @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
233 * @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
234 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
235 * @param ap argument list
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
236 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
237 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
238 #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
239
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
240 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
241 * An \c sprintf like function which reallocates the string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
242 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
243 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
244 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
245 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
246 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
247 * \attention The original buffer MUST have been allocated with the same allocator!
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
248 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
249 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
250 * @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
251 * @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
252 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
253 * @param ap argument list
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
254 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
255 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
256 cx_attr_nonnull
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
257 cx_attr_cstr_arg(4)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
258 int cx_vsprintf_a(
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
259 CxAllocator *alloc,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
260 char **str,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
261 size_t *len,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
262 const char *fmt,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
263 va_list ap
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
264 );
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
265
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
266
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
267 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
268 * An \c sprintf like function which allocates a new string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
269 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
270 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
271 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
272 * The location of the resulting string will \em always be stored to \p str. When the buffer
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
273 * was sufficiently large, \p buf itself will be stored to the location of \p str.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
274 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
275 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
276 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
277 * \remark When a new string needed to be allocated, the contents of \p buf will be
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
278 * poisoned after the call, because this function tries to produce the string in \p buf, first.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
279 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
280 * @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
281 * @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
282 * @param str a pointer to the location
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
283 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
284 * @param ... additional arguments
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
285 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
286 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
287 #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
288
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
289 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
290 * An \c sprintf like function which allocates a new string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
291 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
292 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
293 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
294 * The location of the resulting string will \em always be stored to \p str. When the buffer
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
295 * was sufficiently large, \p buf itself will be stored to the location of \p str.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
296 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
297 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
298 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
299 * \remark When a new string needed to be allocated, the contents of \p buf will be
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
300 * poisoned after the call, because this function tries to produce the string in \p buf, first.
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 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
303 * @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
304 * @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
305 * @param str a pointer to the location
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
306 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
307 * @param ... additional arguments
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
308 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
309 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
310 __attribute__((__nonnull__(1, 2, 4, 5), __format__(printf, 5, 6)))
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
311 cx_attr_nonnull_arg(1, 2, 4, 5)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
312 cx_attr_printf(5, 6)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
313 cx_attr_cstr_arg(5)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
314 int cx_sprintf_sa(
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
315 CxAllocator *alloc,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
316 char *buf,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
317 size_t *len,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
318 char **str,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
319 const char *fmt,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
320 ...
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
321 );
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
322
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
323 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
324 * An \c sprintf like function which allocates a new string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
325 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
326 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
327 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
328 * The location of the resulting string will \em always be stored to \p str. When the buffer
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
329 * was sufficiently large, \p buf itself will be stored to the location of \p str.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
330 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
331 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
332 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
333 * \remark When a new string needed to be allocated, the contents of \p buf will be
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
334 * poisoned after the call, because this function tries to produce the string in \p buf, first.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
335 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
336 * @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
337 * @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
338 * @param str a pointer to the location
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
339 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
340 * @param ap argument list
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
341 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
342 */
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
343 #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
344
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
345 /**
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
346 * An \c sprintf like function which allocates a new string when the buffer is not large enough.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
347 *
849
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
348 * The size of the buffer will be updated in \p len when necessary.
edb9f875b7f9 improves interface of cx_sprintf() variants
Mike Becker <universe@uap-core.de>
parents: 810
diff changeset
349 *
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
350 * The location of the resulting string will \em always be stored to \p str. When the buffer
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
351 * was sufficiently large, \p buf itself will be stored to the location of \p str.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
352 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
353 * \note The resulting string is guaranteed to be zero-terminated.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
354 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
355 * \remark When a new string needed to be allocated, the contents of \p buf will be
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
356 * poisoned after the call, because this function tries to produce the string in \p buf, first.
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
357 *
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
358 * @param alloc the allocator to use
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
359 * @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
360 * @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
361 * @param str a pointer to the location
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
362 * @param fmt the format string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
363 * @param ap argument list
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
364 * @return the length of produced string
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
365 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
366 cx_attr_nonnull
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
367 cx_attr_cstr_arg(5)
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
368 int cx_vsprintf_sa(
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
369 CxAllocator *alloc,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
370 char *buf,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
371 size_t *len,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
372 char **str,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
373 const char *fmt,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
374 va_list ap
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 926
diff changeset
375 );
810
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
376
85859399a0cc add cx_sprintf() variants - fixes #353
Mike Becker <universe@uap-core.de>
parents: 805
diff changeset
377
599
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
378 #ifdef __cplusplus
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
379 } // extern "C"
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
380 #endif
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
381
6536a9a75b71 #222 add printf-like functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
382 #endif //UCX_PRINTF_H

mercurial