Mercurial > code
annotate ini.c @ 167:1167cd06b475
Use stdint.h values
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 25 Oct 2012 12:57:58 +0200 |
parents | 2563b3e71859 |
children |
rev | line source |
---|---|
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
76
diff
changeset
|
2 * ini.c -- parse .ini like files |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
97 | 4 * Copyright (c) 2011, 2012, David Demelier <markand@malikania.fr> |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <stdio.h> |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdlib.h> |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <stdarg.h> |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <string.h> |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <ctype.h> |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <errno.h> |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
79
fd817a7dbf2f
Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents:
76
diff
changeset
|
26 #include "ini.h" |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
28 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
29 * 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
|
30 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
31 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
32 #if !defined(TAILQ_FIRST) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
33 #define TAILQ_FIRST(head) ((head)->tqh_first) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
34 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
35 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
36 #if !defined(TAILQ_FOREACH) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
37 #define TAILQ_FOREACH(var, head, field) \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
38 for ((var) = TAILQ_FIRST((head)); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
39 (var); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
40 (var) = TAILQ_NEXT((var), field)) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
41 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
42 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
43 #if !defined(TAILQ_FOREACH_SAFE) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
44 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
45 for ((var) = TAILQ_FIRST((head)); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
46 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
47 (var) = (tvar)) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
48 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
49 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
50 #if !defined(TAILQ_INIT) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
51 #define TAILQ_INIT(head) do { \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
52 TAILQ_FIRST((head)) = NULL; \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
53 (head)->tqh_last = &TAILQ_FIRST((head)); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
54 } while (0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
55 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
56 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
57 #if !defined(TAILQ_INSERT_TAIL) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
58 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
59 TAILQ_NEXT((elm), field) = NULL; \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
60 (elm)->field.tqe_prev = (head)->tqh_last; \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
61 *(head)->tqh_last = (elm); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
62 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
63 } while (0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
64 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
65 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
66 #if !defined(TAILQ_NEXT) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
67 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
68 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
69 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
70 #if !defined(TAILQ_REMOVE) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
71 #define TAILQ_REMOVE(head, elm, field) do { \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
72 if ((TAILQ_NEXT((elm), field)) != NULL) \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
73 TAILQ_NEXT((elm), field)->field.tqe_prev = \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
74 (elm)->field.tqe_prev; \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
75 else { \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
76 (head)->tqh_last = (elm)->field.tqe_prev; \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
77 } \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
78 *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
79 } while (0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
80 #endif |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
81 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
82 /* -------------------------------------------------------- |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
83 * Structure definitions |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
84 * -------------------------------------------------------- */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
85 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
86 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
|
87 struct ini_section *current; /* current working section */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
88 int ignore; /* must ignore (no redefine) */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
89 FILE *fp; /* file pointer to read */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
90 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
91 /* Line buffer */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
92 char *line; /* line data */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
93 int linesize; /* line allocated size */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
94 int lineno; /* number of line in file */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
95 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
96 /* Error reporting */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
97 char error[1024]; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
98 }; |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
100 /* -------------------------------------------------------- |
105
eac1f370910a
English review (thanks afranke@)
David Demelier <markand@malikania.fr>
parents:
100
diff
changeset
|
101 * Prototypes |
96
dcaf2c61c902
Big change in ini, much cleaner and simpler
David Demelier <markand@malikania.fr>
parents:
90
diff
changeset
|
102 * -------------------------------------------------------- */ |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
104 #define F_VERBOSE(cg) ((cg)->flags & INI_VERBOSE) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
105 #define F_NOREDEFINE(cg) ((cg)->flags & INI_NOREDEFINE) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
106 #define F_FAILERROR(cg) ((cg)->flags & INI_FAILERROR) |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 static char * |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
109 sstrndup(const char *src, size_t max) |
71
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 { |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 char *res; |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 size_t length; |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 for (length = 0; length < max && src[length] != '\0'; ++length) |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 continue; |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 if ((res = malloc(length + 1)) == NULL) |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 return NULL; |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 memcpy(res, src, length); |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 res[length] = '\0'; |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 return res; |
6981419d48c1
Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 } |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
125 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
126 static void |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
127 sskip(char **lp) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
128 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
129 while (isspace (**lp) && **lp != '\0') |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
130 ++(*lp); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
131 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
132 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
133 static void |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
134 sseek(char **lp) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
135 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
136 while (!isspace(**lp) && **lp != '\0') |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
137 ++(*lp); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
138 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
139 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
140 static void |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
141 ini_set_error(struct ini_config *cg, const char *fmt, ...) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
142 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
143 va_list ap; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
144 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
145 va_start(ap, fmt); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
146 if (cg->pv->error) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
147 vsnprintf(cg->pv->error, sizeof (cg->pv->error), fmt, ap); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
148 va_end(ap); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
149 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
150 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
151 static void |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
152 ini_warn(struct ini_config *cg, const char *fmt, ...) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
153 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
154 va_list ap; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
155 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
156 va_start(ap, fmt); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
157 if (F_VERBOSE(cg)) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
158 vprintf(fmt, ap); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
159 fputc('\n', stdout); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
160 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
161 |
145 | 162 if (F_FAILERROR(cg)) { |
163 va_start(ap, fmt); | |
164 vsnprintf(cg->pv->error, sizeof (cg->pv->error), fmt, ap); | |
165 va_end(ap); | |
166 } | |
167 | |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
168 va_end(ap); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
169 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
170 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
171 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
172 * Add a new section, this function only returns -1 on fatal error that may |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
173 * be impossible to continue parsing for the current line. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
174 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
175 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
176 static int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
177 ini_add_section(struct ini_config *cg, char **lp) |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
178 { |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
179 char *begin = *lp, *end; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
180 size_t length; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
181 struct ini_section *section = NULL; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
182 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
183 if (!(end = strchr(begin, ']'))) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
184 ini_warn(cg, "line %d: syntax error after [", cg->pv->lineno); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
185 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
186 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
187 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
188 length = end - begin; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
189 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
190 /* May not redefine? */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
191 if (cg->pv->current && F_NOREDEFINE(cg)) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
192 if (strncmp(cg->pv->current->key, begin, length) == 0) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
193 ini_warn(cg, "line %d: redefining %s", cg->pv->lineno, |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
194 cg->pv->current->key); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
195 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
196 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
197 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
198 /* Allocate a new section and add it */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
199 if (!(section = calloc(1, sizeof (*section)))) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
200 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
201 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
202 if (!(section->key = sstrndup(begin, length))) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
203 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
204 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
205 TAILQ_INIT(§ion->options); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
206 TAILQ_INSERT_TAIL(&cg->sections, section, link); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
207 cg->pv->current = section; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
208 cg->pv->ignore = 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
209 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
210 /* Trigger an event for the new section */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
211 if (cg->open) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
212 cg->open(cg->data, section->key); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
213 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
214 *lp = &end[1]; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
215 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
216 return 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
217 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
218 bad: if (section) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
219 free(section->key); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
220 free(section); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
221 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
222 cg->pv->ignore = 1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
223 *lp = strchr(*lp, '\0'); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
224 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
225 return F_FAILERROR(cg) ? -1 : 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
226 } |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
227 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
228 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
229 * Add a new option, the returns value is same as ini_add_section. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
230 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
231 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
232 static int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
233 ini_add_option(struct ini_config *cg, char **lp) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
234 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
235 char *begin = *lp, *equal, *end; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
236 struct ini_option *option = NULL; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
237 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
238 if (!cg->pv->current) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
239 ini_warn(cg, "line %d: option within no section", cg->pv->lineno); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
240 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
241 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
242 |
146 | 243 if (cg->pv->ignore || |
244 !(option = calloc(1, sizeof (*option)))) | |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
245 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
246 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
247 /* Not valid */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
248 if (!(equal = strchr(begin, '='))) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
249 ini_warn(cg, "line %d: missing =", cg->pv->lineno); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
250 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
251 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
252 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
253 /* End of option */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
254 end = begin; |
146 | 255 sskip(&end); |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
256 sseek(&end); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
257 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
258 option->key = sstrndup(begin, end - begin); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
259 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
260 /* End of value */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
261 begin = &equal[1]; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
262 sskip(&begin); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
263 end = begin; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
264 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
265 if (*end == '\'' || *end == '"') { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
266 for (++end; *end != *begin && *end != '\0'; ++end) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
267 continue; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
268 if (*end != *begin) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
269 ini_warn(cg, "line %d: missing %c", |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
270 cg->pv->lineno, *begin); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
271 *lp = end; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
272 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
273 } else |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
274 ++ begin; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
275 } else |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
276 sseek(&end); |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
277 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
278 option->value = sstrndup(begin, end - begin); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
279 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
280 if (!option->key || !option->value) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
281 ini_warn(cg, "line %d: syntax error", cg->pv->lineno); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
282 goto bad; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
283 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
284 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
285 TAILQ_INSERT_TAIL(&cg->pv->current->options, option, link); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
286 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
287 /* Trigger an event for the new section */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
288 if (cg->get) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
289 cg->get(cg->data, cg->pv->current->key, option); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
290 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
291 *lp = &end[1]; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
292 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
293 return 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
294 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
295 bad: if (option) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
296 free(option->key); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
297 free(option->value); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
298 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
299 free(option); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
300 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
301 *lp = strchr(*lp, '\0'); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
302 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
303 return F_FAILERROR(cg) ? -1 : 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
304 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
305 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
306 static int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
307 ini_read_line(struct ini_config *cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
308 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
309 char *lp = cg->pv->line; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
310 int rv; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
311 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
312 /* Ignore empty line */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
313 if (*lp == '\0' || *lp == '#' || *lp == ';') |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
314 return 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
315 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
316 while (*lp != '\0') { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
317 sskip(&lp); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
318 |
146 | 319 if (*lp == '\0' || *lp == '#' || *lp == ';') |
320 return 0; | |
321 | |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
322 /* Begin of section */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
323 if (*lp == '[') { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
324 ++ lp; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
325 rv = ini_add_section(cg, &lp); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
326 /* Begin of option */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
327 } else { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
328 rv = ini_add_option(cg, &lp); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
329 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
330 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
331 if (rv < 0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
332 return -1; |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
333 } |
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
334 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
335 return 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
336 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
337 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
338 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
339 * Read the next line until the next '\n' character is found. Returns 0 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
340 * if the system had enough memory or -1 on allocation failure or on |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
341 * end of file. Only for mode == INI_LINEAR |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
342 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
343 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
344 static int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
345 ini_get_line(struct ini_config *cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
346 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
347 int ch, pos; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
348 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
349 memset(cg->pv->line, 0, cg->pv->linesize); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
350 pos = 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
351 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
352 while ((ch = fgetc(cg->pv->fp)) != '\n') { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
353 if (feof(cg->pv->fp) || ferror(cg->pv->fp)) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
354 return -1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
355 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
356 /* End of buffer, realloc */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
357 if (pos == cg->pv->linesize) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
358 cg->pv->line = realloc(cg->pv->line, cg->pv->linesize + 512); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
359 if (!cg->pv->line) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
360 return -1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
361 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
362 cg->pv->linesize += 512; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
363 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
364 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
365 cg->pv->line[pos++] = ch; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
366 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
367 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
368 return 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
369 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
370 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
371 static int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
372 ini_open_file(struct ini_config *cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
373 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
374 if (!(cg->pv->fp = fopen(cg->path, "r"))) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
375 ini_set_error(cg, "open: %s", cg->path); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
376 return -1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
377 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
378 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
379 cg->pv->linesize = 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
|
380 cg->pv->line = calloc(sizeof (char), cg->pv->linesize); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
381 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
382 if (!cg->pv->line) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
383 ini_set_error(cg, "malloc: %s", strerror(errno)); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
384 return -1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
385 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
386 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
387 return 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
388 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
389 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
390 /* -------------------------------------------------------- |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
391 * Public functions |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
392 * -------------------------------------------------------- */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
393 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
394 struct ini_config * |
149 | 395 ini_create(const char *path, enum ini_flags flags) |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
396 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
397 struct ini_config *cg; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
398 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
399 cg = calloc(1, sizeof (*cg)); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
400 if (!cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
401 return NULL; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
402 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
403 cg->pv = calloc(1, sizeof (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
|
404 if (!cg->pv) |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
405 return NULL; |
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
406 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
407 cg->path = path; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
408 cg->flags = flags; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
409 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
410 return cg; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
411 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
412 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
413 void |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
414 ini_set_handlers(struct ini_config *cg, void *data, ini_open_t open, |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
415 ini_get_t get) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
416 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
417 if (!cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
418 return; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
419 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
420 cg->data = data; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
421 cg->open = open; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
422 cg->get = get; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
423 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
424 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
425 int |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
426 ini_open(struct ini_config *cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
427 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
428 int rv = 0; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
429 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
430 /* Open the file and prepare data for reading */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
431 if (ini_open_file(cg) < 0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
432 return -1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
433 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
434 cg->pv->ignore = 1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
435 cg->pv->lineno = 1; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
436 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
437 TAILQ_INIT(&cg->sections); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
438 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
439 while (ini_get_line(cg) != -1 && !rv) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
440 rv = ini_read_line(cg); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
441 ++ cg->pv->lineno; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
442 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
443 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
444 fclose(cg->pv->fp); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
445 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
446 return rv; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
447 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
448 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
449 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
450 * Search the section `sectname' in the config structure. If the section |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
451 * is not found, this function returns NULL. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
452 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
453 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
454 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
|
455 ini_select_section(const struct ini_config *cg, const char *sectname) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
456 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
457 struct ini_section *s; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
458 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
459 TAILQ_FOREACH(s, &cg->sections, link) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
460 if (strcmp(s->key, sectname) == 0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
461 return s; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
462 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
463 return NULL; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
464 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
465 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
466 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
467 * Search the option `optname' in the section structure, argument |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
468 * section mustn't be NULL. If the option is not found, this function |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
469 * returns NULL. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
470 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
471 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
472 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
|
473 ini_select_option(const struct ini_section *sc, const char *name) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
474 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
475 struct ini_option *o; |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
476 |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
477 TAILQ_FOREACH(o, &sc->options, link) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
478 if (strcmp(o->key, name) == 0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
479 return o; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
480 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
481 return NULL; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
482 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
483 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
484 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
485 * Find an option from the config, by section and option names. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
486 * Returns the option or NULL if not found. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
487 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
488 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
489 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
|
490 ini_find(const struct ini_config *cg, const char *scname, const char *optname) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
491 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
492 struct ini_section *sc; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
493 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
494 if ((sc = ini_select_section(cg, scname))) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
495 return ini_select_option(sc, optname); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
496 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
497 return NULL; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
498 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
499 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
500 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
501 * Return the last error or "No error" if there is no error. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
502 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
503 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
504 const char * |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
505 ini_get_error(const struct ini_config *cg) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
506 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
507 if (!cg && errno != 0) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
508 return strerror(errno); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
509 |
145 | 510 if (cg->pv->error[0] == '\0') { |
511 if (errno != 0) | |
512 return strerror(errno); | |
513 | |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
514 return "No error"; |
145 | 515 } |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
516 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
517 return cg->pv->error; |
72
262c053206f6
Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents:
71
diff
changeset
|
518 } |
139
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
519 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
520 /* |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
521 * Free everything, level may be set like this: |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
522 * 0, only free parser and private resources. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
523 * 1, free all sections and their keys, |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
524 * 2, free all sections and options keys and values. |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
525 */ |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
526 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
527 void |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
528 ini_free(struct ini_config *cg, int level) |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
529 { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
530 struct ini_section *s, *stmp; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
531 struct ini_option *o, *otmp; |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
532 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
533 if (level >= 1) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
534 TAILQ_FOREACH_SAFE(s, &cg->sections, link, stmp) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
535 if (level >= 2) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
536 TAILQ_FOREACH_SAFE(o, &s->options, link, otmp) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
537 TAILQ_REMOVE(&s->options, o, link); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
538 free(o->key); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
539 free(o->value); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
540 free(o); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
541 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
542 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
543 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
544 TAILQ_REMOVE(&cg->sections, s, link); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
545 free(s->key); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
546 free(s); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
547 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
548 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
549 |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
550 if (level >= 0) { |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
551 free(cg->pv->line); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
552 free(cg->pv); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
553 free(cg); |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
554 } |
d62f2f657768
Introducing new ini API, some changes and use sys/queue.h instead
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
555 } |