Freeciv-3.3: /fast/freeciv/nightly/main/utility/registry_ini.h Source File

Freeciv-3.3

Loading...
Searching...
No Matches
registry_ini.h
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13#ifndef FC__REGISTRY_INI_H
14#define FC__REGISTRY_INI_H
15
16#ifdef __cplusplus
17extern "C" {
18#endif /* __cplusplus */
19
20/* utility */
21#include "ioz.h"
22#include "support.h" /* bool type and fc__attribute */
23
24/* Opaque types. */
25struct section_file;
26struct section;
27struct entry;
28
29/* Typedefs. */
30 typedef const void *secfile_data_t;
31
32 typedef bool (*secfile_enum_is_valid_fn_t) (int enumerator);
33 typedef const char * (*secfile_enum_name_fn_t) (int enumerator);
34 typedef int (*secfile_enum_by_name_fn_t) (const char *enum_name,
35 int (*strcmp_fn)(const char *,
36 const char *));
37 typedef int (*secfile_enum_iter_fn_t) (void);
38 typedef int (*secfile_enum_next_fn_t) (int enumerator);
39 typedef const char * (*secfile_enum_name_data_fn_t) (secfile_data_t data,
40 int enumerator);
41
42/* Create a 'struct section_list' and related functions: */
43#define SPECLIST_TAG section
44#include "speclist.h"
45#define section_list_iterate(seclist, psection) \
46 TYPED_LIST_ITERATE(struct section, seclist, psection)
47#define section_list_iterate_end LIST_ITERATE_END
48#define section_list_iterate_rev(seclist, psection) \
49 TYPED_LIST_ITERATE_REV(struct section, seclist, psection)
50#define section_list_iterate_rev_end LIST_ITERATE_REV_END
51
52/* Create a 'struct entry_list' and related functions: */
53#define SPECLIST_TAG entry
54#include "speclist.h"
55#define entry_list_iterate(entlist, pentry) \
56 TYPED_LIST_ITERATE(struct entry, entlist, pentry)
57#define entry_list_iterate_end LIST_ITERATE_END
58
59/* Main functions. */
60struct section_file *secfile_load_section(const char *filename,
61 const char *section,
62 bool allow_duplicates);
63struct section_file *secfile_from_stream(fz_FILE *stream,
64 bool allow_duplicates);
65
66bool secfile_save(const struct section_file *secfile, const char *filename,
67 int compression_level, enum fz_method compression_method);
68void secfile_check_unused(const struct section_file *secfile);
69const char *secfile_name(const struct section_file *secfile);
70
71 enum entry_special_type { EST_NORMAL, EST_INCLUDE, EST_COMMENT };
72
73/* Insertion functions. */
74 struct entry *secfile_insert_bool_full(struct section_file *secfile,
75 bool value, const char *comment,
76 bool allow_replace,
77 const char *path, ...)
78 fc__attribute((__format__(__printf__, 5, 6)));
79#define secfile_insert_bool(secfile, value, path, ...) \
80 secfile_insert_bool_full(secfile, value, nullptr, FALSE, \
81 path, ## __VA_ARGS__)
82#define secfile_insert_bool_comment(secfile, value, comment, path, ...) \
83 secfile_insert_bool_full(secfile, value, comment, FALSE, \
84 path, ## __VA_ARGS__)
85#define secfile_replace_bool(secfile, value, path, ...) \
86 secfile_insert_bool_full(secfile, value, nullptr, TRUE, \
87 path, ## __VA_ARGS__)
88#define secfile_replace_bool_comment(secfile, value, comment, path, ...) \
89 secfile_insert_bool_full(secfile, value, comment, TRUE, \
90 path, ## __VA_ARGS__)
91 size_t secfile_insert_bool_vec_full(struct section_file *secfile,
92 const bool *values, size_t dim,
93 const char *comment, bool allow_replace,
94 const char *path, ...)
95 fc__attribute((__format__(__printf__, 6, 7)));
96#define secfile_insert_bool_vec(secfile, values, dim, path, ...) \
97 secfile_insert_bool_vec_full(secfile, values, dim, nullptr, FALSE, \
98 path, ## __VA_ARGS__)
99#define secfile_insert_bool_vec_comment(secfile, values, dim, \
100 comment, path, ...) \
101 secfile_insert_bool_vec_full(secfile, values, dim, comment, FALSE, \
102 path, ## __VA_ARGS__)
103#define secfile_replace_bool_vec(secfile, values, dim, path, ...) \
104 secfile_insert_bool_vec_full(secfile, values, dim, nullptr, TRUE, \
105 path, ## __VA_ARGS__)
106#define secfile_replace_bool_vec_comment(secfile, values, dim, \
107 comment, path, ...) \
108 secfile_insert_bool_vec_full(secfile, values, comment, TRUE, \
109 path, ## __VA_ARGS__)
110
111 struct entry *secfile_insert_int_full(struct section_file *secfile,
112 int value, const char *comment,
113 bool allow_replace,
114 const char *path, ...)
115 fc__attribute((__format__ (__printf__, 5, 6)));
116#define secfile_insert_int(secfile, value, path, ...) \
117 secfile_insert_int_full(secfile, value, nullptr, FALSE, \
118 path, ## __VA_ARGS__)
119#define secfile_insert_int_comment(secfile, value, comment, path, ...) \
120 secfile_insert_int_full(secfile, value, comment, FALSE, \
121 path, ## __VA_ARGS__)
122#define secfile_replace_int(secfile, value, path, ...) \
123 secfile_insert_int_full(secfile, value, nullptr, TRUE, \
124 path, ## __VA_ARGS__)
125#define secfile_replace_int_comment(secfile, value, comment, path, ...) \
126 secfile_insert_int_full(secfile, value, comment, TRUE, \
127 path, ## __VA_ARGS__)
128 size_t secfile_insert_int_vec_full(struct section_file *secfile,
129 const int *values, size_t dim,
130 const char *comment, bool allow_replace,
131 const char *path, ...)
132 fc__attribute((__format__ (__printf__, 6, 7)));
133#define secfile_insert_int_vec(secfile, values, dim, path, ...) \
134 secfile_insert_int_vec_full(secfile, values, dim, nullptr, FALSE, \
135 path, ## __VA_ARGS__)
136#define secfile_insert_int_vec_comment(secfile, values, dim, \
137 comment, path, ...) \
138 secfile_insert_int_vec_full(secfile, values, dim, comment, FALSE, \
139 path, ## __VA_ARGS__)
140#define secfile_replace_int_vec(secfile, values, dim, path, ...) \
141 secfile_insert_int_vec_full(secfile, values, dim, nullptr, TRUE, \
142 path, ## __VA_ARGS__)
143#define secfile_replace_int_vec_comment(secfile, values, dim, \
144 comment, path, ...) \
145 secfile_insert_int_vec_full(secfile, values, dim, comment, TRUE, \
146 path, ## __VA_ARGS__)
147
148 struct entry *secfile_insert_float_full(struct section_file *secfile,
149 float value, const char *comment,
150 bool allow_replace,
151 const char *path, ...)
152 fc__attribute((__format__ (__printf__, 5, 6)));
153#define secfile_insert_float(secfile, value, path, ...) \
154 secfile_insert_float_full(secfile, value, nullptr, FALSE, \
155 path, ## __VA_ARGS__)
156
157struct section *secfile_insert_include(struct section_file *secfile,
158 const char *filename);
159
160struct section *secfile_insert_long_comment(struct section_file *secfile,
161 const char *comment);
162
163 struct entry *secfile_insert_str_full(struct section_file *secfile,
164 const char *str,
165 const char *comment,
166 bool allow_replace, bool no_escape,
167 enum entry_special_type stype,
168 const char *path, ...)
169 fc__attribute((__format__(__printf__, 7, 8)));
170#define secfile_insert_str(secfile, string, path, ...) \
171 secfile_insert_str_full(secfile, string, nullptr, FALSE, FALSE, FALSE, \
172 path, ## __VA_ARGS__)
173#define secfile_insert_str_noescape(secfile, string, path, ...) \
174 secfile_insert_str_full(secfile, string, nullptr, FALSE, TRUE, FALSE, \
175 path, ## __VA_ARGS__)
176#define secfile_insert_str_comment(secfile, string, comment, path, ...) \
177 secfile_insert_str_full(secfile, string, comment, FALSE, TRUE, FALSE, \
178 path, ## __VA_ARGS__)
179#define secfile_insert_str_noescape_comment(secfile, string, \
180 comment, path, ...) \
181 secfile_insert_str_full(secfile, string, comment, FALSE, TRUE, FALSE, \
182 path, ## __VA_ARGS__)
183#define secfile_replace_str(secfile, string, path, ...) \
184 secfile_insert_str_full(secfile, string, nullptr, TRUE, FALSE, FALSE, \
185 path, ## __VA_ARGS__)
186#define secfile_replace_str_noescape(secfile, string, path, ...) \
187 secfile_insert_str_full(secfile, string, nullptr, TRUE, TRUE, FALSE, \
188 path, ## __VA_ARGS__)
189#define secfile_replace_str_comment(secfile, string, comment, path, ...) \
190 secfile_insert_str_full(secfile, string, comment, TRUE, TRUE, FALSE, \
191 path, ## __VA_ARGS__)
192#define secfile_replace_str_noescape_comment(secfile, string, \
193 comment, path, ...) \
194 secfile_insert_str_full(secfile, string, comment, TRUE, TRUE, FALSE, \
195 path, ## __VA_ARGS__)
196 size_t secfile_insert_str_vec_full(struct section_file *secfile,
197 const char *const *strings, size_t dim,
198 const char *comment, bool allow_replace,
199 bool no_escape, const char *path, ...)
200 fc__attribute((__format__(__printf__, 7, 8)));
201#define secfile_insert_str_vec(secfile, strings, dim, path, ...) \
202 secfile_insert_str_vec_full(secfile, strings, dim, nullptr, FALSE, FALSE, \
203 path, ## __VA_ARGS__)
204#define secfile_insert_str_vec_noescape(secfile, strings, dim, path, ...) \
205 secfile_insert_str_vec_full(secfile, strings, dim, nullptr, FALSE, TRUE, \
206 path, ## __VA_ARGS__)
207#define secfile_insert_str_vec_comment(secfile, strings, dim, \
208 comment, path, ...) \
209 secfile_insert_str_vec_full(secfile, strings, dim, comment, FALSE, TRUE, \
210 path, ## __VA_ARGS__)
211#define secfile_insert_str_vec_noescape_comment(secfile, strings, dim, \
212 comment, path, ...) \
213 secfile_insert_str_vec_full(secfile, strings, dim, comment, FALSE, TRUE, \
214 path, ## __VA_ARGS__)
215#define secfile_replace_str_vec(secfile, strings, dim, path, ...) \
216 secfile_insert_str_vec_full(secfile, strings, dim, nullptr, TRUE, FALSE, \
217 path, ## __VA_ARGS__)
218#define secfile_replace_str_vec_noescape(secfile, strings, dim, path, ...) \
219 secfile_insert_str_vec_full(secfile, strings, dim, nullptr, TRUE, TRUE, \
220 path, ## __VA_ARGS__)
221#define secfile_replace_str_vec_comment(secfile, strings, dim, \
222 comment, path, ...) \
223 secfile_insert_str_vec_full(secfile, strings, dim, comment, TRUE, TRUE, \
224 path, ## __VA_ARGS__)
225#define secfile_replace_str_vec_noescape_comment(secfile, strings, dim, \
226 comment, path, ...) \
227 secfile_insert_str_vec_full(secfile, strings, dim, comment, TRUE, TRUE, \
228 path, ## __VA_ARGS__)
229
230 struct entry *secfile_insert_plain_enum_full(struct section_file *secfile,
231 int enumerator,
232 secfile_enum_name_fn_t name_fn,
233 const char *comment,
234 bool allow_replace,
235 const char *path, ...)
236 fc__attribute((__format__(__printf__, 6, 7)));
237 struct entry *secfile_insert_bitwise_enum_full(struct section_file *secfile,
238 int bitwise_val,
239 secfile_enum_name_fn_t name_fn,
240 secfile_enum_iter_fn_t begin_fn,
241 secfile_enum_iter_fn_t end_fn,
242 secfile_enum_next_fn_t next_fn,
243 const char *comment,
244 bool allow_replace,
245 const char *path, ...)
246 fc__attribute((__format__(__printf__, 9, 10)));
247#define secfile_insert_enum_full(secfile, enumerator, specenum_type, \
248 comment, allow_replace, path, ...) \
249(specenum_type##_is_bitwise() \
250 ? secfile_insert_bitwise_enum_full(secfile, enumerator, \
251 (secfile_enum_name_fn_t) \
252 specenum_type##_name, \
253 (secfile_enum_iter_fn_t) \
254 specenum_type##_begin, \
255 (secfile_enum_iter_fn_t) \
256 specenum_type##_end, \
257 (secfile_enum_next_fn_t) \
258 specenum_type##_next, \
259 comment, allow_replace, \
260 path, ## __VA_ARGS__) \
261 : secfile_insert_plain_enum_full(secfile, enumerator, \
262 (secfile_enum_name_fn_t) \
263 specenum_type##_name, \
264 comment, allow_replace, \
265 path, ## __VA_ARGS__))
266#define secfile_insert_enum(secfile, enumerator, specenum_type, path, ...) \
267 secfile_insert_enum_full(secfile, enumerator, specenum_type, nullptr, FALSE, \
268 path, ## __VA_ARGS__)
269#define secfile_insert_enum_comment(secfile, enumerator, specenum_type, \
270 comment, path, ...) \
271 secfile_insert_enum_full(secfile, enumerator, specenum_type, comment, \
272 FALSE, path, ## __VA_ARGS__)
273#define secfile_replace_enum(secfile, enumerator, specenum_type, path, ...) \
274 secfile_insert_enum_full(secfile, enumerator, specenum_type, nullptr, TRUE, \
275 path, ## __VA_ARGS__)
276#define secfile_replace_enum_comment(secfile, enumerator, specenum_type, \
277 comment, path, ...) \
278 secfile_insert_enum_full(secfile, enumerator, specenum_type, comment, \
279 TRUE, path, ## __VA_ARGS__)
280 size_t secfile_insert_plain_enum_vec_full(struct section_file *secfile,
281 const int *enumurators, size_t dim,
282 secfile_enum_name_fn_t name_fn,
283 const char *comment,
284 bool allow_replace,
285 const char *path, ...)
286 fc__attribute((__format__(__printf__, 7, 8)));
287 size_t secfile_insert_bitwise_enum_vec_full(struct section_file *secfile,
288 const int *bitwise_vals,
289 size_t dim,
290 secfile_enum_name_fn_t name_fn,
291 secfile_enum_iter_fn_t begin_fn,
292 secfile_enum_iter_fn_t end_fn,
293 secfile_enum_next_fn_t next_fn,
294 const char *comment,
295 bool allow_replace,
296 const char *path, ...)
297 fc__attribute((__format__(__printf__, 10, 11)));
298#define secfile_insert_enum_vec_full(secfile, enumerators, dim, \
299 specenum_type, comment, allow_replace, \
300 path, ...) \
301(specenum_type##_is_bitwise() \
302 ? secfile_insert_bitwise_enum_vec_full(secfile, (const int *) enumerators, \
303 dim, \
304 (secfile_enum_name_fn_t) \
305 specenum_type##_name, \
306 (secfile_enum_iter_fn_t) \
307 specenum_type##_begin, \
308 (secfile_enum_iter_fn_t) \
309 specenum_type##_end, \
310 (secfile_enum_next_fn_t) \
311 specenum_type##_next, \
312 comment, allow_replace, \
313 path, ## __VA_ARGS__) \
314 : secfile_insert_plain_enum_vec_full(secfile, (const int *) enumerators, \
315 dim, \
316 (secfile_enum_name_fn_t) \
317 specenum_type##_name, \
318 comment, allow_replace, \
319 path, ## __VA_ARGS__))
320#define secfile_insert_enum_vec(secfile, enumerators, dim, specenum_type, \
321 path, ...) \
322 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
323 nullptr, FALSE, path, ## __VA_ARGS__)
324#define secfile_insert_enum_vec_comment(secfile, enumerators, dim, \
325 specenum_type, comment, path, ...) \
326 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
327 comment, FALSE, path, ## __VA_ARGS__)
328#define secfile_replace_enum_vec(secfile, enumerators, dim, specenum_type, \
329 path, ...) \
330 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
331 nullptr, TRUE, path, ## __VA_ARGS__)
332#define secfile_replace_enum_vec_comment(secfile, enumerators, dim, \
333 specenum_type, comment, path, ...) \
334 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
335 comment, TRUE, path, ## __VA_ARGS__)
336
337 struct entry *secfile_insert_enum_data_full(struct section_file *secfile,
338 int value, bool bitwise,
339 secfile_enum_name_data_fn_t name_fn,
340 secfile_data_t data,
341 const char *comment,
342 bool allow_replace,
343 const char *path, ...)
344 fc__attribute((__format__(__printf__, 8, 9)));
345#define secfile_insert_enum_data(secfile, value, bitwise, name_fn, data, \
346 path, ...) \
347 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
348 nullptr, FALSE, path, ## __VA_ARGS__)
349#define secfile_insert_enum_data_comment(secfile, value, bitwise, name_fn, \
350 data, path, ...) \
351 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
352 comment, FALSE, path, ## __VA_ARGS__)
353#define secfile_replace_enum_data(secfile, value, bitwise, name_fn, data, \
354 path, ...) \
355 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
356 nullptr, TRUE, path, ## __VA_ARGS__)
357#define secfile_replace_enum_data_comment(secfile, value, bitwise, name_fn, \
358 data, path, ...) \
359 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
360 comment, TRUE, path, ## __VA_ARGS__)
361 size_t secfile_insert_enum_vec_data_full(struct section_file *secfile,
362 const int *values, size_t dim,
363 bool bitwise,
364 secfile_enum_name_data_fn_t name_fn,
365 secfile_data_t data,
366 const char *comment,
367 bool allow_replace,
368 const char *path, ...)
369 fc__attribute((__format__(__printf__, 9, 10)));
370#define secfile_insert_enum_vec_data(secfile, values, dim, bitwise, \
371 name_fn, data, path, ...) \
372 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
373 data, nullptr, FALSE, path, ## __VA_ARGS__)
374#define secfile_insert_enum_vec_data_comment(secfile, values, dim, bitwise, \
375 name_fn, data, path, ...) \
376 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
377 data, comment, FALSE, path, \
378 ## __VA_ARGS__)
379#define secfile_replace_enum_vec_data(secfile, values, dim, bitwise, \
380 name_fn, data, path, ...) \
381 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
382 data, nullptr, TRUE, path, ## __VA_ARGS__)
383#define secfile_replace_enum_vec_data_comment(secfile, values, dim, \
384 bitwise, name_fn, data, path, \
385 ...) \
386 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
387 data, comment, TRUE, path, \
388 ## __VA_ARGS__)
389
390 struct entry *secfile_insert_filereference(struct section_file *secfile,
391 const char *filename,
392 const char *path, ...)
393 fc__attribute((__format__ (__printf__, 3, 4)));
394
395 struct entry *secfile_insert_comment(struct section_file *secfile,
396 const char *str,
397 const char *path, ...)
398 fc__attribute((__format__ (__printf__, 3, 4)));
399
400/* Deletion function. */
401 bool secfile_entry_delete(struct section_file *secfile,
402 const char *path, ...)
403 fc__attribute((__format__ (__printf__, 2, 3)));
404
405/* Lookup functions. */
406 struct entry *secfile_entry_by_path(const struct section_file *secfile,
407 const char *path);
408 struct entry *secfile_entry_lookup(const struct section_file *secfile,
409 const char *path, ...)
410 fc__attribute((__format__ (__printf__, 2, 3)));
411
412/* Macros to silence "unused entry" warnings about entries that
413 * we intentionally ignore. */
414#define secfile_entry_ignore(_sfile_, _fmt_, ...) \
415 (void) secfile_entry_lookup(_sfile_, _fmt_, ## __VA_ARGS__)
416#define secfile_entry_ignore_by_path(_sfile_, _path_) \
417 (void) secfile_entry_by_path(_sfile_, _path_)
418
419 bool secfile_lookup_bool(const struct section_file *secfile, bool *bval,
420 const char *path, ...)
421 fc__warn_unused_result
422 fc__attribute((__format__ (__printf__, 3, 4)));
423 bool secfile_lookup_bool_default(const struct section_file *secfile,
424 bool def, const char *path, ...)
425 fc__warn_unused_result
426 fc__attribute((__format__ (__printf__, 3, 4)));
427 bool *secfile_lookup_bool_vec(const struct section_file *secfile,
428 size_t *dim, const char *path, ...)
429 fc__warn_unused_result
430 fc__attribute((__format__ (__printf__, 3, 4)));
431
432 bool secfile_lookup_int(const struct section_file *secfile, int *ival,
433 const char *path, ...)
434 fc__warn_unused_result
435 fc__attribute((__format__ (__printf__, 3, 4)));
436 int secfile_lookup_int_default(const struct section_file *secfile, int def,
437 const char *path, ...)
438 fc__warn_unused_result
439 fc__attribute((__format__ (__printf__, 3, 4)));
440 int secfile_lookup_int_def_min_max(const struct section_file *secfile,
441 int defval, int minval, int maxval,
442 const char *path, ...)
443 fc__warn_unused_result
444 fc__attribute((__format__ (__printf__, 5, 6)));
445 int *secfile_lookup_int_vec(const struct section_file *secfile,
446 size_t *dim, const char *path, ...)
447 fc__warn_unused_result
448 fc__attribute((__format__ (__printf__, 3, 4)));
449
450 bool secfile_lookup_float(const struct section_file *secfile, float *fval,
451 const char *path, ...)
452 fc__warn_unused_result
453 fc__attribute((__format__ (__printf__, 3, 4)));
454float secfile_lookup_float_default(const struct section_file *secfile,
455 float def, const char *path, ...);
456
457 const char *secfile_lookup_str(const struct section_file *secfile,
458 const char *path, ...)
459 fc__warn_unused_result
460 fc__attribute((__format__ (__printf__, 2, 3)));
461 const char *secfile_lookup_str_default(const struct section_file *secfile,
462 const char *def,
463 const char *path, ...)
464 fc__warn_unused_result
465 fc__attribute((__format__ (__printf__, 3, 4)));
466 const char **secfile_lookup_str_vec(const struct section_file *secfile,
467 size_t *dim, const char *path, ...)
468 fc__attribute((__format__ (__printf__, 3, 4)));
469
470 bool secfile_lookup_plain_enum_full(const struct section_file *secfile,
471 int *penumerator,
472 secfile_enum_is_valid_fn_t is_valid_fn,
473 secfile_enum_by_name_fn_t by_name_fn,
474 const char *path, ...)
475 fc__warn_unused_result
476 fc__attribute((__format__ (__printf__, 5, 6)));
477 bool secfile_lookup_bitwise_enum_full(const struct section_file *secfile,
478 int *penumerator,
479 secfile_enum_is_valid_fn_t is_valid_fn,
480 secfile_enum_by_name_fn_t by_name_fn,
481 const char *path, ...)
482 fc__warn_unused_result
483 fc__attribute((__format__ (__printf__, 5, 6)));
484#define secfile_lookup_enum(secfile, enumerator, specenum_type, path, ...) \
485(specenum_type##_is_bitwise() \
486 ? secfile_lookup_bitwise_enum_full(secfile, FC_ENUM_PTR(enumerator), \
487 (secfile_enum_is_valid_fn_t) \
488 specenum_type##_is_valid, \
489 (secfile_enum_by_name_fn_t) \
490 specenum_type##_by_name, \
491 path, ## __VA_ARGS__) \
492 : secfile_lookup_plain_enum_full(secfile, FC_ENUM_PTR(enumerator), \
493 (secfile_enum_is_valid_fn_t) \
494 specenum_type##_is_valid, \
495 (secfile_enum_by_name_fn_t) \
496 specenum_type##_by_name, \
497 path, ## __VA_ARGS__))
498 int secfile_lookup_plain_enum_default_full(const struct section_file
499 *secfile, int defval,
500 secfile_enum_is_valid_fn_t
501 is_valid_fn,
502 secfile_enum_by_name_fn_t
503 by_name_fn,
504 const char *path, ...)
505 fc__warn_unused_result
506 fc__attribute((__format__ (__printf__, 5, 6)));
507 int secfile_lookup_bitwise_enum_default_full(const struct section_file
508 *secfile, int defval,
509 secfile_enum_is_valid_fn_t
510 is_valid_fn,
511 secfile_enum_by_name_fn_t
512 by_name_fn,
513 const char *path, ...)
514 fc__warn_unused_result
515 fc__attribute((__format__ (__printf__, 5, 6)));
516#define secfile_lookup_enum_default(secfile, defval, specenum_type, \
517 path, ...) \
518(specenum_type##_is_bitwise() \
519 ? secfile_lookup_bitwise_enum_default_full(secfile, defval, \
520 (secfile_enum_is_valid_fn_t) \
521 specenum_type##_is_valid, \
522 (secfile_enum_by_name_fn_t) \
523 specenum_type##_by_name, \
524 path, ## __VA_ARGS__) \
525 : secfile_lookup_plain_enum_default_full(secfile, defval, \
526 (secfile_enum_is_valid_fn_t) \
527 specenum_type##_is_valid, \
528 (secfile_enum_by_name_fn_t) \
529 specenum_type##_by_name, \
530 path, ## __VA_ARGS__))
531 int *secfile_lookup_plain_enum_vec_full(const struct section_file *secfile,
532 size_t *dim,
533 secfile_enum_is_valid_fn_t
534 is_valid_fn,
535 secfile_enum_by_name_fn_t
536 by_name_fn,
537 const char *path, ...)
538 fc__warn_unused_result
539 fc__attribute((__format__ (__printf__, 5, 6)));
540 int *secfile_lookup_bitwise_enum_vec_full(const struct section_file *secfile,
541 size_t *dim,
542 secfile_enum_is_valid_fn_t
543 is_valid_fn,
544 secfile_enum_by_name_fn_t
545 by_name_fn,
546 const char *path, ...)
547 fc__warn_unused_result
548 fc__attribute((__format__ (__printf__, 5, 6)));
549#define secfile_lookup_enum_vec(secfile, dim, specenum_type, \
550 path, ...) \
551(specenum_type##_is_bitwise() \
552 ? (enum specenum_type *) \
553 secfile_lookup_bitwise_enum_vec_full(secfile, dim, \
554 (secfile_enum_is_valid_fn_t) \
555 specenum_type##_is_valid, \
556 (secfile_enum_by_name_fn_t) \
557 specenum_type##_by_name, \
558 path, ## __VA_ARGS__) \
559 : (enum specenum_type *) \
560 secfile_lookup_plain_enum_vec_full(secfile, dim, \
561 (secfile_enum_is_valid_fn_t) \
562 specenum_type##_is_valid, \
563 (secfile_enum_by_name_fn_t) \
564 specenum_type##_by_name, \
565 path, ## __VA_ARGS__))
566
567 bool secfile_lookup_enum_data(const struct section_file *secfile,
568 int *pvalue, bool bitwise,
569 secfile_enum_name_data_fn_t name_fn,
570 secfile_data_t data, const char *path, ...)
571 fc__warn_unused_result
572 fc__attribute((__format__ (__printf__, 6, 7)));
573 int secfile_lookup_enum_default_data(const struct section_file *secfile,
574 int defval, bool bitwise,
575 secfile_enum_name_data_fn_t name_fn,
576 secfile_data_t data,
577 const char *path, ...)
578 fc__warn_unused_result
579 fc__attribute((__format__ (__printf__, 6, 7)));
580 int *secfile_lookup_enum_vec_data(const struct section_file *secfile,
581 size_t *dim, bool bitwise,
582 secfile_enum_name_data_fn_t name_fn,
583 secfile_data_t data, const char *path, ...)
584 fc__warn_unused_result
585 fc__attribute((__format__ (__printf__, 6, 7)));
586
587/* Sections functions. */
588 struct section *secfile_section_by_name(const struct section_file *secfile,
589 const char *section_name);
590 struct section *secfile_section_lookup(const struct section_file *secfile,
591 const char *path, ...)
592 fc__attribute((__format__ (__printf__, 2, 3)));
593 const struct section_list *
594 secfile_sections(const struct section_file *secfile);
595 struct section_list *
596 secfile_sections_by_name_prefix(const struct section_file *secfile,
597 const char *prefix);
598bool secfile_section_prefix_present(const struct section_file *secfile,
599 const char *prefix);
600 struct section *secfile_section_new(struct section_file *secfile,
601 const char *section_name);
602
603
604/* Independent section functions. */
605void section_destroy(struct section *psection);
606void section_clear_all(struct section *psection);
607
608bool section_set_name(struct section *psection, const char *section_name);
609
610/* Entry functions. */
611 const struct entry_list *section_entries(const struct section *psection);
612 struct entry *section_entry_by_name(const struct section *psection,
613 const char *entry_name);
614 struct entry *section_entry_lookup(const struct section *psection,
615 const char *path, ...)
616 fc__attribute((__format__ (__printf__, 2, 3)));
617 struct entry *section_entry_int_new(struct section *psection,
618 const char *entry_name,
619 int value);
620 struct entry *section_entry_bool_new(struct section *psection,
621 const char *entry_name,
622 bool value);
623 struct entry *section_entry_float_new(struct section *psection,
624 const char *entry_name,
625 float value);
626 struct entry *section_entry_str_new(struct section *psection,
627 const char *entry_name,
628 const char *value, bool escaped);
629
630/* Independent entry functions. */
631 enum entry_type {
632 ENTRY_BOOL,
633 ENTRY_INT,
634 ENTRY_FLOAT,
635 ENTRY_STR,
636 ENTRY_FILEREFERENCE,
637 ENTRY_LONG_COMMENT,
638 ENTRY_ILLEGAL
639};
640
641void entry_destroy(struct entry *pentry);
642
643struct section *entry_section(const struct entry *pentry);
644enum entry_type entry_type_get(const struct entry *pentry);
645int entry_path(const struct entry *pentry, char *buf, size_t buf_len);
646
647const char *entry_name(const struct entry *pentry);
648bool entry_set_name(struct entry *pentry, const char *entry_name);
649
650const char *entry_comment(const struct entry *pentry);
651void entry_set_comment(struct entry *pentry, const char *comment);
652
653bool entry_int_get(const struct entry *pentry, int *value);
654bool entry_int_set(struct entry *pentry, int value);
655
656bool entry_bool_get(const struct entry *pentry, bool *value);
657bool entry_bool_set(struct entry *pentry, bool value);
658
659bool entry_float_get(const struct entry *pentry, float *value);
660bool entry_float_set(struct entry *pentry, float value);
661
662bool entry_str_get(const struct entry *pentry, const char **value);
663bool entry_str_set(struct entry *pentry, const char *value);
664bool entry_str_escaped(const struct entry *pentry);
665bool entry_str_set_escaped(struct entry *pentry, bool escaped);
666bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking);
667
668#ifdef __cplusplus
669}
670#endif /* __cplusplus */
671
672#endif /* FC__REGISTRY_INI_H */
str
#define str
Definition astring.c:76
incite_cost
char * incite_cost
Definition comments.c:74
enum_name
const char * enum_name
Definition events.c:76
ioz.h
fz_method
fz_method
Definition ioz.h:36
section_name
const char * section_name(const struct section *psection)
Definition section_file.c:65
secfile_lookup_bool_vec
bool bool bool * secfile_lookup_bool_vec(const struct section_file *secfile, size_t *dim, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_lookup_int_vec
bool bool bool bool int int int * secfile_lookup_int_vec(const struct section_file *secfile, size_t *dim, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_lookup_enum_default_data
bool int secfile_lookup_enum_default_data(const struct section_file *secfile, int defval, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_lookup_str_default
const char const char * secfile_lookup_str_default(const struct section_file *secfile, const char *def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
entry_set_comment
void entry_set_comment(struct entry *pentry, const char *comment)
Definition registry_ini.c:3427
entry_bool_get
bool entry_bool_get(const struct entry *pentry, bool *value)
Definition registry_ini.c:3460
section_destroy
void section_destroy(struct section *psection)
Definition registry_ini.c:2975
secfile_lookup_enum_vec_data
bool int int * secfile_lookup_enum_vec_data(const struct section_file *secfile, size_t *dim, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_check_unused
void secfile_check_unused(const struct section_file *secfile)
Definition registry_ini.c:907
entry_path
int entry_path(const struct entry *pentry, char *buf, size_t buf_len)
Definition registry_ini.c:3353
secfile_insert_long_comment
struct section * secfile_insert_long_comment(struct section_file *secfile, const char *comment)
Definition registry_ini.c:1236
secfile_insert_bitwise_enum_vec_full
size_t size_t secfile_insert_bitwise_enum_vec_full(struct section_file *secfile, const int *bitwise_vals, size_t dim, secfile_enum_name_fn_t name_fn, secfile_enum_iter_fn_t begin_fn, secfile_enum_iter_fn_t end_fn, secfile_enum_next_fn_t next_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
secfile_enum_iter_fn_t
int(* secfile_enum_iter_fn_t)(void)
Definition registry_ini.h:37
secfile_lookup_bitwise_enum_full
const char const char const char bool bool secfile_lookup_bitwise_enum_full(const struct section_file *secfile, int *penumerator, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_lookup_plain_enum_vec_full
int * secfile_lookup_plain_enum_vec_full(const struct section_file *secfile, size_t *dim, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_insert_comment
struct entry struct entry * secfile_insert_comment(struct section_file *secfile, const char *str, const char *path,...) fc__attribute((__format__(__printf__
secfile_enum_name_data_fn_t
const char *(* secfile_enum_name_data_fn_t)(secfile_data_t data, int enumerator)
Definition registry_ini.h:39
entry_type
entry_type
Definition registry_ini.h:631
ENTRY_FILEREFERENCE
@ ENTRY_FILEREFERENCE
Definition registry_ini.h:636
ENTRY_LONG_COMMENT
@ ENTRY_LONG_COMMENT
Definition registry_ini.h:637
ENTRY_INT
@ ENTRY_INT
Definition registry_ini.h:633
ENTRY_FLOAT
@ ENTRY_FLOAT
Definition registry_ini.h:634
ENTRY_STR
@ ENTRY_STR
Definition registry_ini.h:635
ENTRY_ILLEGAL
@ ENTRY_ILLEGAL
Definition registry_ini.h:638
ENTRY_BOOL
@ ENTRY_BOOL
Definition registry_ini.h:632
secfile_insert_bool_full
struct entry * secfile_insert_bool_full(struct section_file *secfile, bool value, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
entry_str_escaped
bool entry_str_escaped(const struct entry *pentry)
Definition registry_ini.c:3599
secfile_lookup_float_default
bool bool bool bool int int int bool float secfile_lookup_float_default(const struct section_file *secfile, float def, const char *path,...)
Definition registry_ini.c:2152
secfile_insert_int_vec_full
size_t secfile_insert_int_vec_full(struct section_file *secfile, const int *values, size_t dim, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
entry_section
struct section * entry_section(const struct entry *pentry)
Definition registry_ini.c:3337
secfile_entry_lookup
struct entry * secfile_entry_lookup(const struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
secfile_sections_by_name_prefix
struct section_list * secfile_sections_by_name_prefix(const struct section_file *secfile, const char *prefix)
Definition registry_ini.c:2877
section_entries
const struct entry_list * section_entries(const struct section *psection)
Definition registry_ini.c:3079
secfile_entry_delete
struct entry struct entry bool secfile_entry_delete(struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
secfile_load_section
struct section_file * secfile_load_section(const char *filename, const char *section, bool allow_duplicates)
Definition registry_ini.c:596
entry_bool_set
bool entry_bool_set(struct entry *pentry, bool value)
Definition registry_ini.c:3489
secfile_from_stream
struct section_file * secfile_from_stream(fz_FILE *stream, bool allow_duplicates)
Definition registry_ini.c:610
secfile_insert_filereference
struct entry * secfile_insert_filereference(struct section_file *secfile, const char *filename, const char *path,...) fc__attribute((__format__(__printf__
secfile_insert_plain_enum_full
struct entry * secfile_insert_plain_enum_full(struct section_file *secfile, int enumerator, secfile_enum_name_fn_t name_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
secfile_lookup_bitwise_enum_vec_full
int int * secfile_lookup_bitwise_enum_vec_full(const struct section_file *secfile, size_t *dim, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
entry_float_get
bool entry_float_get(const struct entry *pentry, float *value)
Definition registry_ini.c:3502
entry_str_set_escaped
bool entry_str_set_escaped(struct entry *pentry, bool escaped)
Definition registry_ini.c:3611
secfile_entry_by_path
struct entry struct entry bool struct entry * secfile_entry_by_path(const struct section_file *secfile, const char *path)
Definition registry_ini.c:1785
secfile_insert_bool_vec_full
size_t secfile_insert_bool_vec_full(struct section_file *secfile, const bool *values, size_t dim, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
entry_name
const char * entry_name(const struct entry *pentry)
Definition registry_ini.c:3363
secfile_lookup_str_vec
const char const char const char ** secfile_lookup_str_vec(const struct section_file *secfile, size_t *dim, const char *path,...) fc__attribute((__format__(__printf__
section_entry_float_new
struct entry * section_entry_float_new(struct section *psection, const char *entry_name, float value)
Definition registry_ini.c:3217
entry_str_get
bool entry_str_get(const struct entry *pentry, const char **value)
Definition registry_ini.c:3561
entry_str_set_gt_marking
bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking)
Definition registry_ini.c:3625
secfile_enum_is_valid_fn_t
bool(* secfile_enum_is_valid_fn_t)(int enumerator)
Definition registry_ini.h:32
entry_destroy
void entry_destroy(struct entry *pentry)
Definition registry_ini.c:3286
secfile_lookup_bitwise_enum_default_full
int int secfile_lookup_bitwise_enum_default_full(const struct section_file *secfile, int defval, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_section_by_name
bool int int struct section * secfile_section_by_name(const struct section_file *secfile, const char *section_name)
Definition registry_ini.c:2829
section_clear_all
void section_clear_all(struct section *psection)
Definition registry_ini.c:3002
entry_float_set
bool entry_float_set(struct entry *pentry, float value)
Definition registry_ini.c:3518
secfile_insert_enum_data_full
struct entry * secfile_insert_enum_data_full(struct section_file *secfile, int value, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
secfile_lookup_enum_data
bool secfile_lookup_enum_data(const struct section_file *secfile, int *pvalue, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_save
bool secfile_save(const struct section_file *secfile, const char *filename, int compression_level, enum fz_method compression_method)
Definition registry_ini.c:644
secfile_insert_include
struct section * secfile_insert_include(struct section_file *secfile, const char *filename)
Definition registry_ini.c:1212
entry_int_set
bool entry_int_set(struct entry *pentry, int value)
Definition registry_ini.c:3548
entry_special_type
entry_special_type
Definition registry_ini.h:71
EST_COMMENT
@ EST_COMMENT
Definition registry_ini.h:71
EST_NORMAL
@ EST_NORMAL
Definition registry_ini.h:71
EST_INCLUDE
@ EST_INCLUDE
Definition registry_ini.h:71
secfile_enum_name_fn_t
const char *(* secfile_enum_name_fn_t)(int enumerator)
Definition registry_ini.h:33
secfile_lookup_str
const char * secfile_lookup_str(const struct section_file *secfile, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_section_lookup
struct section * secfile_section_lookup(const struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
secfile_lookup_bool_default
bool bool secfile_lookup_bool_default(const struct section_file *secfile, bool def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_lookup_bool
bool secfile_lookup_bool(const struct section_file *secfile, bool *bval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
section_entry_str_new
struct entry * section_entry_str_new(struct section *psection, const char *entry_name, const char *value, bool escaped)
Definition registry_ini.c:3233
secfile_lookup_plain_enum_default_full
int secfile_lookup_plain_enum_default_full(const struct section_file *secfile, int defval, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_insert_str_full
struct entry * secfile_insert_str_full(struct section_file *secfile, const char *str, const char *comment, bool allow_replace, bool no_escape, enum entry_special_type stype, const char *path,...) fc__attribute((__format__(__printf__
entry_int_get
bool entry_int_get(const struct entry *pentry, int *value)
Definition registry_ini.c:3532
secfile_insert_int_full
struct entry * secfile_insert_int_full(struct section_file *secfile, int value, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
entry_set_name
bool entry_set_name(struct entry *pentry, const char *entry_name)
Definition registry_ini.c:3371
secfile_insert_str_vec_full
size_t secfile_insert_str_vec_full(struct section_file *secfile, const char *const *strings, size_t dim, const char *comment, bool allow_replace, bool no_escape, const char *path,...) fc__attribute((__format__(__printf__
section_entry_int_new
struct entry struct entry * section_entry_int_new(struct section *psection, const char *entry_name, int value)
Definition registry_ini.c:3185
secfile_name
const char * secfile_name(const struct section_file *secfile)
Definition registry_ini.c:943
secfile_insert_enum_vec_data_full
size_t secfile_insert_enum_vec_data_full(struct section_file *secfile, const int *values, size_t dim, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
entry_comment
const char * entry_comment(const struct entry *pentry)
Definition registry_ini.c:3419
secfile_lookup_plain_enum_full
const char const char const char bool secfile_lookup_plain_enum_full(const struct section_file *secfile, int *penumerator, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_lookup_int_def_min_max
bool bool bool bool int int secfile_lookup_int_def_min_max(const struct section_file *secfile, int defval, int minval, int maxval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_insert_float_full
struct entry * secfile_insert_float_full(struct section_file *secfile, float value, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
section_entry_by_name
struct entry * section_entry_by_name(const struct section *psection, const char *entry_name)
Definition registry_ini.c:3087
secfile_lookup_int_default
bool bool bool bool int secfile_lookup_int_default(const struct section_file *secfile, int def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_section_prefix_present
bool secfile_section_prefix_present(const struct section_file *secfile, const char *prefix)
Definition registry_ini.c:2906
secfile_insert_bitwise_enum_full
struct entry struct entry * secfile_insert_bitwise_enum_full(struct section_file *secfile, int bitwise_val, secfile_enum_name_fn_t name_fn, secfile_enum_iter_fn_t begin_fn, secfile_enum_iter_fn_t end_fn, secfile_enum_next_fn_t next_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
section_entry_lookup
struct entry * section_entry_lookup(const struct section *psection, const char *path,...) fc__attribute((__format__(__printf__
secfile_section_new
struct section * secfile_section_new(struct section_file *secfile, const char *section_name)
Definition registry_ini.c:2931
entry_str_set
bool entry_str_set(struct entry *pentry, const char *value)
Definition registry_ini.c:3577
secfile_lookup_float
bool bool bool bool int int int bool secfile_lookup_float(const struct section_file *secfile, float *fval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
secfile_enum_by_name_fn_t
int(* secfile_enum_by_name_fn_t)(const char *enum_name, int(*strcmp_fn)(const char *, const char *))
Definition registry_ini.h:34
section_entry_bool_new
struct entry * section_entry_bool_new(struct section *psection, const char *entry_name, bool value)
Definition registry_ini.c:3201
secfile_insert_plain_enum_vec_full
size_t secfile_insert_plain_enum_vec_full(struct section_file *secfile, const int *enumurators, size_t dim, secfile_enum_name_fn_t name_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
secfile_lookup_int
bool bool bool bool secfile_lookup_int(const struct section_file *secfile, int *ival, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
section_set_name
bool section_set_name(struct section *psection, const char *section_name)
Definition registry_ini.c:3019
secfile_enum_next_fn_t
int(* secfile_enum_next_fn_t)(int enumerator)
Definition registry_ini.h:38
secfile_sections
struct section const struct section_list * secfile_sections(const struct section_file *secfile)
Definition registry_ini.c:2866
secfile_data_t
const void * secfile_data_t
Definition registry_ini.h:30
entry_type_get
enum entry_type entry_type_get(const struct entry *pentry)
Definition registry_ini.c:3345
speclist.h
entry
Definition registry_ini.c:193
entry::psection
struct section * psection
Definition registry_ini.c:194
entry::escaped
bool escaped
Definition registry_ini.c:216
entry::value
bool value
Definition registry_ini.c:203
entry::comment
char * comment
Definition registry_ini.c:198
fz_FILE_s
Definition ioz.c:149
section_file
Definition section_file.h:36
section_file::allow_duplicates
bool allow_duplicates
Definition section_file.h:45
section
Definition section_file.h:28
section::secfile
struct section_file * secfile
Definition section_file.h:29
support.h
fc__attribute
#define fc__attribute(x)
Definition support.h:99
fc__warn_unused_result
#define fc__warn_unused_result
Definition support.h:109
bool
#define bool
Definition support.h:71