summaryrefslogtreecommitdiff
path: root/lib/conf.c
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordu.net>2011-07-03 10:36:08 +0200
committerLinus Nordberg <linus@nordu.net>2011-07-03 10:36:08 +0200
commitb2b7fe083115822966eed20b28a07b2fb9de84dd (patch)
tree1c269b88910ab93862adb987c274ded2da52b8a1 /lib/conf.c
parent074f7dfe1934273a2336414c135b2494fda08af3 (diff)
Handle all libconfuse parse errors.
Diffstat (limited to 'lib/conf.c')
-rw-r--r--lib/conf.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/conf.c b/lib/conf.c
index e3d5522..9b8e77c 100644
--- a/lib/conf.c
+++ b/lib/conf.c
@@ -37,10 +37,12 @@
}
#endif
+/* FIXME: Leaking memory in error cases? */
int
rs_context_read_config(struct rs_context *ctx, const char *config_file)
{
cfg_t *cfg, *cfg_realm, *cfg_server;
+ int err = 0;
int i, j;
const char *s;
struct rs_config *config = NULL;
@@ -74,9 +76,22 @@ rs_context_read_config(struct rs_context *ctx, const char *config_file)
cfg = cfg_init (opts, CFGF_NONE);
if (cfg == NULL)
return rs_err_ctx_push (ctx, RSE_CONFIG, "unable to initialize libconfuse");
- if (cfg_parse (cfg, config_file) == CFG_PARSE_ERROR)
- return rs_err_ctx_push (ctx, RSE_CONFIG, "%s: invalid configuration file",
- config_file);
+ err = cfg_parse (cfg, config_file);
+ switch (err)
+ {
+ case CFG_SUCCESS:
+ break;
+ case CFG_FILE_ERROR:
+ return rs_err_ctx_push (ctx, RSE_CONFIG,
+ "%s: unable to open configuration file",
+ config_file);
+ case CFG_PARSE_ERROR:
+ return rs_err_ctx_push (ctx, RSE_CONFIG, "%s: invalid configuration file",
+ config_file);
+ default:
+ return rs_err_ctx_push (ctx, RSE_CONFIG, "%s: unknown parse error",
+ config_file);
+ }
config = rs_calloc (ctx, 1, sizeof (*config));
if (config == NULL)