permanent-satori-hole/src/config/config.c
2023-12-27 01:35:22 +01:00

60 lines
1.5 KiB
C

#include "config.h"
#define SAT_CONFIG_LOCK_TIMEOUT (10)
#define SAT_CONFIG_CACHE_LIFETIME (900)
sat_config_ptr sat_config_alloc(int type) {
if(type == SAT_CONFIG_TYPE_STREAM)
return sat_config_alloc_stream();
if(type == SAT_CONFIG_TYPE_SCOPED)
return sat_config_alloc_scoped();
return NULL;
}
void sat_config_free(sat_config_ptr ctx) {
if(!ctx || !ctx->info) return;
if(ctx->type == SAT_CONFIG_TYPE_STREAM)
sat_config_free_stream(ctx);
else if(ctx->type == SAT_CONFIG_TYPE_SCOPED)
sat_config_free_scoped(ctx);
}
sat_config_ptr sat_config_scope_to(sat_config_ptr ctx, char *prefix) {
return ctx->scopeTo(ctx, prefix);
}
char* sat_config_read_value(sat_config_ptr ctx, char *name, char *fallback) {
return ctx->readValue(ctx, name, fallback);
}
bool sat_config_read_bool(sat_config_ptr ctx, char *name, bool fallback) {
char *raw = sat_config_read_value(ctx, name, NULL);
if(raw == NULL)
return fallback;
for(char *p = raw; *p; ++p)
*p = tolower(*p);
bool value = strcmp(raw, "0") != 0
&& strcmp(raw, "no") != 0
&& strcmp(raw, "false") != 0;
free(raw);
return value;
}
uint64_t sat_config_read_u64(sat_config_ptr ctx, char *name, uint64_t fallback) {
char *raw = sat_config_read_value(ctx, name, NULL);
if(raw == NULL)
return fallback;
char *end = NULL;
uint64_t value = strtoull(raw, &end, 10);
free(raw);
return value;
}