1#include "core/aqm_paths.h"
2#include "core/aqm_platform.h"
7static char g_data_dir[AQM_PATH_MAX];
9static int append_path(
char *buf,
size_t buflen,
const char *a,
const char *b) {
10 int n = snprintf(buf, buflen,
"%s%s%s", a, AQM_PATH_SEP, b);
11 if (n < 0 || (
size_t)n >= buflen)
16void aqm_paths_init(
void) {
17 const char *env = getenv(
"AIR_QUALITY_DATA_DIR");
18 if (env && env[0] !=
'\0') {
19 size_t len = strlen(env);
20 if (len >=
sizeof(g_data_dir)) {
21 fprintf(stderr,
"AIR_QUALITY_DATA_DIR path too long.\n");
25 memcpy(g_data_dir, env, len + 1);
27 if (snprintf(g_data_dir,
sizeof(g_data_dir),
"data") >= (
int)
sizeof(g_data_dir)) {
33 if (aqm_mkdir_p(g_data_dir) != 0) {
34 fprintf(stderr,
"Could not create data directory: %s\n", g_data_dir);
39int aqm_get_data_dir(
char *buf,
size_t buflen) {
40 if (!buf || buflen == 0)
42 if (g_data_dir[0] ==
'\0') {
45 if (g_data_dir[0] ==
'\0')
47 if (strlen(g_data_dir) >= buflen)
49 memcpy(buf, g_data_dir, strlen(g_data_dir) + 1);
53int aqm_get_db_path(
char *buf,
size_t buflen) {
54 char dir[AQM_PATH_MAX];
55 if (aqm_get_data_dir(dir,
sizeof(dir)) != 0)
57 return append_path(buf, buflen, dir,
"air_quality.db");
60int aqm_get_config_path(
char *buf,
size_t buflen) {
61 char dir[AQM_PATH_MAX];
62 if (aqm_get_data_dir(dir,
sizeof(dir)) != 0)
64 return append_path(buf, buflen, dir,
"config.cfg");