Sun, 22 Dec 2024 22:10:04 +0100
don't trust that size_t always has word width
it should be the case on all platforms supported by UCX, but it's not strictly defined in POSIX that it must be the case
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * Copyright 2024 Mike Becker, Olaf Wintermann All rights reserved. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | * \file properties.h |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
30 | * \brief Interface for parsing data from properties files. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | * \author Mike Becker |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | * \author Olaf Wintermann |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | * \copyright 2-Clause BSD License |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | #ifndef UCX_PROPERTIES |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | #define UCX_PROPERTIES |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | #include "common.h" |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | #include "string.h" |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
41 | #include "map.h" |
1031
8a90552bba29
rework of properties parser - fixes #529 and resolves #458
Mike Becker <universe@uap-core.de>
parents:
1013
diff
changeset
|
42 | #include "buffer.h" |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
44 | #include <stdio.h> |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
45 | #include <string.h> |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
46 | |
932
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
47 | #ifdef __cplusplus |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
48 | extern "C" { |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
49 | #endif |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
50 | |
1036
6d29532a76c3
add missing documentation for struct cx_properties_config_s
Mike Becker <universe@uap-core.de>
parents:
1031
diff
changeset
|
51 | /** |
6d29532a76c3
add missing documentation for struct cx_properties_config_s
Mike Becker <universe@uap-core.de>
parents:
1031
diff
changeset
|
52 | * Configures the expected characters for the properties parser. |
6d29532a76c3
add missing documentation for struct cx_properties_config_s
Mike Becker <universe@uap-core.de>
parents:
1031
diff
changeset
|
53 | */ |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | struct cx_properties_config_s { |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
55 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
56 | * The key/value delimiter that shall be used. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | * This is '=' by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
59 | char delimiter; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
60 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
61 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
62 | * The character, when appearing at the end of a line, continues that line. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
63 | * This is '\' by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
64 | */ |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
65 | // char continuation; // TODO: line continuation in properties |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
67 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
68 | * The first comment character. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
69 | * This is '#' by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
70 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
71 | char comment1; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
72 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
74 | * The second comment character. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
75 | * This is not set by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
76 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
77 | char comment2; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
78 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
79 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
80 | * The third comment character. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
81 | * This is not set by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
82 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
83 | char comment3; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
84 | }; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
85 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
86 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
87 | * Typedef for the properties config. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
88 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
89 | typedef struct cx_properties_config_s CxPropertiesConfig; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
90 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
91 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
92 | * Default properties configuration. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
93 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
94 | extern const CxPropertiesConfig cx_properties_config_default; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
95 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
96 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
97 | * Status codes for the properties interface. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
98 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
99 | enum cx_properties_status { |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
100 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
101 | * Everything is fine. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
102 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
103 | CX_PROPERTIES_NO_ERROR, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
104 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
105 | * The input buffer does not contain more data. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
106 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
107 | CX_PROPERTIES_NO_DATA, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
108 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
109 | * The input ends unexpectedly. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
110 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
111 | * This either happens when the last line does not terminate with a line |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
112 | * break, or when the input ends with a parsed key but no value. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
113 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
114 | CX_PROPERTIES_INCOMPLETE_DATA, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
115 | /** |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
116 | * Not used as a status and never returned by any function. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
117 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
118 | * You can use this enumerator to check for all "good" status results |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
119 | * by checking if the status is less than \c CX_PROPERTIES_OK. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
120 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
121 | * A "good" status means, that you can refill data and continue parsing. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
122 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
123 | CX_PROPERTIES_OK, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
124 | /** |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
125 | * Input buffer is \c NULL. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
126 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
127 | CX_PROPERTIES_NULL_INPUT, |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
128 | /** |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
129 | * The line contains a delimiter, but no key. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
130 | */ |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
131 | CX_PROPERTIES_INVALID_EMPTY_KEY, |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
132 | /** |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
133 | * The line contains data, but no delimiter. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
134 | */ |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
135 | CX_PROPERTIES_INVALID_MISSING_DELIMITER, |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
136 | /** |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
137 | * More internal buffer was needed, but could not be allocated. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
138 | */ |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
139 | CX_PROPERTIES_BUFFER_ALLOC_FAILED, |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
140 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
141 | * Initializing the properties source failed. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
142 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
143 | * @see cx_properties_read_init_func |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
144 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
145 | CX_PROPERTIES_READ_INIT_FAILED, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
146 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
147 | * Reading from a properties source failed. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
148 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
149 | * @see cx_properties_read_func |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
150 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
151 | CX_PROPERTIES_READ_FAILED, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
152 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
153 | * Sinking a k/v-pair failed. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
154 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
155 | * @see cx_properties_sink_func |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
156 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
157 | CX_PROPERTIES_SINK_FAILED, |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
158 | }; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
159 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
160 | /** |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
161 | * Typedef for the properties status enum. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
162 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
163 | typedef enum cx_properties_status CxPropertiesStatus; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
164 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
165 | /** |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
166 | * Interface for working with properties data. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
167 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
168 | struct cx_properties_s { |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
169 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
170 | * The configuration. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
171 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | CxPropertiesConfig config; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | /** |
1031
8a90552bba29
rework of properties parser - fixes #529 and resolves #458
Mike Becker <universe@uap-core.de>
parents:
1013
diff
changeset
|
175 | * The text input buffer. |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
176 | */ |
1031
8a90552bba29
rework of properties parser - fixes #529 and resolves #458
Mike Becker <universe@uap-core.de>
parents:
1013
diff
changeset
|
177 | CxBuffer input; |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
178 | |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
179 | /** |
1031
8a90552bba29
rework of properties parser - fixes #529 and resolves #458
Mike Becker <universe@uap-core.de>
parents:
1013
diff
changeset
|
180 | * Internal buffer. |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
181 | */ |
1031
8a90552bba29
rework of properties parser - fixes #529 and resolves #458
Mike Becker <universe@uap-core.de>
parents:
1013
diff
changeset
|
182 | CxBuffer buffer; |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | }; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
184 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
185 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
186 | * Typedef for the properties interface. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
187 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
188 | typedef struct cx_properties_s CxProperties; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
190 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
191 | /** |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
192 | * Typedef for a properties sink. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
193 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
194 | typedef struct cx_properties_sink_s CxPropertiesSink; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
195 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
196 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
197 | * A function that consumes a k/v-pair in a sink. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
198 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
199 | * The sink could be e.g. a map and the sink function would be calling |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
200 | * a map function to store the k/v-pair. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
201 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
202 | * @param prop the properties interface that wants to sink a k/v-pair |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
203 | * @param sink the sink |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
204 | * @param key the key |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
205 | * @param value the value |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
206 | * @return zero on success, non-zero when sinking the k/v-pair failed |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
207 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
208 | cx_attr_nonnull |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
209 | typedef int(*cx_properties_sink_func)( |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
210 | CxProperties *prop, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
211 | CxPropertiesSink *sink, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
212 | cxstring key, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
213 | cxstring value |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
214 | ); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
215 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
216 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
217 | * Defines a sink for k/v-pairs. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
218 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
219 | struct cx_properties_sink_s { |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
220 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
221 | * The sink object. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
222 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
223 | void *sink; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
224 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
225 | * Optional custom data. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
226 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
227 | void *data; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
228 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
229 | * A function for consuming k/v-pairs into the sink. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
230 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
231 | cx_properties_sink_func sink_func; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
232 | }; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
233 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
234 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
235 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
236 | * Typedef for a properties source. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
237 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
238 | typedef struct cx_properties_source_s CxPropertiesSource; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
239 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
240 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
241 | * A function that reads data from a source. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
242 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
243 | * When the source is depleted, implementations SHALL provide an empty |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
244 | * string in the \p target and return zero. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
245 | * A non-zero return value is only permitted in case of an error. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
246 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
247 | * The meaning of the optional parameters is implementation-dependent. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
248 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
249 | * @param prop the properties interface that wants to read from the source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
250 | * @param src the source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
251 | * @param target a string buffer where the read data shall be stored |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
252 | * @return zero on success, non-zero when reading data failed |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
253 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
254 | cx_attr_nonnull |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
255 | typedef int(*cx_properties_read_func)( |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
256 | CxProperties *prop, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
257 | CxPropertiesSource *src, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
258 | cxstring *target |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
259 | ); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
260 | |
932
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
261 | /** |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
262 | * A function that may initialize additional memory for the source. |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
263 | * |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
264 | * @param prop the properties interface that wants to read from the source |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
265 | * @param src the source |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
266 | * @return zero when initialization was successful, non-zero otherwise |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
267 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
268 | cx_attr_nonnull |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
269 | typedef int(*cx_properties_read_init_func)( |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
270 | CxProperties *prop, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
271 | CxPropertiesSource *src |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
272 | ); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
273 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
274 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
275 | * A function that cleans memory initialized by the read_init_func. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
276 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
277 | * @param prop the properties interface that wants to read from the source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
278 | * @param src the source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
279 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
280 | cx_attr_nonnull |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
281 | typedef void(*cx_properties_read_clean_func)( |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
282 | CxProperties *prop, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
283 | CxPropertiesSource *src |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
284 | ); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
285 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
286 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
287 | * Defines a properties source. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
288 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
289 | struct cx_properties_source_s { |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
290 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
291 | * The source object. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
292 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
293 | * For example a file stream or a string. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
294 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
295 | void *src; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
296 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
297 | * Optional additional data pointer. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
298 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
299 | void *data_ptr; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
300 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
301 | * Optional size information. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
302 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
303 | size_t data_size; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
304 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
305 | * A function that reads data from the source. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
306 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
307 | cx_properties_read_func read_func; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
308 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
309 | * Optional function that may prepare the source for reading data. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
310 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
311 | cx_properties_read_init_func read_init_func; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
312 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
313 | * Optional function that cleans additional memory allocated by the |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
314 | * read_init_func. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
315 | */ |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
316 | cx_properties_read_clean_func read_clean_func; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
317 | }; |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
318 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
319 | /** |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
320 | * Initialize a properties interface. |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
321 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
322 | * @param prop the properties interface |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
323 | * @param config the properties configuration |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
324 | * @see cxPropertiesInitDefault() |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
325 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
326 | cx_attr_nonnull |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
327 | void cxPropertiesInit(CxProperties *prop, CxPropertiesConfig config); |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
328 | |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
329 | /** |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
330 | * Destroys the properties interface. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
331 | * |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
332 | * \note Even when you are certain that you did not use the interface in a |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
333 | * way that caused a memory allocation, you should call this function anyway. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
334 | * Future versions of the library might add features that need additional memory |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
335 | * and you really don't want to search the entire code where you might need |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
336 | * add call to this function. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
337 | * |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
338 | * @param prop the properties interface |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
339 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
340 | cx_attr_nonnull |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
341 | void cxPropertiesDestroy(CxProperties *prop); |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
342 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
343 | /** |
1013
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
344 | * Destroys and re-initializes the properties interface. |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
345 | * |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
346 | * You might want to use this, to reset the parser after |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
347 | * encountering a syntax error. |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
348 | * |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
349 | * @param prop the properties interface |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
350 | */ |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
351 | cx_attr_nonnull |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
352 | static inline void cxPropertiesReset(CxProperties *prop) { |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
353 | CxPropertiesConfig config = prop->config; |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
354 | cxPropertiesDestroy(prop); |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
355 | cxPropertiesInit(prop, config); |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
356 | } |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
357 | |
add8358fc3c3
add cxJsonReset() and cxPropertiesReset()
Mike Becker <universe@uap-core.de>
parents:
988
diff
changeset
|
358 | /** |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
359 | * Initialize a properties parser with the default configuration. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
360 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
361 | * @param prop the properties interface |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
362 | * @see cxPropertiesInit() |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
363 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
364 | #define cxPropertiesInitDefault(prop) \ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
365 | cxPropertiesInit(prop, cx_properties_config_default) |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
366 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
367 | /** |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
368 | * Fills the input buffer with data. |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
369 | * |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
370 | * After calling this function, you can parse the data by calling |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
371 | * cxPropertiesNext(). |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
372 | * |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
373 | * @attention The properties interface tries to avoid allocations. |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
374 | * When you use this function and cxPropertiesNext() interleaving, |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
375 | * no allocations are performed. However, you must not free the |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
376 | * pointer to the data in that case. When you invoke the fill |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
377 | * function more than once before calling cxPropertiesNext(), |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
378 | * the additional data is appended - inevitably leading to |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
379 | * an allocation of a new buffer and copying the previous contents. |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
380 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
381 | * @param prop the properties interface |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
382 | * @param buf a pointer to the data |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
383 | * @param len the length of the data |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
384 | * @return non-zero when a memory allocation was necessary but failed |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
385 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
386 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
387 | cx_attr_access_r(2, 3) |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
388 | int cxPropertiesFilln( |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
389 | CxProperties *prop, |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
390 | const char *buf, |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
391 | size_t len |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
392 | ); |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
393 | |
988
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
394 | #ifdef __cplusplus |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
395 | } // extern "C" |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
396 | cx_attr_nonnull |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
397 | static inline int cxPropertiesFill( |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
398 | CxProperties *prop, |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
399 | cxstring str |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
400 | ) { |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
401 | return cxPropertiesFilln(prop, str.ptr, str.length); |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
402 | } |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
403 | |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
404 | cx_attr_nonnull |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
405 | static inline int cxPropertiesFill( |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
406 | CxProperties *prop, |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
407 | cxmutstr str |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
408 | ) { |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
409 | return cxPropertiesFilln(prop, str.ptr, str.length); |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
410 | } |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
411 | |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
412 | cx_attr_nonnull |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
413 | cx_attr_cstr_arg(2) |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
414 | static inline int cxPropertiesFill( |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
415 | CxProperties *prop, |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
416 | const char *str |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
417 | ) { |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
418 | return cxPropertiesFilln(prop, str, strlen(str)); |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
419 | } |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
420 | |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
421 | extern "C" { |
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
422 | #else // __cplusplus |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
423 | /** |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
424 | * Fills the input buffer with data. |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
425 | * |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
426 | * After calling this function, you can parse the data by calling |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
427 | * cxPropertiesNext(). |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
428 | * |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
429 | * @attention The properties interface tries to avoid allocations. |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
430 | * When you use this function and cxPropertiesNext() interleaving, |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
431 | * no allocations are performed. However, you must not free the |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
432 | * pointer to the data in that case. When you invoke the fill |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
433 | * function more than once before calling cxPropertiesNext(), |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
434 | * the additional data is appended - inevitably leading to |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
435 | * an allocation of a new buffer and copying the previous contents. |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
436 | * |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
437 | * @param prop the properties interface |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
438 | * @param str the text to fill in |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
439 | * @return non-zero when a memory allocation was necessary but failed |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
440 | */ |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
441 | #define cxPropertiesFill(prop, str) _Generic((str), \ |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
442 | cxstring: cx_properties_fill_cxstr, \ |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
443 | cxmutstr: cx_properties_fill_mutstr, \ |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
444 | char*: cx_properties_fill_str, \ |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
445 | const char*: cx_properties_fill_str) \ |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
446 | (prop, str) |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
447 | |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
448 | /** |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
449 | * @copydoc cxPropertiesFill() |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
450 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
451 | cx_attr_nonnull |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
452 | static inline int cx_properties_fill_cxstr( |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
453 | CxProperties *prop, |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
454 | cxstring str |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
455 | ) { |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
456 | return cxPropertiesFilln(prop, str.ptr, str.length); |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
457 | } |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
458 | |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
459 | /** |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
460 | * @copydoc cxPropertiesFill() |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
461 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
462 | cx_attr_nonnull |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
463 | static inline int cx_properties_fill_mutstr( |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
464 | CxProperties *prop, |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
465 | cxmutstr str |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
466 | ) { |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
467 | return cxPropertiesFilln(prop, str.ptr, str.length); |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
468 | } |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
469 | |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
470 | /** |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
471 | * @copydoc cxPropertiesFill() |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
472 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
473 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
474 | cx_attr_cstr_arg(2) |
972
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
475 | static inline int cx_properties_fill_str( |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
476 | CxProperties *prop, |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
477 | const char *str |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
478 | ) { |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
479 | return cxPropertiesFilln(prop, str, strlen(str)); |
a9a1d07a6840
add support for UCX strings in cxPropertiesFill()
Mike Becker <universe@uap-core.de>
parents:
932
diff
changeset
|
480 | } |
988
15b3ca7ee33f
make ucx C++ compatible again (and add tests for it) - fixes #486
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
481 | #endif |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
482 | |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
483 | /** |
1031
8a90552bba29
rework of properties parser - fixes #529 and resolves #458
Mike Becker <universe@uap-core.de>
parents:
1013
diff
changeset
|
484 | * Specifies stack memory that shall be used as internal buffer. |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
485 | * |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
486 | * @param prop the properties interface |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
487 | * @param buf a pointer to stack memory |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
488 | * @param capacity the capacity of the stack memory |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
489 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
490 | cx_attr_nonnull |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
491 | void cxPropertiesUseStack( |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
492 | CxProperties *prop, |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
493 | char *buf, |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
494 | size_t capacity |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
495 | ); |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
496 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
497 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
498 | * Retrieves the next key/value-pair. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
499 | * |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
500 | * This function returns zero as long as there are key/value-pairs found. |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
501 | * If no more key/value-pairs are found, #CX_PROPERTIES_NO_DATA is returned. |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
502 | * |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
503 | * When an incomplete line is encountered, #CX_PROPERTIES_INCOMPLETE_DATA is |
1038
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
504 | * returned, and you can add more data with #cxPropertiesFill(). |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
505 | * |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
506 | * \remark The incomplete line will be stored in an internal buffer, which is |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
507 | * allocated on the heap, by default. If you want to avoid allocations, |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
508 | * you can specify sufficient space with cxPropertiesUseStack() after |
8cab3d8e0af4
fix outdated documentation in properties.h
Mike Becker <universe@uap-core.de>
parents:
1036
diff
changeset
|
509 | * initialization with cxPropertiesInit(). |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
510 | * |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
511 | * \attention The returned strings will point into a buffer that might not be |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
512 | * available later. It is strongly recommended to copy the strings for further |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
513 | * use. |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
514 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
515 | * @param prop the properties interface |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
516 | * @param key a pointer to the cxstring that shall contain the property name |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
517 | * @param value a pointer to the cxstring that shall contain the property value |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
518 | * @return the status code as defined above |
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
519 | * @see cxPropertiesFill() |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
520 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
521 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
522 | cx_attr_nodiscard |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
523 | CxPropertiesStatus cxPropertiesNext( |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
524 | CxProperties *prop, |
924
3c90dfc35f06
add implementation for the properties parser
Mike Becker <universe@uap-core.de>
parents:
923
diff
changeset
|
525 | cxstring *key, |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
526 | cxstring *value |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
527 | ); |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
528 | |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
529 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
530 | * Creates a properties sink for an UCX map. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
531 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
532 | * The values stored in the map will be pointers to strings allocated |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
533 | * by #cx_strdup_a(). |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
534 | * The default stdlib allocator will be used, unless you specify a custom |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
535 | * allocator in the optional \c data of the sink. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
536 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
537 | * @param map the map that shall consume the k/v-pairs. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
538 | * @return the sink |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
539 | * @see cxPropertiesLoad() |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
540 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
541 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
542 | cx_attr_nodiscard |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
543 | CxPropertiesSink cxPropertiesMapSink(CxMap *map); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
544 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
545 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
546 | * Creates a properties source based on an UCX string. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
547 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
548 | * @param str the string |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
549 | * @return the properties source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
550 | * @see cxPropertiesLoad() |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
551 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
552 | cx_attr_nodiscard |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
553 | CxPropertiesSource cxPropertiesStringSource(cxstring str); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
554 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
555 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
556 | * Creates a properties source based on C string with the specified length. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
557 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
558 | * @param str the string |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
559 | * @param len the length |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
560 | * @return the properties source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
561 | * @see cxPropertiesLoad() |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
562 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
563 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
564 | cx_attr_nodiscard |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
565 | cx_attr_access_r(1, 2) |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
566 | CxPropertiesSource cxPropertiesCstrnSource(const char *str, size_t len); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
567 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
568 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
569 | * Creates a properties source based on a C string. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
570 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
571 | * The length will be determined with strlen(), so the string MUST be |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
572 | * zero-terminated. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
573 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
574 | * @param str the string |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
575 | * @return the properties source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
576 | * @see cxPropertiesLoad() |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
577 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
578 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
579 | cx_attr_nodiscard |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
580 | cx_attr_cstr_arg(1) |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
581 | CxPropertiesSource cxPropertiesCstrSource(const char *str); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
582 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
583 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
584 | * Creates a properties source based on an FILE. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
585 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
586 | * @param file the file |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
587 | * @param chunk_size how many bytes may be read in one operation |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
588 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
589 | * @return the properties source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
590 | * @see cxPropertiesLoad() |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
591 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
592 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
593 | cx_attr_nodiscard |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
594 | cx_attr_access_r(1) |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
595 | CxPropertiesSource cxPropertiesFileSource(FILE *file, size_t chunk_size); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
596 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
597 | |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
598 | /** |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
599 | * Loads properties data from a source and transfers it to a sink. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
600 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
601 | * This function tries to read as much data from the source as possible. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
602 | * When the source was completely consumed and at least on k/v-pair was found, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
603 | * the return value will be #CX_PROPERTIES_NO_ERROR. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
604 | * When the source was consumed but no k/v-pairs were found, the return value |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
605 | * will be #CX_PROPERTIES_NO_DATA. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
606 | * The other result codes apply, according to their description. |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
607 | * |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
608 | * @param prop the properties interface |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
609 | * @param sink the sink |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
610 | * @param source the source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
611 | * @return the status of the last operation |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
612 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
980
diff
changeset
|
613 | cx_attr_nonnull |
928
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
614 | CxPropertiesStatus cxPropertiesLoad( |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
615 | CxProperties *prop, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
616 | CxPropertiesSink sink, |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
617 | CxPropertiesSource source |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
618 | ); |
d2d42cb1d59e
add source/sink facility for properties - fixes #430
Mike Becker <universe@uap-core.de>
parents:
924
diff
changeset
|
619 | |
932
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
620 | #ifdef __cplusplus |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
621 | } // extern "C" |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
622 | #endif |
484dab606292
add extern "C" to properties.h
Mike Becker <universe@uap-core.de>
parents:
928
diff
changeset
|
623 | |
923
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
624 | #endif // UCX_PROPERTIES |