src/ucx/cx/string.h

Mon, 10 Nov 2025 21:06:55 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 10 Nov 2025 21:06:55 +0100
changeset 622
6e44c7ce0834
parent 621
956c03c25edd
child 645
0c85c4cd0dd8
permissions
-rw-r--r--

add ucx kv_list

415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
29 * @file string.h
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
30 * @brief Strings that know their length.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
31 * @author Mike Becker
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
32 * @author Olaf Wintermann
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
33 * @copyright 2-Clause BSD License
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #ifndef UCX_STRING_H
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #define UCX_STRING_H
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 #include "common.h"
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 #include "allocator.h"
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
42 /** Expands a UCX string as printf arguments. */
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
43 #define CX_SFMT(s) (int) (s).length, (s).ptr
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
44
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
45 /** Format specifier for a UCX string */
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
46 #define CX_PRIstr ".*s"
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
47
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
49 * The maximum length of the "needle" in cx_strstr() that can use SBO.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
50 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
51 CX_EXPORT extern const unsigned cx_strstr_sbo_size;
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
52
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
53 /**
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 * The UCX string structure.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 struct cx_mutstr_s {
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 * A pointer to the string.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
59 * @note The string is not necessarily @c NULL terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 char *ptr;
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 /** The length of the string */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 size_t length;
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 };
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 * A mutable string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 typedef struct cx_mutstr_s cxmutstr;
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 * The UCX string structure for immutable (constant) strings.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 struct cx_string_s {
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 * A pointer to the immutable string.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
77 * @note The string is not necessarily @c NULL terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
79 const char *ptr;
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 /** The length of the string */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 size_t length;
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 };
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 * An immutable string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 typedef struct cx_string_s cxstring;
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 /**
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
90 * Context for string tokenizing.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
91 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
92 struct cx_strtok_ctx_s {
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
93 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
94 * The string to tokenize.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
95 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
96 cxstring str;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
97 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
98 * The primary delimiter.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
99 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
100 cxstring delim;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
101 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
102 * Optional array of more delimiters.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
103 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
104 const cxstring *delim_more;
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
105 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
106 * Length of the array containing more delimiters.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
107 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
108 size_t delim_more_count;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
109 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
110 * Position of the currently active token in the source string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
111 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
112 size_t pos;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
113 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
114 * Position of the next delimiter in the source string.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
115 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
116 * If the tokenizer has not yet returned a token, the content of this field
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
117 * is undefined. If the tokenizer reaches the end of the string, this field
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
118 * contains the length of the source string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
119 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
120 size_t delim_pos;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
121 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
122 * The position of the next token in the source string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
123 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
124 size_t next_pos;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
125 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
126 * The number of already found tokens.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
127 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
128 size_t found;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
129 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
130 * The maximum number of tokens that shall be returned.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
131 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
132 size_t limit;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
133 };
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
134
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
135 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
136 * A string tokenizing context.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
137 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
138 typedef struct cx_strtok_ctx_s CxStrtokCtx;
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
139
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
140 #ifdef __cplusplus
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
141 extern "C" {
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
142
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
143 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
144 * A literal initializer for an UCX string structure.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
145 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
146 * @param literal the string literal
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
147 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
148 #define CX_STR(literal) cxstring{literal, sizeof(literal) - 1}
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
149
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
150 #else // __cplusplus
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
151
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
152 /**
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 * A literal initializer for an UCX string structure.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
155 * The argument MUST be a string (const char*) @em literal.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 * @param literal the string literal
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
159 #define CX_STR(literal) ((cxstring){literal, sizeof(literal) - 1})
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 #endif
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 * Wraps a mutable string that must be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
167 * The length is implicitly inferred by using a call to @c strlen().
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 *
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
169 * When @c NULL is passed, the length will be set to zero.
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
170 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
171 * @note the wrapped string will share the specified pointer to the string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 * If you do want a copy, use cx_strdup() on the return value of this function.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 * If you need to wrap a constant string, use cx_str().
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
176 * @param cstring the string to wrap (must be zero-terminated)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 * @return the wrapped string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 * @see cx_mutstrn()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
181 cx_attr_nodiscard cx_attr_cstr_arg(1)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
182 CX_EXPORT cxmutstr cx_mutstr(char *cstring);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 * Wraps a string that does not need to be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
187 * The argument may be @c NULL if the length is zero.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
189 * @note the wrapped string will share the specified pointer to the string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 * If you do want a copy, use cx_strdup() on the return value of this function.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 * If you need to wrap a constant string, use cx_strn().
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
194 * @param cstring the string to wrap (or @c NULL, only if the length is zero)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195 * @param length the length of the string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 * @return the wrapped string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 * @see cx_mutstr()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
200 cx_attr_nodiscard cx_attr_access_rw(1, 2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
201 CX_EXPORT cxmutstr cx_mutstrn(char *cstring, size_t length);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 * Wraps a string that must be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
206 * The length is implicitly inferred by using a call to @c strlen().
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
207 *
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
208 * When @c NULL is passed, the length will be set to zero.
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
209 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
210 * @note the wrapped string will share the specified pointer to the string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
211 * If you do want a copy, use cx_strdup() on the return value of this function.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
212 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213 * If you need to wrap a non-constant string, use cx_mutstr().
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
215 * @param cstring the string to wrap (must be zero-terminated)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
216 * @return the wrapped string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
217 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
218 * @see cx_strn()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
219 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
220 cx_attr_nodiscard cx_attr_cstr_arg(1)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
221 CX_EXPORT cxstring cx_str(const char *cstring);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
222
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
223
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
224 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
225 * Wraps a string that does not need to be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
226 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
227 * The argument may be @c NULL if the length is zero.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
228 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
229 * @note the wrapped string will share the specified pointer to the string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
230 * If you do want a copy, use cx_strdup() on the return value of this function.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
231 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
232 * If you need to wrap a non-constant string, use cx_mutstrn().
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
233 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
234 * @param cstring the string to wrap (or @c NULL, only if the length is zero)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
235 * @param length the length of the string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
236 * @return the wrapped string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
237 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
238 * @see cx_str()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
239 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
240 cx_attr_nodiscard cx_attr_access_r(1, 2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
241 CX_EXPORT cxstring cx_strn(const char *cstring, size_t length);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
242
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
243 #ifdef __cplusplus
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
244 } // extern "C"
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
245 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
246 CX_CPPDECL cxstring cx_strcast(cxmutstr str) {
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
247 return cx_strn(str.ptr, str.length);
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
248 }
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
249 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
250 CX_CPPDECL cxstring cx_strcast(cxstring str) {
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
251 return str;
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
252 }
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
253 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
254 CX_CPPDECL cxstring cx_strcast(const char *str) {
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
255 return cx_str(str);
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
256 }
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
257 cx_attr_nodiscard
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
258 CX_CPPDECL cxstring cx_strcast(const unsigned char *str) {
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
259 return cx_str(static_cast<const char*>(str));
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
260 }
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
261 extern "C" {
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
262 #else
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
263 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
264 * Internal function, do not use.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
265 * @param str
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
266 * @return
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
267 * @see cx_strcast()
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
268 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
269 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
270 CX_INLINE cxstring cx_strcast_m(cxmutstr str) {
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
271 return (cxstring) {str.ptr, str.length};
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
272 }
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
273 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
274 * Internal function, do not use.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
275 * @param str
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
276 * @return
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
277 * @see cx_strcast()
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
278 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
279 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
280 CX_INLINE cxstring cx_strcast_c(cxstring str) {
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
281 return str;
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
282 }
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
283
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
284 /**
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
285 * Internal function, do not use.
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
286 * @param str
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
287 * @return
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
288 * @see cx_strcast()
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
289 */
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
290 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
291 CX_INLINE cxstring cx_strcast_u(const unsigned char *str) {
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
292 return cx_str((const char*)str);
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
293 }
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
294
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
295 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
296 * Internal function, do not use.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
297 * @param str
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
298 * @return
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
299 * @see cx_strcast()
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
300 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
301 cx_attr_nodiscard
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
302 CX_INLINE cxstring cx_strcast_z(const char *str) {
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
303 return cx_str(str);
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
304 }
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
305
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
306 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
307 * Wraps any string into an UCX string.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
308 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
309 * @param str (any supported string type) the string to cast
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
310 * @return (@c cxstring) the string wrapped as UCX string
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
311 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
312 #define cx_strcast(str) _Generic((str), \
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
313 cxmutstr: cx_strcast_m, \
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
314 cxstring: cx_strcast_c, \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
315 const unsigned char*: cx_strcast_u, \
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
316 unsigned char *: cx_strcast_u, \
613
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
317 const char*: cx_strcast_z, \
b649d66c433e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 582
diff changeset
318 char *: cx_strcast_z) (str)
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
319 #endif
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
320
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
321 /**
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
322 * Passes the pointer in this string to the cxDefaultAllocator's @c free() function.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
323 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
324 * The pointer in the struct is set to @c NULL, and the length is set to zero,
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
325 * which means that this function protects you against double-free.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
326 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
327 * @note There is no implementation for cxstring, because it is unlikely that
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
328 * you ever have a <code>const char*</code> you are really supposed to free.
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
329 * If you encounter such a situation, you should double-check your code.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
330 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
331 * @param str the string to free
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
332 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
333 CX_EXPORT void cx_strfree(cxmutstr *str);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
334
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
335 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
336 * Passes the pointer in this string to the allocator's free function.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
337 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
338 * The pointer in the struct is set to @c NULL, and the length is set to zero,
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
339 * which means that this function protects you against double-free.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
340 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
341 * @note There is no implementation for cxstring, because it is unlikely that
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
342 * you ever have a <code>const char*</code> you are really supposed to free.
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
343 * If you encounter such a situation, you should double-check your code.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
344 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
345 * @param alloc the allocator
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
346 * @param str the string to free
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
347 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
348 cx_attr_nonnull_arg(1)
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
349 CX_EXPORT void cx_strfree_a(const CxAllocator *alloc, cxmutstr *str);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
350
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
351 /**
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
352 * Copies a string.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
353 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
354 * The memory in the @p dest structure is either allocated or re-allocated to fit the entire
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
355 * source string, including a zero-terminator.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
356 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
357 * The string in @p dest is guaranteed to be zero-terminated, regardless of whether @p src is.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
358 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
359 * @param alloc the allocator
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
360 * @param dest a pointer to the structure where to copy the contents to
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
361 * @param src the source string
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
362 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
363 * @retval zero success
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
364 * @retval non-zero if re-allocation failed
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
365 */
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
366 cx_attr_nonnull_arg(1)
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
367 CX_EXPORT int cx_strcpy_a(const CxAllocator *alloc, cxmutstr *dest, cxstring src);
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
368
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
369
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
370 /**
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
371 * Copies a string.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
372 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
373 * The memory in the @p dest structure is either allocated or re-allocated to fit the entire
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
374 * source string, including a zero-terminator.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
375 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
376 * The string in @p dest is guaranteed to be zero-terminated, regardless of whether @p src is.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
377 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
378 * @param dest (@c cxmutstr*) a pointer to the structure where to copy the contents to
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
379 * @param src (@c cxstring) the source string
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
380 *
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
381 * @retval zero success
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
382 * @retval non-zero if re-allocation failed
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
383 */
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
384 #define cx_strcpy(dest, src) cx_strcpy_a(cxDefaultAllocator, dest, src)
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
385
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
386 /**
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
387 * Returns the accumulated length of all specified strings.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
388 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
389 * If this sum overflows, errno is set to EOVERFLOW.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
390 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
391 * @attention if the count argument is larger than the number of the
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
392 * specified strings, the behavior is undefined.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
393 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
394 * @param count the total number of specified strings
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
395 * @param ... all strings
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
396 * @return the accumulated length of all strings
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
397 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
398 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
399 CX_EXPORT size_t cx_strlen(size_t count, ...);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
400
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
401 /**
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
402 * Concatenates strings.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
403 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
404 * The resulting string will be allocated by the specified allocator.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
405 * So developers @em must pass the return value to cx_strfree_a() eventually.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
406 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
407 * If @p str already contains a string, the memory will be reallocated and
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
408 * the other strings are appended. Otherwise, new memory is allocated.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
409 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
410 * If memory allocation fails, the pointer in the returned string will
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
411 * be @c NULL. Depending on the allocator, @c errno might be set.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
412 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
413 * @note It is guaranteed that there is only one allocation for the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
414 * resulting string.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
415 * It is also guaranteed that the returned string is zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
416 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
417 * @param alloc the allocator to use
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
418 * @param str the string the other strings shall be concatenated to
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
419 * @param count the number of the other following strings to concatenate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
420 * @param ... all other UCX strings
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
421 * @return the concatenated string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
422 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
423 cx_attr_nodiscard cx_attr_nonnull
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
424 CX_EXPORT cxmutstr cx_strcat_ma(const CxAllocator *alloc,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
425 cxmutstr str, size_t count, ...);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
426
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
427 /**
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
428 * Concatenates strings and returns a new string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
429 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
430 * The resulting string will be allocated by the specified allocator.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
431 * So developers @em must pass the return value to cx_strfree_a() eventually.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
432 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
433 * If memory allocation fails, the pointer in the returned string will
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
434 * be @c NULL. Depending on the allocator, @c errno might be set.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
435 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
436 * @note It is guaranteed that there is only one allocation for the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
437 * resulting string.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
438 * It is also guaranteed that the returned string is zero-terminated.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
439 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
440 * @param alloc (@c CxAllocator*) the allocator to use
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
441 * @param count (@c size_t) the number of the other following strings to concatenate
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
442 * @param ... all other UCX strings
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
443 * @return (@c cxmutstr) the concatenated string
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
444 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
445 #define cx_strcat_a(alloc, count, ...) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
446 cx_strcat_ma(alloc, cx_mutstrn(NULL, 0), count, __VA_ARGS__)
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
447
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
448 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
449 * Concatenates strings and returns a new string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
450 *
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
451 * The resulting string will be allocated by the cxDefaultAllocator.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
452 * So developers @em must pass the return value to cx_strfree() eventually.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
453 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
454 * If memory allocation fails, the pointer in the returned string will
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
455 * be @c NULL and @c errno might be set.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
456 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
457 * @note It is guaranteed that there is only one allocation for the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
458 * resulting string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
459 * It is also guaranteed that the returned string is zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
460 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
461 * @param count (@c size_t) the number of the other following strings to concatenate
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
462 * @param ... all other UCX strings
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
463 * @return (@c cxmutstr) the concatenated string
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
464 */
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
465 #define cx_strcat(count, ...) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
466 cx_strcat_ma(cxDefaultAllocator, cx_mutstrn(NULL, 0), count, __VA_ARGS__)
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
467
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
468 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
469 * Concatenates strings.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
470 *
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
471 * The resulting string will be allocated by the cxDefaultAllocator.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
472 * So developers @em must pass the return value to cx_strfree() eventually.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
473 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
474 * If @p str already contains a string, the memory will be reallocated and
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
475 * the other strings are appended. Otherwise, new memory is allocated.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
476 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
477 * If memory allocation fails, the pointer in the returned string will
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
478 * be @c NULL and @c errno might be set.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
479 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
480 * @note It is guaranteed that there is only one allocation for the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
481 * resulting string.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
482 * It is also guaranteed that the returned string is zero-terminated.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
483 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
484 * @param str (@c cxmutstr) the string the other strings shall be concatenated to
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
485 * @param count (@c size_t) the number of the other following strings to concatenate
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
486 * @param ... all other strings
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
487 * @return (@c cxmutstr) the concatenated string
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
488 */
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
489 #define cx_strcat_m(str, count, ...) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
490 cx_strcat_ma(cxDefaultAllocator, str, count, __VA_ARGS__)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
491
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
492 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
493 * Returns a substring starting at the specified location.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
494 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
495 * @attention the new string references the same memory area as the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
496 * input string and is usually @em not zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
497 * Use cx_strdup() to get a copy.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
498 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
499 * @param string input string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
500 * @param start start location of the substring
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
501 * @return a substring of @p string starting at @p start
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
502 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
503 * @see cx_strsubsl()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
504 * @see cx_strsubs_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
505 * @see cx_strsubsl_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
506 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
507 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
508 CX_EXPORT cxstring cx_strsubs(cxstring string, size_t start);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
509
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
510 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
511 * Returns a substring starting at the specified location.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
512 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
513 * The returned string will be limited to @p length bytes or the number
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
514 * of bytes available in @p string, whichever is smaller.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
515 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
516 * @attention the new string references the same memory area as the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
517 * input string and is usually @em not zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
518 * Use cx_strdup() to get a copy.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
519 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
520 * @param string input string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
521 * @param start start location of the substring
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
522 * @param length the maximum length of the returned string
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
523 * @return a substring of @p string starting at @p start
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
524 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
525 * @see cx_strsubs()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
526 * @see cx_strsubs_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
527 * @see cx_strsubsl_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
528 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
529 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
530 CX_EXPORT cxstring cx_strsubsl(cxstring string, size_t start, size_t length);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
531
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
532 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
533 * Returns a substring starting at the specified location.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
534 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
535 * @attention the new string references the same memory area as the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
536 * input string and is usually @em not zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
537 * Use cx_strdup() to get a copy.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
538 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
539 * @param string input string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
540 * @param start start location of the substring
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
541 * @return a substring of @p string starting at @p start
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
542 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
543 * @see cx_strsubsl_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
544 * @see cx_strsubs()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
545 * @see cx_strsubsl()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
546 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
547 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
548 CX_EXPORT cxmutstr cx_strsubs_m(cxmutstr string, size_t start);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
549
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
550 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
551 * Returns a substring starting at the specified location.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
552 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
553 * The returned string will be limited to @p length bytes or the number
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
554 * of bytes available in @p string, whichever is smaller.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
555 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
556 * @attention the new string references the same memory area as the
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
557 * input string and is usually @em not zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
558 * Use cx_strdup() to get a copy.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
559 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
560 * @param string input string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
561 * @param start start location of the substring
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
562 * @param length the maximum length of the returned string
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
563 * @return a substring of @p string starting at @p start
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
564 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
565 * @see cx_strsubs_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
566 * @see cx_strsubs()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
567 * @see cx_strsubsl()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
568 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
569 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
570 CX_EXPORT cxmutstr cx_strsubsl_m(cxmutstr string, size_t start, size_t length);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
571
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
572 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
573 * Returns a substring starting at the location of the first occurrence of the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
574 * specified character.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
575 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
576 * If the string does not contain the character, an empty string is returned.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
577 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
578 * @param string the string where to locate the character
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
579 * @param chr the character to locate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
580 * @return a substring starting at the first location of @p chr
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
581 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
582 * @see cx_strchr_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
583 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
584 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
585 CX_EXPORT cxstring cx_strchr(cxstring string, int chr);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
586
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
587 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
588 * Returns a substring starting at the location of the first occurrence of the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
589 * specified character.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
590 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
591 * If the string does not contain the character, an empty string is returned.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
592 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
593 * @param string the string where to locate the character
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
594 * @param chr the character to locate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
595 * @return a substring starting at the first location of @p chr
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
596 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
597 * @see cx_strchr()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
598 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
599 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
600 CX_EXPORT cxmutstr cx_strchr_m(cxmutstr string, int chr);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
601
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
602 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
603 * Returns a substring starting at the location of the last occurrence of the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
604 * specified character.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
605 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
606 * If the string does not contain the character, an empty string is returned.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
607 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
608 * @param string the string where to locate the character
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
609 * @param chr the character to locate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
610 * @return a substring starting at the last location of @p chr
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
611 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
612 * @see cx_strrchr_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
613 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
614 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
615 CX_EXPORT cxstring cx_strrchr(cxstring string, int chr);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
616
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
617 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
618 * Returns a substring starting at the location of the last occurrence of the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
619 * specified character.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
620 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
621 * If the string does not contain the character, an empty string is returned.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
622 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
623 * @param string the string where to locate the character
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
624 * @param chr the character to locate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
625 * @return a substring starting at the last location of @p chr
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
626 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
627 * @see cx_strrchr()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
628 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
629 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
630 CX_EXPORT cxmutstr cx_strrchr_m(cxmutstr string, int chr);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
631
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
632 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
633 * Returns a substring starting at the location of the first occurrence of the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
634 * specified string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
635 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
636 * If @p haystack does not contain @p needle, an empty string is returned.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
637 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
638 * If @p needle is an empty string, the complete @p haystack is
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
639 * returned.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
640 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
641 * @param haystack the string to be scanned
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
642 * @param needle string containing the sequence of characters to match
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
643 * @return a substring starting at the first occurrence of
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
644 * @p needle, or an empty string, if the sequence is not
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
645 * contained
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
646 * @see cx_strstr_m()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
647 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
648 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
649 CX_EXPORT cxstring cx_strstr(cxstring haystack, cxstring needle);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
650
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
651 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
652 * Returns a substring starting at the location of the first occurrence of the
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
653 * specified string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
654 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
655 * If @p haystack does not contain @p needle, an empty string is returned.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
656 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
657 * If @p needle is an empty string, the complete @p haystack is
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
658 * returned.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
659 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
660 * @param haystack the string to be scanned
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
661 * @param needle string containing the sequence of characters to match
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
662 * @return a substring starting at the first occurrence of
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
663 * @p needle, or an empty string, if the sequence is not
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
664 * contained
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
665 * @see cx_strstr()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
666 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
667 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
668 CX_EXPORT cxmutstr cx_strstr_m(cxmutstr haystack, cxstring needle);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
669
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
670 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
671 * Splits a given string using a delimiter string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
672 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
673 * @note The resulting array contains strings that point to the source
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
674 * @p string. Use cx_strdup() to get copies.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
675 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
676 * @param string the string to split
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
677 * @param delim the delimiter
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
678 * @param limit the maximum number of split items
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
679 * @param output a preallocated array of at least @p limit length
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
680 * @return the actual number of split items
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
681 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
682 cx_attr_nodiscard cx_attr_nonnull cx_attr_access_w(4, 3)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
683 CX_EXPORT size_t cx_strsplit(cxstring string, cxstring delim,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
684 size_t limit, cxstring *output);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
685
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
686 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
687 * Splits a given string using a delimiter string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
688 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
689 * The array pointed to by @p output will be allocated by @p allocator.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
690 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
691 * @note The resulting array contains strings that point to the source
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
692 * @p string. Use cx_strdup() to get copies.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
693 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
694 * @attention If allocation fails, the @c NULL pointer will be written to
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
695 * @p output and the number returned will be zero.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
696 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
697 * @param allocator the allocator to use for allocating the resulting array
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
698 * @param string the string to split
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
699 * @param delim the delimiter
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
700 * @param limit the maximum number of split items
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
701 * @param output a pointer where the address of the allocated array shall be
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
702 * written to
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
703 * @return the actual number of split items
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
704 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
705 cx_attr_nodiscard cx_attr_nonnull cx_attr_access_w(5)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
706 CX_EXPORT size_t cx_strsplit_a(const CxAllocator *allocator,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
707 cxstring string, cxstring delim,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
708 size_t limit, cxstring **output);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
709
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
710
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
711 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
712 * Splits a given string using a delimiter string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
713 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
714 * @note The resulting array contains strings that point to the source
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
715 * @p string. Use cx_strdup() to get copies.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
716 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
717 * @param string the string to split
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
718 * @param delim the delimiter
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
719 * @param limit the maximum number of split items
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
720 * @param output a preallocated array of at least @p limit length
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
721 * @return the actual number of split items
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
722 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
723 cx_attr_nodiscard cx_attr_nonnull cx_attr_access_w(4, 3)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
724 CX_EXPORT size_t cx_strsplit_m(cxmutstr string, cxstring delim,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
725 size_t limit, cxmutstr *output);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
726
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
727 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
728 * Splits a given string using a delimiter string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
729 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
730 * The array pointed to by @p output will be allocated by @p allocator.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
731 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
732 * @note The resulting array contains strings that point to the source
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
733 * @p string. Use cx_strdup() to get copies.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
734 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
735 * @attention If allocation fails, the @c NULL pointer will be written to
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
736 * @p output and the number returned will be zero.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
737 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
738 * @param allocator the allocator to use for allocating the resulting array
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
739 * @param string the string to split
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
740 * @param delim the delimiter
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
741 * @param limit the maximum number of split items
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
742 * @param output a pointer where the address of the allocated array shall be
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
743 * written to
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
744 * @return the actual number of split items
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
745 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
746 cx_attr_nodiscard cx_attr_nonnull cx_attr_access_w(5)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
747 CX_EXPORT size_t cx_strsplit_ma(const CxAllocator *allocator,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
748 cxmutstr string, cxstring delim, size_t limit,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
749 cxmutstr **output);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
750
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
751 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
752 * Compares two strings.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
753 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
754 * @param s1 the first string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
755 * @param s2 the second string
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
756 * @return negative if @p s1 is smaller than @p s2, positive if @p s1 is larger
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
757 * than @p s2, zero if both strings equal
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
758 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
759 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
760 CX_EXPORT int cx_strcmp_(cxstring s1, cxstring s2);
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
761
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
762 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
763 * Compares two strings.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
764 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
765 * @param s1 the first string
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
766 * @param s2 the second string
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
767 * @return negative if @p s1 is smaller than @p s2, positive if @p s1 is larger
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
768 * than @p s2, zero if both strings equal
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
769 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
770 #define cx_strcmp(s1, s2) cx_strcmp_(cx_strcast(s1), cx_strcast(s2))
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
771
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
772 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
773 * Compares two strings ignoring case.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
774 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
775 * @param s1 the first string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
776 * @param s2 the second string
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
777 * @return negative if @p s1 is smaller than @p s2, positive if @p s1 is larger
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
778 * than @p s2, zero if both strings equal ignoring case
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
779 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
780 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
781 CX_EXPORT int cx_strcasecmp_(cxstring s1, cxstring s2);
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
782
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
783 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
784 * Compares two strings ignoring case.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
785 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
786 * @param s1 the first string
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
787 * @param s2 the second string
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
788 * @return negative if @p s1 is smaller than @p s2, positive if @p s1 is larger
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
789 * than @p s2, zero if both strings equal ignoring case
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
790 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
791 #define cx_strcasecmp(s1, s2) cx_strcasecmp_(cx_strcast(s1), cx_strcast(s2))
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
792
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
793 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
794 * Compares two strings.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
795 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
796 * This function has a compatible signature for the use as a cx_compare_func.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
797 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
798 * @attention This function can @em only compare UCX strings. It is unsafe to
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
799 * pass normal C-strings to this function.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
800 *
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
801 * @param s1 the first string
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
802 * @param s2 the second string
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
803 * @return negative if @p s1 is smaller than @p s2, positive if @p s1 is larger
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
804 * than @p s2, zero if both strings equal
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
805 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
806 cx_attr_nodiscard cx_attr_nonnull
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
807 CX_EXPORT int cx_strcmp_p(const void *s1, const void *s2);
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
808
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
809 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
810 * Compares two strings ignoring case.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
811 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
812 * This function has a compatible signature for the use as a cx_compare_func.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
813 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
814 * @param s1 the first string
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
815 * @param s2 the second string
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
816 * @return negative if @p s1 is smaller than @p s2, positive if @p s1 is larger
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
817 * than @p s2, zero if both strings equal ignoring case
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
818 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
819 cx_attr_nodiscard cx_attr_nonnull
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
820 CX_EXPORT int cx_strcasecmp_p(const void *s1, const void *s2);
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
821
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
822
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
823 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
824 * Creates a duplicate of the specified string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
825 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
826 * The new string will contain a copy allocated by @p allocator.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
827 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
828 * @note The returned string is guaranteed to be zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
829 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
830 * @param allocator the allocator to use
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
831 * @param string the string to duplicate
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
832 * @return a duplicate of the string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
833 * @see cx_strdup()
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
834 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
835 cx_attr_nodiscard cx_attr_nonnull
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
836 CX_EXPORT cxmutstr cx_strdup_a_(const CxAllocator *allocator, cxstring string);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
837
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
838 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
839 * Creates a duplicate of the specified string.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
840 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
841 * The new string will contain a copy allocated by @p allocator.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
842 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
843 * @note The returned string is guaranteed to be zero-terminated.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
844 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
845 * @param allocator (@c CxAllocator*) the allocator to use
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
846 * @param string the string to duplicate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
847 * @return (@c cxmutstr) a duplicate of the string
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
848 * @see cx_strdup()
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
849 * @see cx_strfree_a()
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
850 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
851 #define cx_strdup_a(allocator, string) cx_strdup_a_((allocator), cx_strcast(string))
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
852
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
853 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
854 * Creates a duplicate of the specified string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
855 *
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
856 * The new string will contain a copy allocated by the cxDefaultAllocator.
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
857 * So developers @em must pass the return value to cx_strfree().
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
858 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
859 * @note The returned string is guaranteed to be zero-terminated.
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
860 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
861 * @param string the string to duplicate
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
862 * @return (@c cxmutstr) a duplicate of the string
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
863 * @see cx_strdup_a()
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
864 * @see cx_strfree()
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
865 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
866 #define cx_strdup(string) cx_strdup_a(cxDefaultAllocator, string)
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
867
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
868 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
869 * Omits leading and trailing spaces.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
870 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
871 * @note the returned string references the same memory, thus you
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
872 * must @em not free the returned memory.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
873 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
874 * @param string the string that shall be trimmed
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
875 * @return the trimmed string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
876 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
877 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
878 CX_EXPORT cxstring cx_strtrim(cxstring string);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
879
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
880 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
881 * Omits leading and trailing spaces.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
882 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
883 * @note the returned string references the same memory, thus you
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
884 * must @em not free the returned memory.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
885 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
886 * @param string the string that shall be trimmed
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
887 * @return the trimmed string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
888 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
889 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
890 CX_EXPORT cxmutstr cx_strtrim_m(cxmutstr string);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
891
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
892 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
893 * Checks if a string has a specific prefix.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
894 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
895 * @param string the string to check
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
896 * @param prefix the prefix the string should have
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
897 * @return @c true, if and only if the string has the specified prefix,
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
898 * @c false otherwise
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
899 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
900 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
901 CX_EXPORT bool cx_strprefix_(cxstring string, cxstring prefix);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
902
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
903 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
904 * Checks if a string has a specific prefix.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
905 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
906 * @param string the string to check
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
907 * @param prefix the prefix the string should have
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
908 * @return @c true, if and only if the string has the specified prefix,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
909 * @c false otherwise
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
910 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
911 #define cx_strprefix(string, prefix) cx_strprefix_(cx_strcast(string), cx_strcast(prefix))
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
912
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
913 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
914 * Checks if a string has a specific suffix.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
915 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
916 * @param string the string to check
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
917 * @param suffix the suffix the string should have
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
918 * @return @c true, if and only if the string has the specified suffix,
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
919 * @c false otherwise
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
920 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
921 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
922 CX_EXPORT bool cx_strsuffix_(cxstring string, cxstring suffix);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
923
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
924 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
925 * Checks if a string has a specific suffix.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
926 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
927 * @param string the string to check
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
928 * @param suffix the suffix the string should have
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
929 * @return @c true, if and only if the string has the specified suffix,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
930 * @c false otherwise
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
931 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
932 #define cx_strsuffix(string, suffix) cx_strsuffix_(cx_strcast(string), cx_strcast(suffix))
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
933
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
934 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
935 * Checks if a string has a specific prefix, ignoring the case.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
936 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
937 * @param string the string to check
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
938 * @param prefix the prefix the string should have
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
939 * @return @c true, if and only if the string has the specified prefix,
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
940 * @c false otherwise
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
941 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
942 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
943 CX_EXPORT bool cx_strcaseprefix_(cxstring string, cxstring prefix);
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
944
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
945 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
946 * Checks if a string has a specific prefix, ignoring the case.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
947 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
948 * @param string the string to check
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
949 * @param prefix the prefix the string should have
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
950 * @return @c true, if and only if the string has the specified prefix,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
951 * @c false otherwise
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
952 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
953 #define cx_strcaseprefix(string, prefix) cx_strcaseprefix_(cx_strcast(string), cx_strcast(prefix))
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
954
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
955 /**
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
956 * Checks, if a string has a specific suffix, ignoring the case.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
957 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
958 * @param string the string to check
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
959 * @param suffix the suffix the string should have
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
960 * @return @c true, if and only if the string has the specified suffix,
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
961 * @c false otherwise
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
962 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
963 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
964 CX_EXPORT bool cx_strcasesuffix_(cxstring string, cxstring suffix);
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
965
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
966 /**
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
967 * Checks, if a string has a specific suffix, ignoring the case.
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
968 *
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
969 * @param string the string to check
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
970 * @param suffix the suffix the string should have
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
971 * @return @c true, if and only if the string has the specified suffix,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
972 * @c false otherwise
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
973 */
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
974 #define cx_strcasesuffix(string, suffix) cx_strcasesuffix_(cx_strcast(string), cx_strcast(suffix))
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
975
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
976 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
977 * Replaces a string with another string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
978 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
979 * The function replaces at most @p replmax occurrences.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
980 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
981 * The returned string will be allocated by @p allocator and is guaranteed
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
982 * to be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
983 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
984 * If allocation fails, or the input string is empty,
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
985 * the returned string will be empty.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
986 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
987 * @param allocator the allocator to use
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
988 * @param str the string where replacements should be applied
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
989 * @param search the string to search for
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
990 * @param replacement the replacement string
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
991 * @param replmax maximum number of replacements
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
992 * @return the resulting string after applying the replacements
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
993 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
994 cx_attr_nodiscard cx_attr_nonnull
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
995 CX_EXPORT cxmutstr cx_strreplacen_a(const CxAllocator *allocator,
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
996 cxstring str, cxstring search, cxstring replacement, size_t replmax);
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
997
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
998 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
999 * Replaces a string with another string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1000 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1001 * The function replaces at most @p replmax occurrences.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1002 *
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
1003 * The returned string will be allocated by the cxDefaultAllocator and is guaranteed
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1004 * to be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1005 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1006 * If allocation fails, or the input string is empty,
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1007 * the returned string will be empty.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1008 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1009 * @param str (@c cxstring) the string where replacements should be applied
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1010 * @param search (@c cxstring) the string to search for
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1011 * @param replacement (@c cxstring) the replacement string
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1012 * @param replmax (@c size_t) maximum number of replacements
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1013 * @return (@c cxmutstr) the resulting string after applying the replacements
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1014 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1015 #define cx_strreplacen(str, search, replacement, replmax) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1016 cx_strreplacen_a(cxDefaultAllocator, str, search, replacement, replmax)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1017
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1018 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1019 * Replaces a string with another string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1020 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1021 * The returned string will be allocated by @p allocator and is guaranteed
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1022 * to be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1023 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1024 * If allocation fails, or the input string is empty,
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1025 * the returned string will be empty.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1026 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1027 * @param allocator (@c CxAllocator*) the allocator to use
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1028 * @param str (@c cxstring) the string where replacements should be applied
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1029 * @param search (@c cxstring) the string to search for
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1030 * @param replacement (@c cxstring) the replacement string
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1031 * @return (@c cxmutstr) the resulting string after applying the replacements
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1032 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1033 #define cx_strreplace_a(allocator, str, search, replacement) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1034 cx_strreplacen_a(allocator, str, search, replacement, SIZE_MAX)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1035
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1036 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1037 * Replaces a string with another string.
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1038 *
582
82b60a8dd55c update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 579
diff changeset
1039 * The returned string will be allocated by the cxDefaultAllocator and is guaranteed
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1040 * to be zero-terminated.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1041 *
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1042 * If allocation fails, or the input string is empty,
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1043 * the returned string will be empty.
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1044 *
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1045 * @param str (@c cxstring) the string where replacements should be applied
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1046 * @param search (@c cxstring) the string to search for
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1047 * @param replacement (@c cxstring) the replacement string
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1048 * @return (@c cxmutstr) the resulting string after applying the replacements
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1049 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1050 #define cx_strreplace(str, search, replacement) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1051 cx_strreplacen_a(cxDefaultAllocator, str, search, replacement, SIZE_MAX)
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1052
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1053 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1054 * Creates a string tokenization context.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1055 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1056 * @param str the string to tokenize
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1057 * @param delim the delimiter (must not be empty)
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1058 * @param limit the maximum number of tokens that shall be returned
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1059 * @return a new string tokenization context
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1060 */
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1061 cx_attr_nodiscard
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1062 CX_EXPORT CxStrtokCtx cx_strtok_(cxstring str, cxstring delim, size_t limit);
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1063
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1064 /**
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1065 * Creates a string tokenization context.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1066 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1067 * @param str the string to tokenize
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1068 * @param delim the delimiter string (must not be empty)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1069 * @param limit (@c size_t) the maximum number of tokens that shall be returned
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1070 * @return (@c CxStrtokCtx) a new string tokenization context
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1071 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1072 #define cx_strtok(str, delim, limit) \
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1073 cx_strtok_(cx_strcast(str), cx_strcast(delim), (limit))
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1074
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1075 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1076 * Returns the next token.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1077 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1078 * The token will point to the source string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1079 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1080 * @param ctx the tokenization context
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1081 * @param token a pointer to memory where the next token shall be stored
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1082 * @return true if successful, false if the limit or the end of the string
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1083 * has been reached
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1084 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1085 cx_attr_nonnull cx_attr_nodiscard cx_attr_access_w(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1086 CX_EXPORT bool cx_strtok_next(CxStrtokCtx *ctx, cxstring *token);
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1087
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1088 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1089 * Returns the next token of a mutable string.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1090 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1091 * The token will point to the source string.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1092 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1093 * @attention
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1094 * If the context was not initialized over a mutable string, modifying
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1095 * the data of the returned token is undefined behavior.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1096 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1097 * @param ctx the tokenization context
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1098 * @param token a pointer to memory where the next token shall be stored
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1099 * @return true if successful, false if the limit or the end of the string
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1100 * has been reached
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1101 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1102 cx_attr_nonnull cx_attr_nodiscard cx_attr_access_w(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1103 CX_EXPORT bool cx_strtok_next_m(CxStrtokCtx *ctx, cxmutstr *token);
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1104
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1105 /**
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1106 * Defines an array of more delimiters for the specified tokenization context.
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1107 *
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1108 * @param ctx the tokenization context
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1109 * @param delim array of more delimiters
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1110 * @param count number of elements in the array
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1111 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1112 cx_attr_nonnull cx_attr_access_r(2, 3)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1113 CX_EXPORT void cx_strtok_delim(CxStrtokCtx *ctx, const cxstring *delim, size_t count);
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
1114
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1115 /* ------------------------------------------------------------------------- *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1116 * string to number conversion functions *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1117 * ------------------------------------------------------------------------- */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1118
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1119 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1120 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1121 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1122 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1123 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1124 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1125 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1126 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1127 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1128 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1129 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1130 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1131 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1132 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1133 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1134 CX_EXPORT int cx_strtos_lc_(cxstring str, short *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1135
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1136 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1137 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1138 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1139 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1140 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1141 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1142 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1143 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1144 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1145 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1146 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1147 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1148 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1149 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1150 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1151 CX_EXPORT int cx_strtoi_lc_(cxstring str, int *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1152
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1153 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1154 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1155 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1156 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1157 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1158 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1159 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1160 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1161 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1162 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1163 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1164 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1165 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1166 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1167 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1168 CX_EXPORT int cx_strtol_lc_(cxstring str, long *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1169
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1170 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1171 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1172 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1173 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1174 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1175 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1176 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1177 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1178 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1179 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1180 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1181 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1182 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1183 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1184 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1185 CX_EXPORT int cx_strtoll_lc_(cxstring str, long long *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1186
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1187 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1188 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1189 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1190 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1191 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1192 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1193 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1194 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1195 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1196 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1197 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1198 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1199 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1200 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1201 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1202 CX_EXPORT int cx_strtoi8_lc_(cxstring str, int8_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1203
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1204 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1205 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1206 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1207 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1208 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1209 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1210 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1211 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1212 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1213 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1214 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1215 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1216 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1217 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1218 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1219 CX_EXPORT int cx_strtoi16_lc_(cxstring str, int16_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1220
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1221 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1222 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1223 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1224 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1225 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1226 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1227 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1228 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1229 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1230 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1231 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1232 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1233 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1234 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1235 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1236 CX_EXPORT int cx_strtoi32_lc_(cxstring str, int32_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1237
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1238 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1239 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1240 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1241 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1242 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1243 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1244 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1245 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1246 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1247 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1248 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1249 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1250 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1251 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1252 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1253 CX_EXPORT int cx_strtoi64_lc_(cxstring str, int64_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1254
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1255 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1256 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1257 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1258 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1259 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1260 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1261 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1262 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1263 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1264 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1265 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1266 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1267 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1268 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1269 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1270 CX_EXPORT int cx_strtous_lc_(cxstring str, unsigned short *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1271
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1272 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1273 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1274 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1275 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1276 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1277 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1278 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1279 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1280 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1281 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1282 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1283 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1284 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1285 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1286 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1287 CX_EXPORT int cx_strtou_lc_(cxstring str, unsigned int *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1288
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1289 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1290 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1291 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1292 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1293 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1294 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1295 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1296 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1297 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1298 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1299 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1300 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1301 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1302 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1303 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1304 CX_EXPORT int cx_strtoul_lc_(cxstring str, unsigned long *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1305
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1306 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1307 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1308 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1309 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1310 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1311 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1312 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1313 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1314 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1315 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1316 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1317 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1318 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1319 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1320 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1321 CX_EXPORT int cx_strtoull_lc_(cxstring str, unsigned long long *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1322
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1323 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1324 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1325 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1326 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1327 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1328 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1329 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1330 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1331 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1332 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1333 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1334 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1335 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1336 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1337 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1338 CX_EXPORT int cx_strtou8_lc_(cxstring str, uint8_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1339
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1340 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1341 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1342 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1343 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1344 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1345 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1346 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1347 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1348 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1349 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1350 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1351 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1352 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1353 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1354 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1355 CX_EXPORT int cx_strtou16_lc_(cxstring str, uint16_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1356
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1357 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1358 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1359 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1360 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1361 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1362 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1363 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1364 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1365 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1366 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1367 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1368 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1369 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1370 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1371 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1372 CX_EXPORT int cx_strtou32_lc_(cxstring str, uint32_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1373
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1374 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1375 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1376 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1377 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1378 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1379 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1380 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1381 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1382 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1383 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1384 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1385 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1386 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1387 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1388 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1389 CX_EXPORT int cx_strtou64_lc_(cxstring str, uint64_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1390
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1391 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1392 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1393 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1394 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1395 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1396 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1397 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1398 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1399 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1400 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1401 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1402 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1403 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1404 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1405 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1406 CX_EXPORT int cx_strtoz_lc_(cxstring str, size_t *output, int base, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1407
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1408 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1409 * Converts a string to a single precision floating-point number.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1410 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1411 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1412 * In that case the function sets errno to EINVAL when the reason is an invalid character.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1413 * It sets errno to ERANGE when the necessary representation would exceed the limits defined in libc's float.h.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1414 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1415 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1416 * @param output a pointer to the float variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1417 * @param decsep the decimal separator
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1418 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1419 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1420 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1421 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1422 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1423 CX_EXPORT int cx_strtof_lc_(cxstring str, float *output, char decsep, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1424
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1425 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1426 * Converts a string to a double precision floating-point number.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1427 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1428 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1429 * In that case the function sets errno to EINVAL when the reason is an invalid character.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1430 * It sets errno to ERANGE when the necessary representation would exceed the limits defined in libc's float.h.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1431 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1432 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1433 * @param output a pointer to the float variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1434 * @param decsep the decimal separator
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1435 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1436 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1437 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1438 */
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1439 cx_attr_access_w(2) cx_attr_nonnull_arg(2)
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1440 CX_EXPORT int cx_strtod_lc_(cxstring str, double *output, char decsep, const char *groupsep);
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1441
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1442 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1443 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1444 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1445 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1446 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1447 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1448 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1449 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1450 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1451 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1452 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1453 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1454 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1455 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1456 #define cx_strtos_lc(str, output, base, groupsep) cx_strtos_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1457
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1458 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1459 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1460 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1461 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1462 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1463 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1464 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1465 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1466 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1467 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1468 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1469 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1470 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1471 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1472 #define cx_strtoi_lc(str, output, base, groupsep) cx_strtoi_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1473
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1474 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1475 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1476 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1477 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1478 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1479 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1480 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1481 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1482 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1483 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1484 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1485 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1486 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1487 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1488 #define cx_strtol_lc(str, output, base, groupsep) cx_strtol_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1489
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1490 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1491 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1492 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1493 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1494 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1495 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1496 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1497 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1498 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1499 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1500 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1501 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1502 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1503 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1504 #define cx_strtoll_lc(str, output, base, groupsep) cx_strtoll_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1505
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1506 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1507 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1508 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1509 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1510 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1511 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1512 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1513 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1514 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1515 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1516 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1517 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1518 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1519 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1520 #define cx_strtoi8_lc(str, output, base, groupsep) cx_strtoi8_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1521
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1522 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1523 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1524 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1525 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1526 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1527 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1528 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1529 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1530 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1531 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1532 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1533 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1534 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1535 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1536 #define cx_strtoi16_lc(str, output, base, groupsep) cx_strtoi16_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1537
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1538 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1539 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1540 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1541 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1542 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1543 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1544 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1545 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1546 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1547 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1548 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1549 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1550 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1551 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1552 #define cx_strtoi32_lc(str, output, base, groupsep) cx_strtoi32_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1553
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1554 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1555 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1556 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1557 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1558 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1559 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1560 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1561 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1562 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1563 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1564 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1565 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1566 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1567 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1568 #define cx_strtoi64_lc(str, output, base, groupsep) cx_strtoi64_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1569
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1570 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1571 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1572 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1573 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1574 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1575 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1576 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1577 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1578 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1579 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1580 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1581 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1582 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1583 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1584 #define cx_strtous_lc(str, output, base, groupsep) cx_strtous_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1585
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1586 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1587 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1588 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1589 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1590 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1591 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1592 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1593 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1594 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1595 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1596 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1597 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1598 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1599 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1600 #define cx_strtou_lc(str, output, base, groupsep) cx_strtou_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1601
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1602 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1603 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1604 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1605 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1606 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1607 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1608 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1609 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1610 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1611 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1612 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1613 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1614 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1615 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1616 #define cx_strtoul_lc(str, output, base, groupsep) cx_strtoul_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1617
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1618 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1619 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1620 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1621 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1622 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1623 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1624 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1625 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1626 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1627 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1628 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1629 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1630 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1631 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1632 #define cx_strtoull_lc(str, output, base, groupsep) cx_strtoull_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1633
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1634 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1635 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1636 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1637 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1638 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1639 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1640 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1641 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1642 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1643 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1644 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1645 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1646 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1647 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1648 #define cx_strtou8_lc(str, output, base, groupsep) cx_strtou8_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1649
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1650 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1651 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1652 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1653 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1654 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1655 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1656 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1657 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1658 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1659 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1660 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1661 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1662 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1663 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1664 #define cx_strtou16_lc(str, output, base, groupsep) cx_strtou16_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1665
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1666 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1667 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1668 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1669 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1670 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1671 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1672 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1673 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1674 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1675 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1676 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1677 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1678 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1679 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1680 #define cx_strtou32_lc(str, output, base, groupsep) cx_strtou32_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1681
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1682 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1683 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1684 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1685 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1686 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1687 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1688 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1689 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1690 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1691 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1692 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1693 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1694 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1695 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1696 #define cx_strtou64_lc(str, output, base, groupsep) cx_strtou64_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1697
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1698 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1699 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1700 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1701 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1702 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1703 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1704 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1705 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1706 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1707 * @param base 2, 8, 10, or 16
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1708 * @param groupsep (@c const @c char*) each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1709 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1710 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1711 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1712 #define cx_strtoz_lc(str, output, base, groupsep) cx_strtoz_lc_(cx_strcast(str), output, base, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1713
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1714 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1715 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1716 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1717 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1718 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1719 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1720 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1721 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1722 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1723 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1724 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1725 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1726 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1727 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1728 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1729 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1730 #define cx_strtos(str, output, base) cx_strtos_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1731
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1732 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1733 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1734 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1735 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1736 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1737 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1738 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1739 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1740 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1741 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1742 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1743 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1744 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1745 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1746 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1747 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1748 #define cx_strtoi(str, output, base) cx_strtoi_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1749
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1750 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1751 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1752 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1753 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1754 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1755 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1756 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1757 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1758 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1759 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1760 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1761 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1762 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1763 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1764 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1765 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1766 #define cx_strtol(str, output, base) cx_strtol_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1767
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1768 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1769 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1770 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1771 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1772 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1773 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1774 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1775 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1776 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1777 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1778 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1779 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1780 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1781 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1782 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1783 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1784 #define cx_strtoll(str, output, base) cx_strtoll_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1785
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1786 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1787 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1788 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1789 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1790 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1791 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1792 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1793 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1794 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1795 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1796 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1797 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1798 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1799 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1800 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1801 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1802 #define cx_strtoi8(str, output, base) cx_strtoi8_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1803
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1804 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1805 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1806 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1807 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1808 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1809 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1810 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1811 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1812 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1813 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1814 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1815 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1816 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1817 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1818 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1819 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1820 #define cx_strtoi16(str, output, base) cx_strtoi16_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1821
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1822 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1823 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1824 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1825 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1826 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1827 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1828 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1829 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1830 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1831 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1832 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1833 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1834 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1835 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1836 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1837 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1838 #define cx_strtoi32(str, output, base) cx_strtoi32_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1839
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1840 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1841 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1842 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1843 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1844 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1845 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1846 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1847 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1848 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1849 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1850 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1851 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1852 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1853 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1854 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1855 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1856 #define cx_strtoi64(str, output, base) cx_strtoi64_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1857
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1858 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1859 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1860 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1861 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1862 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1863 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1864 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1865 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1866 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1867 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1868 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1869 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1870 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1871 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1872 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1873 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1874 #define cx_strtoz(str, output, base) cx_strtoz_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1875
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1876 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1877 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1878 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1879 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1880 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1881 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1882 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1883 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1884 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1885 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1886 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1887 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1888 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1889 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1890 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1891 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1892 #define cx_strtous(str, output, base) cx_strtous_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1893
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1894 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1895 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1896 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1897 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1898 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1899 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1900 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1901 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1902 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1903 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1904 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1905 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1906 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1907 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1908 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1909 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1910 #define cx_strtou(str, output, base) cx_strtou_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1911
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1912 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1913 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1914 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1915 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1916 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1917 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1918 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1919 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1920 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1921 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1922 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1923 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1924 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1925 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1926 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1927 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1928 #define cx_strtoul(str, output, base) cx_strtoul_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1929
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1930 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1931 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1932 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1933 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1934 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1935 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1936 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1937 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1938 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1939 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1940 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1941 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1942 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1943 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1944 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1945 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1946 #define cx_strtoull(str, output, base) cx_strtoull_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1947
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1948 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1949 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1950 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1951 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1952 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1953 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1954 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1955 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1956 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1957 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1958 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1959 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1960 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1961 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1962 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1963 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1964 #define cx_strtou8(str, output, base) cx_strtou8_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1965
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1966 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1967 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1968 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1969 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1970 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1971 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1972 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1973 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1974 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1975 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1976 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1977 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1978 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1979 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1980 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1981 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1982 #define cx_strtou16(str, output, base) cx_strtou16_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1983
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1984 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1985 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1986 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1987 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1988 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1989 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1990 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
1991 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1992 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1993 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1994 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1995 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1996 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1997 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1998 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
1999 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2000 #define cx_strtou32(str, output, base) cx_strtou32_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2001
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2002 /**
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2003 * Converts a string to a number.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2004 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2005 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2006 * In that case the function sets errno to EINVAL when the reason is an invalid character or an unsupported base.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2007 * It sets errno to ERANGE when the target datatype is too small.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2008 *
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2009 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2010 * If you want to choose the set of group separators, use the @c _lc variant of this function (e.g. cx_strtoz_lc()).
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2011 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2012 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2013 * @param output a pointer to the integer variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2014 * @param base 2, 8, 10, or 16
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2015 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2016 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2017 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2018 #define cx_strtou64(str, output, base) cx_strtou64_lc_(cx_strcast(str), output, base, ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2019
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2020 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2021 * Converts a string to a single precision floating-point number.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2022 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2023 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2024 * In that case the function sets errno to EINVAL when the reason is an invalid character.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2025 * It sets errno to ERANGE when the necessary representation would exceed the limits defined in libc's float.h.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2026 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2027 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2028 * @param output a pointer to the float variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2029 * @param decsep the decimal separator
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2030 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2031 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2032 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2033 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2034 #define cx_strtof_lc(str, output, decsep, groupsep) cx_strtof_lc_(cx_strcast(str), output, decsep, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2035
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2036 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2037 * Converts a string to a double precision floating-point number.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2038 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2039 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2040 * In that case the function sets errno to EINVAL when the reason is an invalid character.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2041 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2042 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2043 * @param output a pointer to the double variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2044 * @param decsep the decimal separator
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2045 * @param groupsep each character in this string is treated as a group separator and ignored during conversion
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2046 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2047 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2048 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2049 #define cx_strtod_lc(str, output, decsep, groupsep) cx_strtod_lc_(cx_strcast(str), output, decsep, groupsep)
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2050
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2051 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2052 * Converts a string to a single precision floating-point number.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2053 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2054 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2055 * In that case the function sets errno to EINVAL when the reason is an invalid character.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2056 * It sets errno to ERANGE when the necessary representation would exceed the limits defined in libc's float.h.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2057 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2058 * The decimal separator is assumed to be a dot character.
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2059 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2060 * If you want to choose a different format, use cx_strtof_lc().
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2061 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2062 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2063 * @param output a pointer to the float variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2064 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2065 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2066 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2067 #define cx_strtof(str, output) cx_strtof_lc_(cx_strcast(str), output, '.', ",")
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2068
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2069 /**
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2070 * Converts a string to a double precision floating-point number.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2071 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2072 * The function returns non-zero when conversion is not possible.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2073 * In that case the function sets errno to EINVAL when the reason is an invalid character.
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2074 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2075 * The decimal separator is assumed to be a dot character.
621
956c03c25edd update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 613
diff changeset
2076 * The comma character is treated as a group separator and ignored during parsing.
579
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2077 * If you want to choose a different format, use cx_strtof_lc().
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2078 *
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2079 * @param str the string to convert
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2080 * @param output a pointer to the double variable where the result shall be stored
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2081 * @retval zero success
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2082 * @retval non-zero conversion was not possible
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2083 */
e10457d74fe1 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
2084 #define cx_strtod(str, output) cx_strtod_lc_(cx_strcast(str), output, '.', ",")
490
d218607f5a7e update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 415
diff changeset
2085
415
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2086 #ifdef __cplusplus
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2087 } // extern "C"
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2088 #endif
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2089
d938228c382e switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2090 #endif //UCX_STRING_H

mercurial