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. */
30typedef const void *secfile_data_t;
31
32typedef bool (*secfile_enum_is_valid_fn_t) (int enumerator);
33typedef const char * (*secfile_enum_name_fn_t) (int enumerator);
34typedef int (*secfile_enum_by_name_fn_t) (const char *enum_name,
35 int (*strcmp_fn)(const char *,
36 const char *));
38typedef int (*secfile_enum_next_fn_t) (int enumerator);
39typedef 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);
64 bool allow_duplicates);
65
66bool secfile_save(const struct section_file *secfile, const char *filename,
68void secfile_check_unused(const struct section_file *secfile);
69const char *secfile_name(const struct section_file *secfile);
70
72
73/* Insertion functions. */
75 bool value, const char *comment,
76 bool allow_replace,
77 const char *path, ...)
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__)
92 const bool *values, size_t dim,
93 const char *comment, bool allow_replace,
94 const char *path, ...)
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
112 int value, const char *comment,
113 bool allow_replace,
114 const char *path, ...)
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__)
129 const int *values, size_t dim,
130 const char *comment, bool allow_replace,
131 const char *path, ...)
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
149 float value, const char *comment,
150 bool allow_replace,
151 const char *path, ...)
153#define secfile_insert_float(secfile, value, path, ...) \
154 secfile_insert_float_full(secfile, value, nullptr, FALSE, \
155 path, ## __VA_ARGS__)
156#define secfile_replace_float(secfile, value, path, ...) \
157 secfile_insert_float_full(secfile, value, nullptr, TRUE, \
158 path, ## __VA_ARGS__)
159
161 const char *filename);
162
164 const char *comment);
165
167 const char *str,
168 const char *comment,
169 bool allow_replace, bool no_escape,
170 enum entry_special_type stype,
171 const char *path, ...)
173#define secfile_insert_str(secfile, string, path, ...) \
174 secfile_insert_str_full(secfile, string, nullptr, FALSE, FALSE, FALSE, \
175 path, ## __VA_ARGS__)
176#define secfile_insert_str_noescape(secfile, string, path, ...) \
177 secfile_insert_str_full(secfile, string, nullptr, FALSE, TRUE, FALSE, \
178 path, ## __VA_ARGS__)
179#define secfile_insert_str_comment(secfile, string, comment, path, ...) \
180 secfile_insert_str_full(secfile, string, comment, FALSE, TRUE, FALSE, \
181 path, ## __VA_ARGS__)
182#define secfile_insert_str_noescape_comment(secfile, string, \
183 comment, path, ...) \
184 secfile_insert_str_full(secfile, string, comment, FALSE, TRUE, FALSE, \
185 path, ## __VA_ARGS__)
186#define secfile_replace_str(secfile, string, path, ...) \
187 secfile_insert_str_full(secfile, string, nullptr, TRUE, FALSE, FALSE, \
188 path, ## __VA_ARGS__)
189#define secfile_replace_str_noescape(secfile, string, path, ...) \
190 secfile_insert_str_full(secfile, string, nullptr, TRUE, TRUE, FALSE, \
191 path, ## __VA_ARGS__)
192#define secfile_replace_str_comment(secfile, string, comment, path, ...) \
193 secfile_insert_str_full(secfile, string, comment, TRUE, TRUE, FALSE, \
194 path, ## __VA_ARGS__)
195#define secfile_replace_str_noescape_comment(secfile, string, \
196 comment, path, ...) \
197 secfile_insert_str_full(secfile, string, comment, TRUE, TRUE, FALSE, \
198 path, ## __VA_ARGS__)
199
201 const char *const *strings, size_t dim,
202 const char *comment, bool allow_replace,
203 bool no_escape, bool gt_marking,
204 const char *path, ...)
206#define secfile_insert_str_vec(secfile, strings, dim, path, ...) \
207 secfile_insert_str_vec_full(secfile, strings, dim, \
208 nullptr, FALSE, FALSE, FALSE, \
209 path, ## __VA_ARGS__)
210#define secfile_insert_str_vec_gt_marking(secfile, strings, dim, path, ...) \
211 secfile_insert_str_vec_full(secfile, strings, dim, \
212 nullptr, FALSE, FALSE, TRUE, \
213 path, ## __VA_ARGS__)
214#define secfile_insert_str_vec_noescape(secfile, strings, dim, path, ...) \
215 secfile_insert_str_vec_full(secfile, strings, dim, \
216 nullptr, FALSE, TRUE, FALSE, \
217 path, ## __VA_ARGS__)
218#define secfile_insert_str_vec_comment(secfile, strings, dim, \
219 comment, path, ...) \
220 secfile_insert_str_vec_full(secfile, strings, dim, \
221 comment, FALSE, TRUE, FALSE, \
222 path, ## __VA_ARGS__)
223#define secfile_insert_str_vec_noescape_comment(secfile, strings, dim, \
224 comment, path, ...) \
225 secfile_insert_str_vec_full(secfile, strings, dim, \
226 comment, FALSE, TRUE, FALSE \
227 path, ## __VA_ARGS__)
228#define secfile_replace_str_vec(secfile, strings, dim, path, ...) \
229 secfile_insert_str_vec_full(secfile, strings, dim, \
230 nullptr, TRUE, FALSE, FALSE, \
231 path, ## __VA_ARGS__)
232#define secfile_replace_str_vec_noescape(secfile, strings, dim, path, ...) \
233 secfile_insert_str_vec_full(secfile, strings, dim, \
234 nullptr, TRUE, TRUE, FALSE, \
235 path, ## __VA_ARGS__)
236#define secfile_replace_str_vec_comment(secfile, strings, dim, \
237 comment, path, ...) \
238 secfile_insert_str_vec_full(secfile, strings, dim, \
239 comment, TRUE, TRUE, FALSE, \
240 path, ## __VA_ARGS__)
241#define secfile_replace_str_vec_noescape_comment(secfile, strings, dim, \
242 comment, path, ...) \
243 secfile_insert_str_vec_full(secfile, strings, dim, \
244 comment, TRUE, TRUE, FALSE, \
245 path, ## __VA_ARGS__)
246
248 int enumerator,
250 const char *comment,
251 bool allow_replace,
252 const char *path, ...)
255 int bitwise_val,
260 const char *comment,
261 bool allow_replace,
262 const char *path, ...)
264#define secfile_insert_enum_full(secfile, enumerator, specenum_type, \
265 comment, allow_replace, path, ...) \
266(specenum_type##_is_bitwise() \
267 ? secfile_insert_bitwise_enum_full(secfile, enumerator, \
268 (secfile_enum_name_fn_t) \
269 specenum_type##_name, \
270 (secfile_enum_iter_fn_t) \
271 specenum_type##_begin, \
272 (secfile_enum_iter_fn_t) \
273 specenum_type##_end, \
274 (secfile_enum_next_fn_t) \
275 specenum_type##_next, \
276 comment, allow_replace, \
277 path, ## __VA_ARGS__) \
278 : secfile_insert_plain_enum_full(secfile, enumerator, \
279 (secfile_enum_name_fn_t) \
280 specenum_type##_name, \
281 comment, allow_replace, \
282 path, ## __VA_ARGS__))
283#define secfile_insert_enum(secfile, enumerator, specenum_type, path, ...) \
284 secfile_insert_enum_full(secfile, enumerator, specenum_type, nullptr, FALSE, \
285 path, ## __VA_ARGS__)
286#define secfile_insert_enum_comment(secfile, enumerator, specenum_type, \
287 comment, path, ...) \
288 secfile_insert_enum_full(secfile, enumerator, specenum_type, comment, \
289 FALSE, path, ## __VA_ARGS__)
290#define secfile_replace_enum(secfile, enumerator, specenum_type, path, ...) \
291 secfile_insert_enum_full(secfile, enumerator, specenum_type, nullptr, TRUE, \
292 path, ## __VA_ARGS__)
293#define secfile_replace_enum_comment(secfile, enumerator, specenum_type, \
294 comment, path, ...) \
295 secfile_insert_enum_full(secfile, enumerator, specenum_type, comment, \
296 TRUE, path, ## __VA_ARGS__)
298 const int *enumurators, size_t dim,
300 const char *comment,
301 bool allow_replace,
302 const char *path, ...)
305 const int *bitwise_vals,
306 size_t dim,
311 const char *comment,
312 bool allow_replace,
313 const char *path, ...)
315#define secfile_insert_enum_vec_full(secfile, enumerators, dim, \
316 specenum_type, comment, allow_replace, \
317 path, ...) \
318(specenum_type##_is_bitwise() \
319 ? secfile_insert_bitwise_enum_vec_full(secfile, (const int *) enumerators, \
320 dim, \
321 (secfile_enum_name_fn_t) \
322 specenum_type##_name, \
323 (secfile_enum_iter_fn_t) \
324 specenum_type##_begin, \
325 (secfile_enum_iter_fn_t) \
326 specenum_type##_end, \
327 (secfile_enum_next_fn_t) \
328 specenum_type##_next, \
329 comment, allow_replace, \
330 path, ## __VA_ARGS__) \
331 : secfile_insert_plain_enum_vec_full(secfile, (const int *) enumerators, \
332 dim, \
333 (secfile_enum_name_fn_t) \
334 specenum_type##_name, \
335 comment, allow_replace, \
336 path, ## __VA_ARGS__))
337#define secfile_insert_enum_vec(secfile, enumerators, dim, specenum_type, \
338 path, ...) \
339 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
340 nullptr, FALSE, path, ## __VA_ARGS__)
341#define secfile_insert_enum_vec_comment(secfile, enumerators, dim, \
342 specenum_type, comment, path, ...) \
343 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
344 comment, FALSE, path, ## __VA_ARGS__)
345#define secfile_replace_enum_vec(secfile, enumerators, dim, specenum_type, \
346 path, ...) \
347 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
348 nullptr, TRUE, path, ## __VA_ARGS__)
349#define secfile_replace_enum_vec_comment(secfile, enumerators, dim, \
350 specenum_type, comment, path, ...) \
351 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
352 comment, TRUE, path, ## __VA_ARGS__)
353
355 int value, bool bitwise,
357 secfile_data_t data,
358 const char *comment,
359 bool allow_replace,
360 const char *path, ...)
362#define secfile_insert_enum_data(secfile, value, bitwise, name_fn, data, \
363 path, ...) \
364 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
365 nullptr, FALSE, path, ## __VA_ARGS__)
366#define secfile_insert_enum_data_comment(secfile, value, bitwise, name_fn, \
367 data, path, ...) \
368 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
369 comment, FALSE, path, ## __VA_ARGS__)
370#define secfile_replace_enum_data(secfile, value, bitwise, name_fn, data, \
371 path, ...) \
372 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
373 nullptr, TRUE, path, ## __VA_ARGS__)
374#define secfile_replace_enum_data_comment(secfile, value, bitwise, name_fn, \
375 data, path, ...) \
376 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
377 comment, TRUE, path, ## __VA_ARGS__)
379 const int *values, size_t dim,
380 bool bitwise,
382 secfile_data_t data,
383 const char *comment,
384 bool allow_replace,
385 const char *path, ...)
387#define secfile_insert_enum_vec_data(secfile, values, dim, bitwise, \
388 name_fn, data, path, ...) \
389 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
390 data, nullptr, FALSE, path, ## __VA_ARGS__)
391#define secfile_insert_enum_vec_data_comment(secfile, values, dim, bitwise, \
392 name_fn, data, path, ...) \
393 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
394 data, comment, FALSE, path, \
395 ## __VA_ARGS__)
396#define secfile_replace_enum_vec_data(secfile, values, dim, bitwise, \
397 name_fn, data, path, ...) \
398 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
399 data, nullptr, TRUE, path, ## __VA_ARGS__)
400#define secfile_replace_enum_vec_data_comment(secfile, values, dim, \
401 bitwise, name_fn, data, path, \
402 ...) \
403 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
404 data, comment, TRUE, path, \
405 ## __VA_ARGS__)
406
408 const char *filename,
409 const char *path, ...)
411
413 const char *str,
414 const char *path, ...)
416
417/* Deletion function. */
419 const char *path, ...)
421
422/* Lookup functions. */
424 const char *path);
426 const char *path, ...)
428
429/* Macros to silence "unused entry" warnings about entries that
430 * we intentionally ignore. */
431#define secfile_entry_ignore(_sfile_, _fmt_, ...) \
432 (void) secfile_entry_lookup(_sfile_, _fmt_, ## __VA_ARGS__)
433#define secfile_entry_ignore_by_path(_sfile_, _path_) \
434 (void) secfile_entry_by_path(_sfile_, _path_)
435
436bool secfile_lookup_bool(const struct section_file *secfile, bool *bval,
437 const char *path, ...)
441 bool def, const char *path, ...)
445 size_t *dim, const char *path, ...)
448
450 const char *path, ...)
454 const char *path, ...)
458 int defval, int minval, int maxval,
459 const char *path, ...)
463 size_t *dim, const char *path, ...)
466
468 const char *path, ...)
472 float def, const char *path, ...);
473
475 const char *path, ...)
479 const char *def,
480 const char *path, ...)
484 size_t *dim, const char *path, ...)
486
488 int *penumerator,
491 const char *path, ...)
495 int *penumerator,
498 const char *path, ...)
501#define secfile_lookup_enum(secfile, enumerator, specenum_type, path, ...) \
502(specenum_type##_is_bitwise() \
503 ? secfile_lookup_bitwise_enum_full(secfile, FC_ENUM_PTR(enumerator), \
504 (secfile_enum_is_valid_fn_t) \
505 specenum_type##_is_valid, \
506 (secfile_enum_by_name_fn_t) \
507 specenum_type##_by_name, \
508 path, ## __VA_ARGS__) \
509 : secfile_lookup_plain_enum_full(secfile, FC_ENUM_PTR(enumerator), \
510 (secfile_enum_is_valid_fn_t) \
511 specenum_type##_is_valid, \
512 (secfile_enum_by_name_fn_t) \
513 specenum_type##_by_name, \
514 path, ## __VA_ARGS__))
516 *secfile, int defval,
521 const char *path, ...)
525 *secfile, int defval,
530 const char *path, ...)
533#define secfile_lookup_enum_default(secfile, defval, specenum_type, \
534 path, ...) \
535(specenum_type##_is_bitwise() \
536 ? secfile_lookup_bitwise_enum_default_full(secfile, defval, \
537 (secfile_enum_is_valid_fn_t) \
538 specenum_type##_is_valid, \
539 (secfile_enum_by_name_fn_t) \
540 specenum_type##_by_name, \
541 path, ## __VA_ARGS__) \
542 : secfile_lookup_plain_enum_default_full(secfile, defval, \
543 (secfile_enum_is_valid_fn_t) \
544 specenum_type##_is_valid, \
545 (secfile_enum_by_name_fn_t) \
546 specenum_type##_by_name, \
547 path, ## __VA_ARGS__))
549 size_t *dim,
554 const char *path, ...)
558 size_t *dim,
563 const char *path, ...)
566#define secfile_lookup_enum_vec(secfile, dim, specenum_type, \
567 path, ...) \
568(specenum_type##_is_bitwise() \
569 ? (enum specenum_type *) \
570 secfile_lookup_bitwise_enum_vec_full(secfile, dim, \
571 (secfile_enum_is_valid_fn_t) \
572 specenum_type##_is_valid, \
573 (secfile_enum_by_name_fn_t) \
574 specenum_type##_by_name, \
575 path, ## __VA_ARGS__) \
576 : (enum specenum_type *) \
577 secfile_lookup_plain_enum_vec_full(secfile, dim, \
578 (secfile_enum_is_valid_fn_t) \
579 specenum_type##_is_valid, \
580 (secfile_enum_by_name_fn_t) \
581 specenum_type##_by_name, \
582 path, ## __VA_ARGS__))
583
584bool secfile_lookup_enum_data(const struct section_file *secfile,
585 int *pvalue, bool bitwise,
587 secfile_data_t data, const char *path, ...)
591 int defval, bool bitwise,
593 secfile_data_t data,
594 const char *path, ...)
598 size_t *dim, bool bitwise,
600 secfile_data_t data, const char *path, ...)
603
604/* Sections functions. */
606 const char *section_name);
608 const char *path, ...)
614 const char *prefix);
616 const char *prefix);
618 const char *section_name);
619
620
621/* Independent section functions. */
624
626
627/* Entry functions. */
630 const char *entry_name);
632 const char *path, ...)
635 const char *entry_name,
636 int value);
638 const char *entry_name,
639 bool value);
641 const char *entry_name,
642 float value);
644 const char *entry_name,
645 const char *value, bool escaped);
646
647/* Independent entry functions. */
657
658void entry_destroy(struct entry *pentry);
659
660struct section *entry_section(const struct entry *pentry);
661enum entry_type entry_type_get(const struct entry *pentry);
662int entry_path(const struct entry *pentry, char *buf, size_t buf_len);
663
664const char *entry_name(const struct entry *pentry);
665bool entry_set_name(struct entry *pentry, const char *entry_name);
666
667const char *entry_comment(const struct entry *pentry);
668void entry_set_comment(struct entry *pentry, const char *comment);
669
670bool entry_int_get(const struct entry *pentry, int *value);
671bool entry_int_set(struct entry *pentry, int value);
672
673bool entry_bool_get(const struct entry *pentry, bool *value);
674bool entry_bool_set(struct entry *pentry, bool value);
675
676bool entry_float_get(const struct entry *pentry, float *value);
677bool entry_float_set(struct entry *pentry, float value);
678
679bool entry_str_get(const struct entry *pentry, const char **value);
680bool entry_str_set(struct entry *pentry, const char *value);
681bool entry_str_escaped(const struct entry *pentry);
682bool entry_str_set_escaped(struct entry *pentry, bool escaped);
683bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking);
684
685#ifdef __cplusplus
686}
687#endif /* __cplusplus */
688
689#endif /* FC__REGISTRY_INI_H */
#define str
Definition astring.c:76
char * incite_cost
Definition comments.c:76
const char * enum_name
Definition events.c:76
fz_method
Definition ioz.h:37
const char * section_name(const struct section *psection)
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__
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__
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__
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__
void entry_set_comment(struct entry *pentry, const char *comment)
bool entry_bool_get(const struct entry *pentry, bool *value)
void section_destroy(struct section *psection)
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__
void secfile_check_unused(const struct section_file *secfile)
int entry_path(const struct entry *pentry, char *buf, size_t buf_len)
struct section * secfile_insert_long_comment(struct section_file *secfile, const char *comment)
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__
int(* secfile_enum_iter_fn_t)(void)
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__
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__
struct entry struct entry * secfile_insert_comment(struct section_file *secfile, const char *str, const char *path,...) fc__attribute((__format__(__printf__
const char *(* secfile_enum_name_data_fn_t)(secfile_data_t data, int enumerator)
entry_type
@ ENTRY_FILEREFERENCE
@ ENTRY_LONG_COMMENT
@ ENTRY_INT
@ ENTRY_FLOAT
@ ENTRY_STR
@ ENTRY_ILLEGAL
@ ENTRY_BOOL
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__
bool entry_str_escaped(const struct entry *pentry)
bool bool bool bool int int int bool float secfile_lookup_float_default(const struct section_file *secfile, float def, const char *path,...)
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__
struct section * entry_section(const struct entry *pentry)
struct entry * secfile_entry_lookup(const struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
struct section_list * secfile_sections_by_name_prefix(const struct section_file *secfile, const char *prefix)
const struct entry_list * section_entries(const struct section *psection)
struct entry struct entry bool secfile_entry_delete(struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
struct section_file * secfile_load_section(const char *filename, const char *section, bool allow_duplicates)
bool entry_bool_set(struct entry *pentry, bool value)
struct section_file * secfile_from_stream(fz_FILE *stream, bool allow_duplicates)
struct entry * secfile_insert_filereference(struct section_file *secfile, const char *filename, const char *path,...) fc__attribute((__format__(__printf__
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__
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__
bool entry_float_get(const struct entry *pentry, float *value)
bool entry_str_set_escaped(struct entry *pentry, bool escaped)
struct entry struct entry bool struct entry * secfile_entry_by_path(const struct section_file *secfile, const char *path)
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__
const char * entry_name(const struct entry *pentry)
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__
struct entry * section_entry_float_new(struct section *psection, const char *entry_name, float value)
bool entry_str_get(const struct entry *pentry, const char **value)
bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking)
bool(* secfile_enum_is_valid_fn_t)(int enumerator)
void entry_destroy(struct entry *pentry)
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__
bool int int struct section * secfile_section_by_name(const struct section_file *secfile, const char *section_name)
void section_clear_all(struct section *psection)
bool entry_float_set(struct entry *pentry, float value)
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__
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__
bool secfile_save(const struct section_file *secfile, const char *filename, int compression_level, enum fz_method compression_method)
struct section * secfile_insert_include(struct section_file *secfile, const char *filename)
bool entry_int_set(struct entry *pentry, int value)
entry_special_type
@ EST_COMMENT
@ EST_NORMAL
@ EST_INCLUDE
const char *(* secfile_enum_name_fn_t)(int enumerator)
const char * secfile_lookup_str(const struct section_file *secfile, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct section * secfile_section_lookup(const struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
bool bool secfile_lookup_bool_default(const struct section_file *secfile, bool def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool secfile_lookup_bool(const struct section_file *secfile, bool *bval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct entry * section_entry_str_new(struct section *psection, const char *entry_name, const char *value, bool escaped)
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__
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__
bool entry_int_get(const struct entry *pentry, int *value)
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__
bool entry_set_name(struct entry *pentry, const char *entry_name)
struct entry struct entry * section_entry_int_new(struct section *psection, const char *entry_name, int value)
const char * secfile_name(const struct section_file *secfile)
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__
const char * entry_comment(const struct entry *pentry)
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__
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__
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__
struct entry * section_entry_by_name(const struct section *psection, const char *entry_name)
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__
bool secfile_section_prefix_present(const struct section_file *secfile, const char *prefix)
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__
struct entry * section_entry_lookup(const struct section *psection, const char *path,...) fc__attribute((__format__(__printf__
struct section * secfile_section_new(struct section_file *secfile, const char *section_name)
bool entry_str_set(struct entry *pentry, const char *value)
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__
int(* secfile_enum_by_name_fn_t)(const char *enum_name, int(*strcmp_fn)(const char *, const char *))
struct entry * section_entry_bool_new(struct section *psection, const char *entry_name, bool value)
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, bool gt_marking, const char *path,...) fc__attribute((__format__(__printf__
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__
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__
bool section_set_name(struct section *psection, const char *section_name)
int(* secfile_enum_next_fn_t)(int enumerator)
struct section const struct section_list * secfile_sections(const struct section_file *secfile)
const void * secfile_data_t
enum entry_type entry_type_get(const struct entry *pentry)
bool gt_marking
struct section * psection
bool escaped
bool value
char * comment
bool allow_duplicates
struct section_file * secfile
#define fc__attribute(x)
Definition support.h:99
#define fc__warn_unused_result
Definition support.h:109
#define bool
Definition support.h:71