annotate ini.c @ 79:fd817a7dbf2f

Switched a lot of things in ini
author David Demelier <markand@malikania.fr>
date Tue, 15 Nov 2011 20:12:48 +0100
parents inifile.c@4c5f69f5f409
children f42bcb9e7b4a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 *
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2011, David Demelier <markand@malikania.fr>
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 <sys/queue.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdlib.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <stdarg.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <string.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <ctype.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <errno.h>
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
27 #include "ini.h"
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 /* --------------------------------------------------------
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * structure definitions
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 * -------------------------------------------------------- */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
33 struct ini_option {
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 char *key; /* option name */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 char *value; /* option value */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
36 STAILQ_ENTRY(ini_option) next;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 };
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
39 struct ini_section {
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 char *key; /* section key */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
41 STAILQ_HEAD(, ini_option) options;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
42 STAILQ_ENTRY(ini_section) next;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 };
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
45 struct ini_config {
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 const char *path; /* file path */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
47 int flags; /* optional flags */
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
48 int ignore; /* must ignore (no redefine) */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
49
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
50 /* Current section in file */
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
51 struct ini_section *current;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
52
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
53 /* Current file line properties */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
54 char *line; /* line buffer */
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 int lineno; /* number of line */
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
56 int linesize; /* initial line size */
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 /* For querying functions */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
59 STAILQ_HEAD(, ini_section) sections;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 };
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
62 static char iniError[1024 + 1];
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 /* --------------------------------------------------------
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * prototypes
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 * -------------------------------------------------------- */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
68 static void *ini_read(struct ini_config *, FILE *);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
69 static int ini_getline(struct ini_config *, FILE *);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
70 static void *ini_readline(struct ini_config *);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
71 static int ini_switch(struct ini_config *, char **);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
72 static int ini_register(struct ini_config *, char **);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
73 static void *ini_fatal(struct ini_config *, FILE *, const char *, ...);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 static char *xstrndup(const char *, size_t);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
75 static struct ini_option *xoptiondup(const struct ini_option *option);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
77 #define I_VERBOSE(file) ((file)->flags & INI_VERBOSE)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
78 #define I_NOREDEFINE(file) ((file)->flags & INI_NOREDEFINE)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
79 #define I_FAILERROR(file) ((file)->flags & INI_FAILERROR)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
80
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
81 #define SKIP_SPACES(lp) while (isspace(*lp) && *lp != '\0') ++lp
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 #define WARN(file, fmt, ...) \
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 if (I_VERBOSE((file))) \
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 fprintf(stderr, fmt, __VA_ARGS__)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 /* --------------------------------------------------------
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 * public functions
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * -------------------------------------------------------- */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
89
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
90 struct ini_config *
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
91 ini_load(const char *path, int flags)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 {
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 FILE *fp;
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
94 struct ini_config *conf;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
95
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
96 if ((conf = calloc(1, sizeof (struct ini_config))) == NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
97 return ini_fatal(conf, fp, "%s", strerror(errno));
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 if ((fp = fopen(path, "r")) == NULL)
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
100 return ini_fatal(conf, fp, "%s: %s", path, strerror(errno));
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
102 if ((conf->line = calloc(1024 + 1, 1)) == NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
103 return ini_fatal(conf, fp, "%s", strerror(errno));
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
105 STAILQ_INIT(&conf->sections);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
106 conf->path = path;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
107 conf->flags = flags;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
108 conf->ignore = 1;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
109 conf->lineno = 1;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
110 conf->linesize = 1024;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
112 return ini_read(conf, fp);
71
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
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 /*
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
116 * Returns a NULL terminated list of section names. If parameter
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 * number is not NULL, number is set to the total number of
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 * section correctly parsed.
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
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 char **
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
122 ini_get_sections_names(struct ini_config *conf, int *number)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
124 struct ini_section *s;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 char **list;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 int i;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 i = 0;
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
129 STAILQ_FOREACH(s, &conf->sections, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
130 ++ i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
131
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
132 if ((list = calloc(i + 1, sizeof (char *))) == NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
133 return NULL;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
134
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 if (number != NULL)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 *number = i;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
138 i = 0;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
139 STAILQ_FOREACH(s, &conf->sections, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
140 list[i++] = s->key;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
141
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
142 return list;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
143 }
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
144
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
145 /*
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
146 * Returns a NULL terminated list of struct ini_section that could be used
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
147 * with ini_get_option(). This function makes sense only when the config
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
148 * has multiple definition enabled.
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
149 */
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
150
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
151 struct ini_section **
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
152 ini_get_sections(const struct ini_config *conf, const char *key, int *nb)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
153 {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
154 struct ini_section **list;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
155 struct ini_section *s;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
156 int i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
157
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
158 /* Do not use this function on simple config */
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
159 if (I_NOREDEFINE(conf)) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
160 errno = EINVAL;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
161 return NULL;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
162 }
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
163
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
164 i = 0;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
165 STAILQ_FOREACH(s, &conf->sections, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
166 if (strcmp(s->key, key) == 0)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
167 ++ i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
168
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
169 if ((list = calloc(i + 1, sizeof (struct ini_section *))) == NULL)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 return NULL;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
171
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
172 if (nb != NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
173 *nb = i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
174
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 i = 0;
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
176 STAILQ_FOREACH(s, &conf->sections, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
177 if (strcmp(s->key, key) == 0)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
178 list[i++] = s;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
179
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 return list;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 /*
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 * Select the section for further query. This improves performance as it does
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
185 * not need to seek each time the section. It can't be used when multiple
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
186 * definition is enabled because it seek from the beginning, you should use
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
187 * ini_get_sections() and then ini_get_option() for each section.
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
190 struct ini_section *
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
191 ini_select_section(struct ini_config *conf, const char *section)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
193 struct ini_section *s;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
195 STAILQ_FOREACH(s, &conf->sections, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
196 if (strcmp(s->key, section) == 0)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
197 return s;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 return NULL;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
201
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 /*
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
203 * Wrapper for a simpler usage of ini_select and ini_option. This
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 * does not modify the selector so you can safely continue the
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
205 * call to ini_option independantly. Warning, this function returns the
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 * first occurence of the option so it is not advised to use it
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 char *
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
210 ini_option_once(struct ini_config *conf, const char *sect, const char *key)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
212 struct ini_option *o;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
213 struct ini_section *s;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
214
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
215 STAILQ_FOREACH(s, &conf->sections, next)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 if (strcmp(s->key, sect) == 0)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 break;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
218
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 STAILQ_FOREACH(o, &s->options, next)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 if (strcmp(o->key, key) == 0)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 return o->value;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
222
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 return NULL;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
225
73
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
226 /*
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
227 * Return a NULL list of all available options in the section.
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
228 */
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
229
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
230 char **
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
231 ini_get_option_names(struct ini_section *section, int *nb)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
232 {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
233 char **list;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
234 struct ini_option *o;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
235 int i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
236
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
237 i = 0;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
238 STAILQ_FOREACH(o, &section->options, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
239 ++ i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
240
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
241 if ((list = calloc(i + 1, sizeof (char *))) == NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
242 return NULL;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
243
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
244 if (nb != NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
245 *nb = i;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
246
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
247 i = 0;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
248 STAILQ_FOREACH(o, &section->options, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
249 list[i++] = o->key;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
250
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
251 return list;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
252 }
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
253
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
254 /*
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
255 * Get the option in the current selected option. Note, you must call
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
256 * ini_select() before using this function. Returns the value of
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
257 * key or NULL if the option does not exists.
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
258 */
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
259
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
260 char *
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
261 ini_get_option(struct ini_section *section, const char *key)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
262 {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
263 struct ini_option *o;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
264
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
265 STAILQ_FOREACH(o, &section->options, next)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
266 if (strcmp(o->key, key) == 0)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
267 return o->value;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
268
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
269 return NULL;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
270 }
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
271
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
272 /*
73
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
273 * Return the last error or "No error" if there is not error at all.
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
274 */
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
275
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
276 char *
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
277 ini_error(void)
73
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
278 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
279 if (iniError[0] == '\0')
73
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
280 return "No error";
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
281
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
282 return iniError;
73
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
283 }
653d583376c9 Added the inifile_error() function and renamed inifile_option_simple() to _once()
David Demelier <markand@malikania.fr>
parents: 72
diff changeset
284
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 void
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
286 ini_free(struct ini_config *conf, int freeSections, int freeOptions)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
288 struct ini_section *s, *stmp;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
289 struct ini_option *o, *otmp;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
290
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
291 STAILQ_FOREACH_SAFE(s, &conf->sections, next, stmp) {
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 STAILQ_FOREACH_SAFE(o, &s->options, next, otmp) {
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 if (freeOptions) {
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 free(o->key);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
295 free(o->value);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
296
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
297 STAILQ_REMOVE(&s->options, o, ini_option, next);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 free(o);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
301
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 if (freeSections)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 free(s->key);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
304
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
305 STAILQ_REMOVE(&conf->sections, s, ini_section, next);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 free(s);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
308
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
309 free(conf);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
311
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 /* --------------------------------------------------------
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 * private functions
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 * -------------------------------------------------------- */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
315
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 /*
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 * Read file line per line and try to parse ini like file. Lines
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 * starting with # or empty line are ignored. Returns the file
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 * on success and NULL on failure.
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
321
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 static void *
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
323 ini_read(struct ini_config *conf, FILE *fp)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
325 while (ini_getline(conf, fp) == 0) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
326 if (ini_readline(conf) == NULL) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
327 free(conf->line);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
328 ini_free(conf, 1, 1);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
329
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
330 fclose(fp);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
331 return NULL;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
332 }
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
333
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
334 ++ conf->lineno;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
336
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
337 /* Clean up */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
338 free(conf->line);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 fclose(fp);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
341 return conf;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
343
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 /*
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
345 * Read the next line until the next '\n' character is found. Returns 0
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
346 * if the system had enough memory or -1 on allocation failure or on
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
347 * end of file.
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
349
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
350 static int
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
351 ini_getline(struct ini_config *conf, FILE *fp)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 {
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
353 int ch, pos;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
354
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
355 memset(conf->line, 0, conf->linesize);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
356 pos = 0;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
357
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
358 while ((ch = fgetc(fp)) != '\n') {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
359 if (feof(fp) || ferror(fp))
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
360 return -1;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
361
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
362 /* End of buffer, realloc */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
363 if (pos == conf->linesize) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
364 conf->line = realloc(conf->line, conf->linesize + 513);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
365 if (conf->line == NULL)
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
366 return -1;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
367
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
368 conf->linesize += 512;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
370
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
371 conf->line[pos++] = ch;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
372 }
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
373
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
374 conf->line[pos] = '\0';
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
375
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
376 return 0;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
378
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
379 /*
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
380 * Read the next line that have been successfully read. Returns NULL
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
381 * on allocation failure (instanciation of new section or option)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
382 * or the file on success.
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
383 */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
384
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
385 static void *
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
386 ini_readline(struct ini_config *conf)
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
387 {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
388 char *lp;
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
389 int (*handler)(struct ini_config *, char **);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
390
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
391 lp = conf->line;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
392 SKIP_SPACES(lp);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
393
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
394 /* Ignore empty line or comment */
75
37fa222d7cc6 Use ';' as comment with #
David Demelier <markand@malikania.fr>
parents: 74
diff changeset
395 if (*lp == '\0' || *lp == '#' || *lp == ';')
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
396 return conf;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
397
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
398 while (*lp != '\0') {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
399 SKIP_SPACES(lp);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
400
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
401 /* Skip comments again and empty lines */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
402 if (*lp == '\0' || *lp == '#' || *lp == ';')
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
403 return conf;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
404
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
405 #ifdef INI_DEBUG
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
406 printf("-- line[%d] == [%s]\n", conf->lineno, conf->line);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
407 #endif
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
408
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
409 if (*lp == '[')
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
410 handler = &ini_switch;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
411 else if (!conf->ignore)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
412 handler = &ini_register;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
413 else
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
414 handler = NULL;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
415
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
416 /* Success or not? */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
417 if (handler != NULL && handler(conf, &lp) < 0)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
418 return (I_FAILERROR(conf)) ? NULL : conf;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
419
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
420 SKIP_SPACES(lp);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
421 }
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
422
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
423 return conf;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
424 }
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
425
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
426 /* On failure, seek next space */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
427 #define SEEK_NEXT(lp) \
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
428 for (; !isspace(**lp) && **lp != '\0'; ++(*lp)) \
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
429 continue;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
430
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
431 /* On other failure seek until the next line '\0' */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
432 #define SEEK_NL(lp) \
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
433 for (; !isspace(**lp) && **lp != '\0'; ++(*lp))
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
434
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
435 /*
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
436 * Parse the new section (function called when '[' is found). Returns
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
437 * 0 or parse error (to avoid ini_readling from stopping) or -1 on
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
438 * allocation failure.
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
439 */
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
440
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
441 static int
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
442 ini_switch(struct ini_config *conf, char **lp)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
443 {
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
444 char *endSection;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
445
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
446 /* Section not parsed, ignore next option to prevent breakage */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
447 if ((endSection = strchr(*lp, ']')) == NULL) {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
448 WARN(conf, "line %d: parse error\n", conf->lineno);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
449 SEEK_NEXT(lp);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
450 return (conf->ignore = 1) - 2; /* single line rocks */
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
451 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
452
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
453 /* Redefinition of previous and not allowed */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
454 ++(*lp);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
455 if (conf->current != NULL && I_NOREDEFINE(conf) &&
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
456 (strncmp(conf->current->key, *lp, endSection - *lp)) == 0) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
457 WARN(conf, "line %d: redefining %s\n", conf->lineno, conf->current->key);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
458 SEEK_NEXT(lp);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
459 return (conf->ignore = 1) - 2;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
460 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
461
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
462 if ((conf->current = malloc(sizeof (struct ini_section))) == NULL)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
463 return -1;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
464
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
465 if ((conf->current->key = xstrndup(*lp, endSection - *lp)) == NULL) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
466 free(conf->current);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
467 return -1;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
468 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
469
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
470 *lp = endSection + 1;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
471
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
472 #ifdef INI_DEBUG
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
473 printf("-- current section is now [%s]\n", conf->current->key);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
474 #endif
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
475
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
476 /* Finally add the new section to the config */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
477 STAILQ_INIT(&conf->current->options);
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
478 STAILQ_INSERT_TAIL(&conf->sections, conf->current, next);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
479
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
480 return (conf->ignore = 0);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
481 }
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
482
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
483 /*
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
484 * Store the new option that have been parsed. Returns 0 on success or
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
485 * on parse error (to avoid ini_readline from stopping) and -1 on
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
486 * allocation failure.
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
487 */
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
488
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
489 static int
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
490 ini_register(struct ini_config *conf, char **lp)
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
491 {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
492 char *assignKey, *endKey, *endValue, token = '\0';
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
493 int length = 0;
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
494 struct ini_option *option, tmp;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
495
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
496 /* No '=' found */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
497 if ((assignKey = strchr(*lp, '=')) == NULL) {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
498 WARN(conf, "line %d: missing '='\n", conf->lineno);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
499 SEEK_NEXT(lp);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
500 return -1;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
501 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
502
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
503 /* Find end of option */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
504 endKey = *lp;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
505 for (; !isspace(*endKey) && *endKey != '\0' && *endKey != '='; ++endKey)
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
506 continue;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
507
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
508 /* Do not register empty option name */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
509 if (endKey - *lp <= 0) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
510 WARN(conf, "line %d: 0-length option\n", conf->lineno);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
511 SEEK_NL(lp);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
512 return -1;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
513 }
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
514
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
515 memset(&tmp, 0, sizeof (struct ini_option));
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
516 if ((tmp.key = xstrndup(*lp, endKey - *lp)) == NULL)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
517 return -1;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
518
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
519 endValue = &assignKey[1];
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
520 SKIP_SPACES(endValue);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
521
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
522 /* Find end of option value */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
523 token = *endValue;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
524 if (token == '\'' || token == '"') {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
525 for (*lp = ++endValue; *endValue != token && *endValue != '\0'; ++endValue)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
526 continue;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
527
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
528 length = endValue - *lp;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
529
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
530 /* Correctly closed */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
531 if (token != '\0' && *endValue == token)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
532 ++ endValue;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
533 else
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
534 WARN(conf, "line %d: missing '%c'\n", conf->lineno, token);
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
535 } else {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
536 for (*lp = endValue; !isspace(*endValue) && *endValue != '\0'; ++endValue)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
537 continue;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
538
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
539 length = endValue - *lp;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
540 }
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
541
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
542 if (length != 0)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
543 tmp.value = xstrndup(*lp, length);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
544
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
545 if ((option = xoptiondup(&tmp)) == NULL)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
546 return -1;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
547
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
548 #ifdef INI_DEBUG
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
549 printf("-- next option [%s] is set to [%s]\n", tmp.key, tmp.value);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
550 #endif
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
551
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
552 /* Finally add the new option to the current section */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
553 *lp = endValue;
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
554 STAILQ_INSERT_TAIL(&conf->current->options, option, next);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
555
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
556 return 0;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
557 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
558
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
559 static void *
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
560 ini_fatal(struct ini_config *conf, FILE *fp, const char *fmt, ...)
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
561 {
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
562 va_list ap;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
563
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
564 if (conf != NULL) {
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
565 struct ini_section *s, *stmp;
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
566 struct ini_option *o, *otmp;
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
567
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
568 if (conf->line != NULL)
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
569 free(conf->line);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
570
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
571 STAILQ_FOREACH_SAFE(s, &conf->sections, next, stmp) {
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
572 STAILQ_FOREACH_SAFE(o, &s->options, next, otmp) {
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
573 free(o->key);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
574 free(o->value);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
575
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
576 STAILQ_REMOVE(&s->options, o, ini_option, next);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
577
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
578 free(o);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
579 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
580
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
581 free(s->key);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
582 free(s);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
583 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
584
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
585 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
586
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
587 if (fp != NULL)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
588 fclose(fp);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
589
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
590 va_start(ap, fmt);
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
591 vsnprintf(iniError, 1024, fmt, ap);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
592 va_end(ap);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
593
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
594 /* Directly print error if VERBOSE is enabled */
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
595 WARN(conf, "%s\n", iniError);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
596
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
597 free(conf);
71
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
598
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
599 return NULL;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
600 }
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
601
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
602 static char *
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
603 xstrndup(const char *src, size_t max)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
604 {
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
605 char *res;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
606 size_t length;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
607
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
608 for (length = 0; length < max && src[length] != '\0'; ++length)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
609 continue;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
610
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
611 if ((res = malloc(length + 1)) == NULL)
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
612 return NULL;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
613
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
614 memcpy(res, src, length);
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
615 res[length] = '\0';
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
616
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
617 return res;
6981419d48c1 Added inifile.c inifile.h:
David Demelier <markand@malikania.fr>
parents:
diff changeset
618 }
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
619
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
620 static struct ini_option *
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
621 xoptiondup(const struct ini_option *option)
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
622 {
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
623 struct ini_option *res;
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
624
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
625 /*
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
626 * Value may be NULL but not option's key.
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
627 */
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
628 if (option->key == NULL) {
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
629 if (option->value != NULL)
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
630 free(option->value);
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
631
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
632 return NULL;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
633 }
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
634
79
fd817a7dbf2f Switched a lot of things in ini
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
635 if ((res = malloc(sizeof (struct ini_option))) == NULL)
72
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
636 return NULL;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
637
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
638 res->key = option->key;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
639 res->value = option->value;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
640
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
641 return res;
262c053206f6 Cleaned up lot of things in inifile.c:
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
642 }