Thu, 10 Oct 2024 18:40:27 +0200
add ucx2.1 style interface for a properties parser
relates to #429
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" |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
41 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | struct cx_properties_config_s { |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | * 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
|
45 | * This is '=' by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | char delimiter; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | * 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
|
51 | * This is '\' by default. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | char continuation; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | |
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 first comment character. |
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 comment1; |
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 second comment character. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
63 | * 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
|
64 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
65 | char comment2; |
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 third comment character. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
69 | * 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
|
70 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
71 | char comment3; |
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 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
75 | * Typedef for the properties config. |
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 | 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
|
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 | * Default properties configuration. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
81 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
82 | 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
|
83 | |
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 | * 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
|
86 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
87 | enum cx_properties_status { |
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 | * Everything is fine. |
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 | CX_PROPERTIES_NO_ERROR, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
92 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
93 | * 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
|
94 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
95 | CX_PROPERTIES_NO_DATA, |
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 | * The input ends unexpectedly. |
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 | * 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
|
100 | * 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
|
101 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
102 | CX_PROPERTIES_INCOMPLETE_DATA, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
103 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
104 | * Input buffer is \c NULL. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
105 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
106 | CX_PROPERTIES_NULL_INPUT, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
107 | }; |
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 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
110 | * 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
|
111 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
112 | struct cx_properties_s { |
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 | * The configuration. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
115 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
116 | CxPropertiesConfig config; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
117 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
118 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
119 | * The text buffer. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
120 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
121 | const char *text; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
122 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
123 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
124 | * Length of the text buffer. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
125 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
126 | size_t text_len; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
127 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
128 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
129 | * Position in the text buffer. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
130 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
131 | size_t text_pos; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
132 | }; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
133 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
134 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
135 | * Typedef for the properties interface. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
136 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
137 | 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
|
138 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
139 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
140 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
141 | * Initialize a properties parser. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
142 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
143 | * @param prop the properties interface |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
144 | * @param config the properties configuration |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
145 | * @see cxPropertiesInitDefault() |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
146 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
147 | __attribute__((__nonnull__)) |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
148 | static inline void cxPropertiesInit( |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
149 | CxProperties *prop, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
150 | CxPropertiesConfig config |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
151 | ) { |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
152 | prop->config = config; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
153 | prop->text = NULL; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
154 | } |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
155 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
156 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
157 | * 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
|
158 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
159 | * @param prop the properties interface |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
160 | * @see cxPropertiesInit() |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
161 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
162 | #define cxPropertiesInitDefault(prop) \ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | 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
|
164 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
165 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
166 | * Sets an input buffer. |
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 | * After calling this function, you can parse the data by calling |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
169 | * cxPropertiesNext() until the status is #CX_PROPERTIES_NO_DATA. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
170 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
171 | * @param prop the properties interface |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | * @param buf a pointer to data |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | * @param len the length of the data |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
175 | __attribute__((__nonnull__)) |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
176 | static inline void cxPropertiesInput( |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
177 | CxProperties *prop, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
178 | const void *buf, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
179 | size_t len |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
180 | ) { |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
181 | prop->text = buf; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
182 | prop->text_len = len; |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | prop->text_pos = 0; |
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 | /** |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
187 | * 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
|
188 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | * This function returns zero as long as there are key/value-pairs |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
190 | * found. If no more key/value-pairs are found, #CX_PROPERTIES_NO_DATA |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
191 | * is returned. You may refill the input buffer with cxPropertiesInput(). |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
192 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
193 | * When an invalid line is encountered, #CX_PROPERTIES_INVALID_LINE is returned |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
194 | * and the position of the input buffer will be the start of the affected line. |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
195 | * |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
196 | * @param prop the properties interface |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
197 | * @param name a pointer to the cxstring that shall contain the property name |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
198 | * @param value a pointer to the cxstring that shall contain the property value |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
199 | * @return Nonzero, if a key/value-pair was successfully retrieved |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
200 | * @see ucx_properties_fill() |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
201 | */ |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
202 | enum cx_properties_status cxPropertiesNext( |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
203 | CxProperties *prop, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
204 | cxstring *name, |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
205 | cxstring *value |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
206 | ); |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
207 | |
45da884269c8
add ucx2.1 style interface for a properties parser
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
208 | #endif // UCX_PROPERTIES |