diff --git a/include/utils.h b/include/utils.h index 82eeb9e97..8bd5ecdd1 100644 --- a/include/utils.h +++ b/include/utils.h @@ -103,7 +103,15 @@ int strftimespec(char *s, size_t max, const char *format, struct timespec *ts) * @param set A cpu bitmask * @return The opaque cpu_set_t datatype */ -cpu_set_t to_cpu_set(int set); +cpu_set_t integer_to_cpuset(int set); + +#ifdef WITH_JANSSON + #include + +/* Convert a libconfig object to a libjansson object */ +json_t * config_to_json(config_setting_t *cfg); + +#endif /** Allocate and initialize memory. */ void * alloc(size_t bytes); diff --git a/lib/utils.c b/lib/utils.c index 99a491ca9..56eb16241 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -124,7 +124,7 @@ char * vstrcatf(char **dest, const char *fmt, va_list ap) return *dest; } -cpu_set_t to_cpu_set(int set) +cpu_set_t integer_to_cpuset(int set) { cpu_set_t cset; @@ -138,6 +138,44 @@ cpu_set_t to_cpu_set(int set) return cset; } +#ifdef WITH_JANSSON +json_t * config_to_json(config_setting_t *cfg) +{ + switch (config_setting_type(cfg)) { + case CONFIG_TYPE_INT: return json_integer(config_setting_get_int(cfg)); + case CONFIG_TYPE_INT64: return json_integer(config_setting_get_int64(cfg)); + case CONFIG_TYPE_FLOAT: return json_real(config_setting_get_float(cfg)); + case CONFIG_TYPE_STRING: return json_string(config_setting_get_string(cfg)); + case CONFIG_TYPE_BOOL: return json_boolean(config_setting_get_bool(cfg)); + + case CONFIG_TYPE_ARRAY: + case CONFIG_TYPE_LIST: { + json_t *json = json_array(); + + for (int i = 0; i < config_setting_length(cfg); i++) + json_array_append_new(json, config_to_json(config_setting_get_elem(cfg, i))); + + return json; + } + + case CONFIG_TYPE_GROUP: { + json_t *json = json_object(); + + for (int i = 0; i < config_setting_length(cfg); i++) + json_object_set_new(json, + config_setting_name(config_setting_get_elem(cfg, i)), + config_to_json(config_setting_get_elem(cfg, i)) + ); + + return json; + } + + default: + return json_object(); + } +} +#endif + void * alloc(size_t bytes) { void *p = malloc(bytes); diff --git a/src/server.c b/src/server.c index 4a7d94d95..ee4b654a2 100644 --- a/src/server.c +++ b/src/server.c @@ -78,7 +78,7 @@ static void realtime_init() /* Pin threads to CPUs by setting the affinity */ if (settings.affinity) { - cpu_set_t cset = to_cpu_set(settings.affinity); + cpu_set_t cset = integer_to_cpuset(settings.affinity); if (sched_setaffinity(0, sizeof(cset), &cset)) serror("Failed to set CPU affinity to '%#x'", settings.affinity);