annotate ini.h @ 144:594ca7f7139b

Remove useless #endif
author David Demelier <markand@malikania.fr>
date Fri, 11 May 2012 00:12:08 +0200
parents 0cf53c588a83
children 2563b3e71859
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
0321fc3c0972 Update license
David Demelier <markand@malikania.fr>
parents: 96
diff changeset
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
139
d62f2f657768 Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents: 135
diff changeset
50 enum {
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 */
d62f2f657768 Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents: 135
diff changeset
72 int flags; /* (ro) optional flags */
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 *
d62f2f657768 Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents: 135
diff changeset
104 ini_create(const char *, int);
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_ */