aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2016-12-20 18:05:51 +0100
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2016-12-20 18:05:51 +0100
commit209ea0657b7970b4b8069ce44b43eecb97681892 (patch)
tree681a531d2d49fa4f12eecc94649069ef0b4d5e1b /src/common
parent08fe4ebf7c6b5430134a22177079eadb08d71cdc (diff)
downloadblogc-209ea0657b7970b4b8069ce44b43eecb97681892.tar.gz
blogc-209ea0657b7970b4b8069ce44b43eecb97681892.tar.bz2
blogc-209ea0657b7970b4b8069ce44b43eecb97681892.zip
config-parser: improved error reporting, added bc_config_get_with_default
Diffstat (limited to 'src/common')
-rw-r--r--src/common/config-parser.c23
-rw-r--r--src/common/config-parser.h2
2 files changed, 19 insertions, 6 deletions
diff --git a/src/common/config-parser.c b/src/common/config-parser.c
index 24fb299..ff05f2e 100644
--- a/src/common/config-parser.c
+++ b/src/common/config-parser.c
@@ -70,8 +70,8 @@ bc_config_parse(const char *src, size_t src_len, bc_error_t **err)
continue;
}
if (err != NULL)
- *err = bc_error_new_printf(BC_ERROR_CONFIG_PARSER,
- "File must start with section");
+ *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len,
+ current, "File must start with section.");
break;
case CONFIG_SECTION_START:
@@ -92,8 +92,8 @@ bc_config_parse(const char *src, size_t src_len, bc_error_t **err)
if (c != '\r' && c != '\n')
break;
if (err != NULL)
- *err = bc_error_new_printf(BC_ERROR_CONFIG_PARSER,
- "Section names can't have new lines");
+ *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len,
+ current, "Section names can't have new lines.");
break;
case CONFIG_SECTION_KEY:
@@ -109,8 +109,8 @@ bc_config_parse(const char *src, size_t src_len, bc_error_t **err)
size_t end = is_last && c != '\n' && c != '\r' ? src_len :
current;
key = bc_strndup(src + start, end - start);
- *err = bc_error_new_printf(BC_ERROR_CONFIG_PARSER,
- "Key without value: %s", key);
+ *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len,
+ current, "Key without value: %s.", key);
free(key);
key = NULL;
}
@@ -225,6 +225,17 @@ bc_config_get(bc_config_t *config, const char *section, const char *key)
}
+const char*
+bc_config_get_with_default(bc_config_t *config, const char *section, const char *key,
+ const char *default_)
+{
+ const char *rv = bc_config_get(config, section, key);
+ if (rv == NULL)
+ return default_;
+ return rv;
+}
+
+
void
bc_config_free(bc_config_t *config)
{
diff --git a/src/common/config-parser.h b/src/common/config-parser.h
index f9f287c..e249c37 100644
--- a/src/common/config-parser.h
+++ b/src/common/config-parser.h
@@ -22,6 +22,8 @@ char** bc_config_list_sections(bc_config_t *config);
char** bc_config_list_keys(bc_config_t *config, const char *section);
const char* bc_config_get(bc_config_t *config, const char *section,
const char *key);
+const char* bc_config_get_with_default(bc_config_t *config, const char *section,
+ const char *key, const char *default_);
void bc_config_free(bc_config_t *config);
#endif /* _CONFIG_PARSER_H */