degesch: fix reading in the configuration

This commit is contained in:
Přemysl Eric Janouch 2015-04-15 15:49:33 +02:00
parent 06857c6bbb
commit 23298f3a0e
1 changed files with 28 additions and 23 deletions

View File

@ -1935,6 +1935,29 @@ autofill_user_info (struct app_context *ctx, struct error **e)
return true;
}
static bool
unescape_config (struct str_map *input, struct str_map *output, struct error **e)
{
struct error *error = NULL;
struct str_map_iter iter;
str_map_iter_init (&iter, input);
while (str_map_iter_next (&iter))
{
struct str value;
str_init (&value);
if (!unescape_string (iter.link->data, &value, &error))
{
error_set (e, "error reading configuration: %s: %s",
iter.link->key, error->message);
error_free (error);
return false;
}
str_map_set (output, iter.link->key, str_steal (&value));
}
return true;
}
static bool
load_config (struct app_context *ctx, struct error **e)
{
@ -1945,29 +1968,11 @@ load_config (struct app_context *ctx, struct error **e)
str_map_init (&map);
map.free = free;
if (!read_config_file (&map, e))
return false;
struct str_map_iter iter;
str_map_iter_init (&iter, &map);
while (str_map_iter_next (&iter))
{
struct error *e = NULL;
struct str value;
str_init (&value);
if (!unescape_string (iter.link->data, &value, &e))
{
// FIXME: use the "e" argument, don't print it
print_error ("error reading configuration: %s: %s",
iter.link->key, e->message);
error_free (e);
exit (EXIT_FAILURE);
}
str_map_set (&ctx->config, iter.link->key, str_steal (&value));
}
if (!autofill_user_info (ctx, e))
bool success = read_config_file (&map, e) &&
unescape_config (&map, &ctx->config, e) &&
autofill_user_info (ctx, e);
str_map_free (&map);
if (!success)
return false;
if (!irc_get_boolean_from_config (ctx, "reconnect", &ctx->reconnect, e))