mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-18 20:57:56 +00:00
Improve config overflow message
This commit is contained in:
parent
bd45186a6a
commit
77162fbaec
4
conf.h
4
conf.h
@ -314,7 +314,7 @@ void _cf_warn_node_value(struct __sourceloc __whence, const struct cf_om_node *n
|
|||||||
void _cf_warn_no_array(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
void _cf_warn_no_array(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
||||||
void _cf_warn_unsupported_node(struct __sourceloc __whence, const struct cf_om_node *node);
|
void _cf_warn_unsupported_node(struct __sourceloc __whence, const struct cf_om_node *node);
|
||||||
void _cf_warn_unsupported_children(struct __sourceloc __whence, const struct cf_om_node *parent);
|
void _cf_warn_unsupported_children(struct __sourceloc __whence, const struct cf_om_node *parent);
|
||||||
void _cf_warn_list_overflow(struct __sourceloc __whence, const struct cf_om_node *node);
|
void _cf_warn_list_overflow(struct __sourceloc __whence, const struct cf_om_node *node, const char *fmt, ...);
|
||||||
void _cf_warn_incompatible(struct __sourceloc __whence, const struct cf_om_node *node, const struct cf_om_node *orig);
|
void _cf_warn_incompatible(struct __sourceloc __whence, const struct cf_om_node *node, const struct cf_om_node *orig);
|
||||||
void _cf_warn_incompatible_children(struct __sourceloc __whence, const struct cf_om_node *parent);
|
void _cf_warn_incompatible_children(struct __sourceloc __whence, const struct cf_om_node *parent);
|
||||||
void _cf_warn_array_key(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
void _cf_warn_array_key(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
||||||
@ -330,7 +330,7 @@ void _cf_warn_array_value(struct __sourceloc __whence, const struct cf_om_node *
|
|||||||
#define cf_warn_no_array(node, reason) _cf_warn_no_array(__WHENCE__, node, reason)
|
#define cf_warn_no_array(node, reason) _cf_warn_no_array(__WHENCE__, node, reason)
|
||||||
#define cf_warn_unsupported_node(node) _cf_warn_unsupported_node(__WHENCE__, node)
|
#define cf_warn_unsupported_node(node) _cf_warn_unsupported_node(__WHENCE__, node)
|
||||||
#define cf_warn_unsupported_children(parent) _cf_warn_unsupported_children(__WHENCE__, parent)
|
#define cf_warn_unsupported_children(parent) _cf_warn_unsupported_children(__WHENCE__, parent)
|
||||||
#define cf_warn_list_overflow(node) _cf_warn_list_overflow(__WHENCE__, node)
|
#define cf_warn_list_overflow(node, fmt, ...) _cf_warn_list_overflow(__WHENCE__, node, fmt, ##__VA_ARGS__)
|
||||||
#define cf_warn_incompatible(node, orig) _cf_warn_incompatible(__WHENCE__, node, orig)
|
#define cf_warn_incompatible(node, orig) _cf_warn_incompatible(__WHENCE__, node, orig)
|
||||||
#define cf_warn_incompatible_children(parent) _cf_warn_incompatible_children(__WHENCE__, parent)
|
#define cf_warn_incompatible_children(parent) _cf_warn_incompatible_children(__WHENCE__, parent)
|
||||||
#define cf_warn_array_key(node, reason) _cf_warn_array_key(__WHENCE__, node, reason)
|
#define cf_warn_array_key(node, reason) _cf_warn_array_key(__WHENCE__, node, reason)
|
||||||
|
16
conf_om.c
16
conf_om.c
@ -493,7 +493,10 @@ void _cf_warn_childrenv(struct __sourceloc __whence, const struct cf_om_node *pa
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < parent->nodc; ++i) {
|
for (i = 0; i < parent->nodc; ++i) {
|
||||||
_cf_warn_nodev(__whence, parent->nodv[i], NULL, fmt, ap);
|
va_list ap1;
|
||||||
|
va_copy(ap1, ap);
|
||||||
|
_cf_warn_nodev(__whence, parent->nodv[i], NULL, fmt, ap1);
|
||||||
|
va_end(ap1);
|
||||||
_cf_warn_childrenv(__whence, parent->nodv[i], fmt, ap);
|
_cf_warn_childrenv(__whence, parent->nodv[i], fmt, ap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -673,8 +676,13 @@ void _cf_warn_array_value(struct __sourceloc __whence, const struct cf_om_node *
|
|||||||
_cf_warn_node(__whence, node, NULL, "array element -- %s", strbuf_str(b));
|
_cf_warn_node(__whence, node, NULL, "array element -- %s", strbuf_str(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _cf_warn_list_overflow(struct __sourceloc __whence, const struct cf_om_node *node)
|
void _cf_warn_list_overflow(struct __sourceloc __whence, const struct cf_om_node *node, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
_cf_warn_node(__whence, node, NULL, "list overflow");
|
va_list ap;
|
||||||
_cf_warn_children(__whence, node, "list overflow");
|
va_start(ap, fmt);
|
||||||
|
_cf_warn_nodev(__whence, node, NULL, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
va_start(ap, fmt);
|
||||||
|
_cf_warn_childrenv(__whence, node, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||||||
assert(n == NELS(array->av)); \
|
assert(n == NELS(array->av)); \
|
||||||
result |= CFARRAYOVERFLOW; \
|
result |= CFARRAYOVERFLOW; \
|
||||||
for (; i < node->nodc; ++i) \
|
for (; i < node->nodc; ++i) \
|
||||||
cf_warn_list_overflow(node->nodv[i]); \
|
cf_warn_list_overflow(node->nodv[i], "list overflow, only %zu elements allowed", NELS(array->av)); \
|
||||||
} \
|
} \
|
||||||
array->ac = n; \
|
array->ac = n; \
|
||||||
qsort(array->av, array->ac, sizeof array->av[0], (int (*)(const void *, const void *)) keycmp); \
|
qsort(array->av, array->ac, sizeof array->av[0], (int (*)(const void *, const void *)) keycmp); \
|
||||||
|
20
tests/config
20
tests/config
@ -279,6 +279,26 @@ test_InterfaceDropDgramIncompatible() {
|
|||||||
--error-pattern='config file.*loaded despite defects.*incompatible'
|
--error-pattern='config file.*loaded despite defects.*incompatible'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
doc_TooManyValues="Too many config values"
|
||||||
|
setup_TooManyArgs() {
|
||||||
|
setup_servald
|
||||||
|
for i in {0..9}; do
|
||||||
|
executeOk_servald config set "interfaces.$i.match" "eth$i"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
test_TooManyArgs() {
|
||||||
|
execute --stderr --executable=$servald config \
|
||||||
|
set "interfaces.99.match" "eth11" \
|
||||||
|
set "interfaces.99.exclude" "on" \
|
||||||
|
set "interfaces.99.port" "1234" \
|
||||||
|
set "interfaces.99.broadcast.send" "on" \
|
||||||
|
set "interfaces.99.broadcast.route" "on" \
|
||||||
|
set "interfaces.99.unicast.send" "on" \
|
||||||
|
set "interfaces.99.unicast.route" "on"
|
||||||
|
tfw_cat --stdout --stderr
|
||||||
|
assertExitStatus '==' 2
|
||||||
|
}
|
||||||
|
|
||||||
#TODO move to another test script?
|
#TODO move to another test script?
|
||||||
doc_CmdUsage="Show help usage"
|
doc_CmdUsage="Show help usage"
|
||||||
test_CmdUsage() {
|
test_CmdUsage() {
|
||||||
|
Loading…
Reference in New Issue
Block a user