mirror of
https://gitlab.xiph.org/xiph/ezstream.git
synced 2024-11-03 04:17:18 -05:00
Expose "configuration stashing" API
This commit is contained in:
parent
87275ca223
commit
744511ffe2
35
src/cfg.c
35
src/cfg.c
@ -63,6 +63,8 @@ _cfg_reset(struct cfg *c)
|
|||||||
static void
|
static void
|
||||||
_cfg_copy(struct cfg *dst, struct cfg *src)
|
_cfg_copy(struct cfg *dst, struct cfg *src)
|
||||||
{
|
{
|
||||||
|
dst->_master_cfg = src->_master_cfg;
|
||||||
|
|
||||||
memcpy(&dst->program, &src->program, sizeof(dst->program));
|
memcpy(&dst->program, &src->program, sizeof(dst->program));
|
||||||
|
|
||||||
memcpy(&dst->server, &src->server, sizeof(dst->server));
|
memcpy(&dst->server, &src->server, sizeof(dst->server));
|
||||||
@ -121,6 +123,7 @@ int
|
|||||||
cfg_init(void)
|
cfg_init(void)
|
||||||
{
|
{
|
||||||
_cfg_reset(&cfg);
|
_cfg_reset(&cfg);
|
||||||
|
cfg._master_cfg = 1;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,18 +133,38 @@ cfg_exit(void)
|
|||||||
_cfg_reset(&cfg);
|
_cfg_reset(&cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cfg_save(void)
|
||||||
|
{
|
||||||
|
_cfg_reset(&cfg_tmp);
|
||||||
|
_cfg_copy(&cfg_tmp, &cfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cfg_pop(void)
|
||||||
|
{
|
||||||
|
if (!cfg_tmp._master_cfg)
|
||||||
|
return;
|
||||||
|
_cfg_reset(&cfg);
|
||||||
|
_cfg_copy(&cfg, &cfg_tmp);
|
||||||
|
_cfg_reset(&cfg_tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cfg_clear(void)
|
||||||
|
{
|
||||||
|
_cfg_reset(&cfg_tmp);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
cfg_reload(void)
|
cfg_reload(void)
|
||||||
{
|
{
|
||||||
_cfg_copy(&cfg_tmp, &cfg);
|
cfg_save();
|
||||||
if (0 > _cfg_load()) {
|
if (0 > _cfg_load()) {
|
||||||
/* roll back */
|
cfg_pop();
|
||||||
_cfg_reset(&cfg);
|
|
||||||
_cfg_copy(&cfg, &cfg_tmp);
|
|
||||||
_cfg_reset(&cfg_tmp);
|
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
_cfg_reset(&cfg_tmp);
|
cfg_clear();
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,10 @@ enum cfg_stream_format {
|
|||||||
int cfg_init(void);
|
int cfg_init(void);
|
||||||
void cfg_exit(void);
|
void cfg_exit(void);
|
||||||
|
|
||||||
|
void cfg_save(void);
|
||||||
|
void cfg_pop(void);
|
||||||
|
void cfg_clear(void);
|
||||||
|
|
||||||
int cfg_reload(void);
|
int cfg_reload(void);
|
||||||
|
|
||||||
int cfg_stream_str2fmt(const char *, enum cfg_stream_format *);
|
int cfg_stream_str2fmt(const char *, enum cfg_stream_format *);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#define DEFAULT_USER "source"
|
#define DEFAULT_USER "source"
|
||||||
|
|
||||||
struct cfg {
|
struct cfg {
|
||||||
|
int _master_cfg;
|
||||||
struct program {
|
struct program {
|
||||||
char name[PATH_MAX];
|
char name[PATH_MAX];
|
||||||
enum cfg_config_type config_type;
|
enum cfg_config_type config_type;
|
||||||
|
@ -100,6 +100,25 @@ Suite * cfg_suite(void);
|
|||||||
void setup_checked(void);
|
void setup_checked(void);
|
||||||
void teardown_checked(void);
|
void teardown_checked(void);
|
||||||
|
|
||||||
|
START_TEST(test_stash)
|
||||||
|
{
|
||||||
|
ck_assert_ptr_eq(cfg_get_stream_name(), NULL);
|
||||||
|
ck_assert_int_eq(cfg_set_stream_name("test_stash", NULL), 0);
|
||||||
|
ck_assert_str_eq(cfg_get_stream_name(), "test_stash");
|
||||||
|
cfg_save();
|
||||||
|
ck_assert_int_eq(cfg_set_stream_name("test_stash2", NULL), 0);
|
||||||
|
ck_assert_str_eq(cfg_get_stream_name(), "test_stash2");
|
||||||
|
cfg_pop();
|
||||||
|
ck_assert_str_eq(cfg_get_stream_name(), "test_stash");
|
||||||
|
cfg_pop();
|
||||||
|
ck_assert_str_eq(cfg_get_stream_name(), "test_stash");
|
||||||
|
cfg_save();
|
||||||
|
cfg_clear();
|
||||||
|
cfg_pop();
|
||||||
|
ck_assert_str_eq(cfg_get_stream_name(), "test_stash");
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
START_TEST(test_stream_str2fmt)
|
START_TEST(test_stream_str2fmt)
|
||||||
{
|
{
|
||||||
enum cfg_stream_format fmt;
|
enum cfg_stream_format fmt;
|
||||||
@ -729,6 +748,7 @@ cfg_suite(void)
|
|||||||
|
|
||||||
tc_core = tcase_create("Core");
|
tc_core = tcase_create("Core");
|
||||||
tcase_add_checked_fixture(tc_core, setup_checked, teardown_checked);
|
tcase_add_checked_fixture(tc_core, setup_checked, teardown_checked);
|
||||||
|
tcase_add_test(tc_core, test_stash);
|
||||||
tcase_add_test(tc_core, test_stream_str2fmt);
|
tcase_add_test(tc_core, test_stream_str2fmt);
|
||||||
tcase_add_test(tc_core, test_stream_fmt2str);
|
tcase_add_test(tc_core, test_stream_fmt2str);
|
||||||
tcase_add_test(tc_core, test_file_check);
|
tcase_add_test(tc_core, test_file_check);
|
||||||
|
Loading…
Reference in New Issue
Block a user