Mercurial > code
annotate ini.h @ 82:c8bbdbedcf07
Added a little convenient API for ini
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 16 Nov 2011 21:28:35 +0100 |
parents | f42bcb9e7b4a |
children | d27a6fd446ea |
rev | line source |
---|---|
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * ini.h -- parse .ini like files |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2011, David Demelier <markand@malikania.fr> |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef _INI_H_ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define _INI_H_ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #define INI_VERBOSE (1 << 0) /* be verbose */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #define INI_NOREDEFINE (1 << 1) /* do not allow redefinitions */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #define INI_FAILERROR (1 << 2) /* abort parsing on first error */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 struct ini_config; |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 struct ini_section; |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
29 struct ini_handler { |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
30 const char *section; /* section to query */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
31 const char *option; /* option to check */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
32 void *dst; /* where to store */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
33 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
34 /* Conversion function */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
35 void (*handler)(void *, const char *, void *); |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
36 void *userdata; /* optional user data */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
37 }; |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
38 |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 /* -------------------------------------------------------- |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 * struct ini_config functions. |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 * -------------------------------------------------------- */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 struct ini_config * |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 ini_load(const char *, int); |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 char ** |
81
f42bcb9e7b4a
Add const and little security fix with *nb pointer
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
47 ini_get_sections_names(const struct ini_config *, int *); |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 struct ini_section ** |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 ini_get_sections(const struct ini_config *, const char *, int *); |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 struct ini_section * |
81
f42bcb9e7b4a
Add const and little security fix with *nb pointer
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
53 ini_select_section(const struct ini_config *, const char *); |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 char * |
81
f42bcb9e7b4a
Add const and little security fix with *nb pointer
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
56 ini_get_option_once(const struct ini_config *, const char *, const char *); |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 void |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 ini_free(struct ini_config *, int, int); |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 char * |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 ini_error(void); |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 /* -------------------------------------------------------- |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * struct ini_section functions. |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * -------------------------------------------------------- */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 char ** |
81
f42bcb9e7b4a
Add const and little security fix with *nb pointer
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
69 ini_get_option_names(const struct ini_section *, int *); |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 char * |
81
f42bcb9e7b4a
Add const and little security fix with *nb pointer
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
72 ini_get_option(const struct ini_section *, const char *key); |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
74 /* -------------------------------------------------------- |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
75 * convenient api to query and convert data |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
76 * -------------------------------------------------------- */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
77 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
78 /* |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
79 * For the config, read all available value and store them in |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
80 * the array ini_handler. |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
81 */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
82 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
83 void |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
84 ini_value_dispatch(struct ini_config *, struct ini_handler *, int); |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
85 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
86 /* |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
87 * Convert to bool. dst must be (char *). |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
88 * It converts "yes" "true" "1" or opposites. Only lower |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
89 * case is supported right now. |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
90 */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
91 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
92 void |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
93 ini_convert_bool(void *, const char *, void *); |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
94 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
95 /* |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
96 * Convert to a int. dst must be (int *). |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
97 */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
98 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
99 void |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
100 ini_convert_int(void *, const char *, void *); |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
101 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
102 /* |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
103 * Convert to a short. dst must be (short *). |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
104 */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
105 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
106 void |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
107 ini_convert_short(void *, const char *, void *); |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
108 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
109 /* |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
110 * Convert to a char *. dst must be (char **). This |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
111 * function use strdup() you need to free the dst |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
112 * pointer. |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
113 */ |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
114 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
115 void |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
116 ini_convert_string(void *, const char *, void *); |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
117 |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 #endif /* _INI_H_ */ |