shared: Remove no longer used parse_config_file()
This commit is contained in:
@@ -41,134 +41,6 @@
|
|||||||
const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
|
const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
|
||||||
(type *)( (char *)__mptr - offsetof(type,member) );})
|
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||||
|
|
||||||
static int
|
|
||||||
handle_key(const struct config_key *key, const char *value)
|
|
||||||
{
|
|
||||||
char *end, *s;
|
|
||||||
int i, len;
|
|
||||||
unsigned int ui;
|
|
||||||
|
|
||||||
switch (key->type) {
|
|
||||||
case CONFIG_KEY_INTEGER:
|
|
||||||
i = strtol(value, &end, 0);
|
|
||||||
if (*end != '\n') {
|
|
||||||
fprintf(stderr, "invalid integer: %s\n", value);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*(int *)key->data = i;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case CONFIG_KEY_UNSIGNED_INTEGER:
|
|
||||||
ui = strtoul(value, &end, 0);
|
|
||||||
if (*end != '\n') {
|
|
||||||
fprintf(stderr, "invalid integer: %s\n", value);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*(unsigned int *)key->data = ui;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case CONFIG_KEY_STRING:
|
|
||||||
len = strlen(value);
|
|
||||||
while (len > 0 && isspace(value[len - 1]))
|
|
||||||
len--;
|
|
||||||
s = malloc(len + 1);
|
|
||||||
if (s == NULL)
|
|
||||||
return -1;
|
|
||||||
memcpy(s, value, len);
|
|
||||||
s[len] = '\0';
|
|
||||||
*(char **)key->data = s;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case CONFIG_KEY_BOOLEAN:
|
|
||||||
if (strcmp(value, "false\n") == 0)
|
|
||||||
*(int *)key->data = 0;
|
|
||||||
else if (strcmp(value, "true\n") == 0)
|
|
||||||
*(int *)key->data = 1;
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "invalid bool: %s\n", value);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
default:
|
|
||||||
assert(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
parse_config_file(int fd,
|
|
||||||
const struct config_section *sections, int num_sections,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
char line[512], *p;
|
|
||||||
const struct config_section *current = NULL;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (fd == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
fp = fdopen(dup(fd), "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
perror("couldn't open config file");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
rewind(fp);
|
|
||||||
|
|
||||||
while (fgets(line, sizeof line, fp)) {
|
|
||||||
if (line[0] == '#' || line[0] == '\n') {
|
|
||||||
continue;
|
|
||||||
} if (line[0] == '[') {
|
|
||||||
p = strchr(&line[1], ']');
|
|
||||||
if (!p || p[1] != '\n') {
|
|
||||||
fprintf(stderr, "malformed "
|
|
||||||
"section header: %s\n", line);
|
|
||||||
fclose(fp);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (current && current->done)
|
|
||||||
current->done(data);
|
|
||||||
p[0] = '\0';
|
|
||||||
for (i = 0; i < num_sections; i++) {
|
|
||||||
if (strcmp(sections[i].name, &line[1]) == 0) {
|
|
||||||
current = §ions[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == num_sections)
|
|
||||||
current = NULL;
|
|
||||||
} else if (p = strchr(line, '='), p != NULL) {
|
|
||||||
if (current == NULL)
|
|
||||||
continue;
|
|
||||||
p[0] = '\0';
|
|
||||||
for (i = 0; i < current->num_keys; i++) {
|
|
||||||
if (strcmp(current->keys[i].name, line) == 0) {
|
|
||||||
if (handle_key(¤t->keys[i], &p[1]) < 0) {
|
|
||||||
fclose(fp);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "malformed config line: %s\n", line);
|
|
||||||
fclose(fp);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current && current->done)
|
|
||||||
current->done(data);
|
|
||||||
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
open_config_file(const char *name)
|
open_config_file(const char *name)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,11 +47,6 @@ struct config_section {
|
|||||||
void (*done)(void *data);
|
void (*done)(void *data);
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
|
||||||
parse_config_file(int config_fd,
|
|
||||||
const struct config_section *sections, int num_sections,
|
|
||||||
void *data);
|
|
||||||
|
|
||||||
int
|
int
|
||||||
open_config_file(const char *name);
|
open_config_file(const char *name);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user