vici: Add get_bool() convenience getter for VICI messages
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2015 Tobias Brunner
|
||||||
|
* Hochschule fuer Technik Rapperswil
|
||||||
|
*
|
||||||
* Copyright (C) 2014 Martin Willi
|
* Copyright (C) 2014 Martin Willi
|
||||||
* Copyright (C) 2014 revosec AG
|
* Copyright (C) 2014 revosec AG
|
||||||
*
|
*
|
||||||
@@ -355,6 +358,33 @@ START_TEST(test_get_int)
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_get_bool)
|
||||||
|
{
|
||||||
|
vici_message_t *m;
|
||||||
|
|
||||||
|
m = build_getter_msg();
|
||||||
|
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "key1"));
|
||||||
|
ck_assert(m->get_bool(m, FALSE, "key1"));
|
||||||
|
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "section1.key2"));
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "section1.section2.key3"));
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "section1.key4"));
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "key5"));
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "nonexistent"));
|
||||||
|
ck_assert(m->get_bool(m, TRUE, "n.o.n.e.x.i.s.t.e.n.t"));
|
||||||
|
|
||||||
|
ck_assert(!m->get_bool(m, FALSE, "section1.key2"));
|
||||||
|
ck_assert(!m->get_bool(m, FALSE, "section1.section2.key3"));
|
||||||
|
ck_assert(!m->get_bool(m, FALSE, "section1.key4"));
|
||||||
|
ck_assert(!m->get_bool(m, FALSE, "key5"));
|
||||||
|
ck_assert(!m->get_bool(m, FALSE, "nonexistent"));
|
||||||
|
ck_assert(!m->get_bool(m, FALSE, "n.o.n.e.x.i.s.t.e.n.t"));
|
||||||
|
|
||||||
|
m->destroy(m);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
START_TEST(test_get_value)
|
START_TEST(test_get_value)
|
||||||
{
|
{
|
||||||
vici_message_t *m;
|
vici_message_t *m;
|
||||||
@@ -400,6 +430,7 @@ Suite *message_suite_create()
|
|||||||
tc = tcase_create("convenience getters");
|
tc = tcase_create("convenience getters");
|
||||||
tcase_add_test(tc, test_get_str);
|
tcase_add_test(tc, test_get_str);
|
||||||
tcase_add_test(tc, test_get_int);
|
tcase_add_test(tc, test_get_int);
|
||||||
|
tcase_add_test(tc, test_get_bool);
|
||||||
tcase_add_test(tc, test_get_value);
|
tcase_add_test(tc, test_get_value);
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2015 Tobias Brunner
|
||||||
|
* Hochschule fuer Technik Rapperswil
|
||||||
|
*
|
||||||
* Copyright (C) 2014 Martin Willi
|
* Copyright (C) 2014 Martin Willi
|
||||||
* Copyright (C) 2014 revosec AG
|
* Copyright (C) 2014 revosec AG
|
||||||
*
|
*
|
||||||
@@ -385,6 +388,41 @@ METHOD(vici_message_t, get_int, int,
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(vici_message_t, vget_bool, bool,
|
||||||
|
private_vici_message_t *this, bool def, char *fmt, va_list args)
|
||||||
|
{
|
||||||
|
chunk_t value;
|
||||||
|
bool found;
|
||||||
|
char buf[16];
|
||||||
|
|
||||||
|
found = find_value(this, &value, fmt, args);
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
if (value.len == 0)
|
||||||
|
{
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
if (chunk_printable(value, NULL, 0))
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%.*s", (int)value.len, value.ptr);
|
||||||
|
return settings_value_as_bool(buf, def);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
|
||||||
|
METHOD(vici_message_t, get_bool, bool,
|
||||||
|
private_vici_message_t *this, bool def, char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
bool val;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
val = vget_bool(this, def, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(vici_message_t, vget_value, chunk_t,
|
METHOD(vici_message_t, vget_value, chunk_t,
|
||||||
private_vici_message_t *this, chunk_t def, char *fmt, va_list args)
|
private_vici_message_t *this, chunk_t def, char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
@@ -633,6 +671,8 @@ vici_message_t *vici_message_create_from_data(chunk_t data, bool cleanup)
|
|||||||
.vget_str = _vget_str,
|
.vget_str = _vget_str,
|
||||||
.get_int = _get_int,
|
.get_int = _get_int,
|
||||||
.vget_int = _vget_int,
|
.vget_int = _vget_int,
|
||||||
|
.get_bool = _get_bool,
|
||||||
|
.vget_bool = _vget_bool,
|
||||||
.get_value = _get_value,
|
.get_value = _get_value,
|
||||||
.vget_value = _vget_value,
|
.vget_value = _vget_value,
|
||||||
.get_encoding = _get_encoding,
|
.get_encoding = _get_encoding,
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2015 Tobias Brunner
|
||||||
|
* Hochschule fuer Technik Rapperswil
|
||||||
|
*
|
||||||
* Copyright (C) 2014 Martin Willi
|
* Copyright (C) 2014 Martin Willi
|
||||||
* Copyright (C) 2014 revosec AG
|
* Copyright (C) 2014 revosec AG
|
||||||
*
|
*
|
||||||
@@ -137,6 +140,26 @@ struct vici_message_t {
|
|||||||
*/
|
*/
|
||||||
int (*vget_int)(vici_message_t *this, int def, char *fmt, va_list args);
|
int (*vget_int)(vici_message_t *this, int def, char *fmt, va_list args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the value of a key/value pair as boolean.
|
||||||
|
*
|
||||||
|
* @param def default value if not found
|
||||||
|
* @param fmt printf style format string for key, with sections
|
||||||
|
* @param ... arguments to fmt string
|
||||||
|
* @return value
|
||||||
|
*/
|
||||||
|
bool (*get_bool)(vici_message_t *this, bool def, char *fmt, ...);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the value of a key/value pair as boolean, va_list variant
|
||||||
|
*
|
||||||
|
* @param def default value if not found
|
||||||
|
* @param fmt printf style format string for key, with sections
|
||||||
|
* @param args arguments to fmt string
|
||||||
|
* @return value
|
||||||
|
*/
|
||||||
|
bool (*vget_bool)(vici_message_t *this, bool def, char *fmt, va_list args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the raw value of a key/value pair.
|
* Get the raw value of a key/value pair.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user