Mercurial > code
annotate ini.h @ 159:94847374833b
Fix array.c for _clear
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 23 Jul 2012 15:56:16 +0200 |
parents | 2563b3e71859 |
children |
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 * |
97 | 4 * Copyright (c) 2011, 2012, David Demelier <markand@malikania.fr> |
79
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 |
135
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
22 #ifdef __cplusplus |
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
23 extern "C" { |
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
24 #endif |
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
25 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
26 #if !defined(INI_DEFAULT_LINESIZE) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
27 # define INI_DEFAULT_LINESIZE 1024 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
28 #endif |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
30 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
31 * sys/queue.h bits. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
32 */ |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
33 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
34 #if !defined(TAILQ_ENTRY) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
35 #define TAILQ_ENTRY(type) \ |
142
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
36 struct { \ |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
37 struct type *tqe_next; /* next element */ \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
38 struct type **tqe_prev; /* address of previous next element */ \ |
142
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
39 } |
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
40 #endif |
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
41 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
42 #if !defined(TAILQ_HEAD) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
43 #define TAILQ_HEAD(name, type) \ |
142
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
44 struct name { \ |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
45 struct type *tqh_first; /* first element */ \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
46 struct type **tqh_last; /* addr of last next element */ \ |
142
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
47 } |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
48 #endif |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
49 |
149 | 50 enum ini_flags { |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
51 INI_VERBOSE = (1 << 0), /* be verbose */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
52 INI_NOREDEFINE = (1 << 1), /* do not allow redefinitions */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
53 INI_FAILERROR = (1 << 2) /* abort parsing on first error */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
54 }; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
55 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
56 typedef struct ini_config ini_config_t; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
57 typedef struct ini_section ini_section_t; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
58 typedef struct ini_option ini_option_t; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
59 typedef struct ini_handler ini_handler_t; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
60 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
61 typedef void (*ini_open_t)(void *, const char *); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
62 typedef void (*ini_get_t)(void *, const char *, const ini_option_t *); |
142
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
63 |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
64 /* -------------------------------------------------------- |
105
eac1f370910a
English review (thanks afranke@)
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
65 * Structure definitions |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
66 * -------------------------------------------------------- */ |
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
67 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
68 struct ini_private; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
69 |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
70 struct ini_config { |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
71 const char *path; /* (ro) file path */ |
149 | 72 enum ini_flags flags; /* (ro) optional flags */ |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
73 void *data; /* (rw) user data */ |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
74 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
75 TAILQ_HEAD(, ini_section) sections; /* (ro) linked-list of sections */ |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
76 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
77 /* Event driven method */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
78 void (*open)(void *, const char *); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
79 void (*get)(void *, const char *, const struct ini_option *); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
80 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
81 /* Private data */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
82 struct ini_private *pv; |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
83 }; |
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
84 |
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
85 struct ini_option { |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
86 char *key; /* (rw) option name */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
87 char *value; /* (rw) option value */ |
142
e3cf5ac9a5aa
[p]array_insert now returns -1 or index of added element
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
88 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
89 TAILQ_ENTRY(ini_option) link; |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
90 }; |
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
91 |
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
92 struct ini_section { |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
93 char *key; /* (rw) section key */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
94 TAILQ_HEAD(, ini_option) options; /* (rw) list of options */ |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
96 TAILQ_ENTRY(ini_section) link; |
82
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 |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 /* -------------------------------------------------------- |
105
eac1f370910a
English review (thanks afranke@)
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
100 * Main functions |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 * -------------------------------------------------------- */ |
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
103 struct ini_config * |
149 | 104 ini_create(const char *, enum ini_flags); |
82
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 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
107 ini_set_handlers(struct ini_config *, void *, ini_open_t, ini_get_t); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
108 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
109 int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
110 ini_open(struct ini_config *); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
111 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
112 struct ini_section * |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
113 ini_select_section(const struct ini_config *, const char *); |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
114 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
115 struct ini_option * |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
116 ini_select_option(const struct ini_section *, const char *); |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
117 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
118 struct ini_option * |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
119 ini_find(const struct ini_config *, const char *, const char *); |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
120 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
121 const char * |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
122 ini_get_error(const struct ini_config *); |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
123 |
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
124 void |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
125 ini_free(struct ini_config *, int); |
82
c8bbdbedcf07
Added a little convenient API for ini
David Demelier <markand@malikania.fr>
parents:
81
diff
changeset
|
126 |
135
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
127 #ifdef __cplusplus |
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
128 } |
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
129 #endif |
07800b7af208
Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
130 |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 #endif /* _INI_H_ */ |