2023-11-22 21:39:27 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
2023-11-22 21:55:55 +00:00
|
|
|
const char *ENV_SPEC_ROOT_DIR = "SPEC_ROOT_DIR";
|
2023-11-22 21:39:27 +00:00
|
|
|
|
|
|
|
enum ConfigError load_config(const char *target, struct Config *config) {
|
2023-11-22 21:55:55 +00:00
|
|
|
const char *root_dir = getenv(ENV_SPEC_ROOT_DIR);
|
|
|
|
if (root_dir == 0) {
|
|
|
|
return ENV_SPEC_ROOT_DIR_MISSING;
|
2023-11-22 21:39:27 +00:00
|
|
|
}
|
2023-11-22 21:55:55 +00:00
|
|
|
if (root_dir[0] == 0) {
|
|
|
|
return ENV_SPEC_ROOT_DIR_EMPTY;
|
2023-11-22 21:39:27 +00:00
|
|
|
}
|
|
|
|
if (target == 0) {
|
|
|
|
return INVALID_TARGET;
|
|
|
|
}
|
|
|
|
|
|
|
|
size_t target_len = strlen(target);
|
|
|
|
if (target_len == 0) {
|
|
|
|
return INVALID_TARGET;
|
|
|
|
}
|
|
|
|
|
|
|
|
config = malloc(sizeof(struct Config));
|
2023-11-22 21:55:55 +00:00
|
|
|
config->root_dir = root_dir;
|
2023-11-22 21:39:27 +00:00
|
|
|
|
|
|
|
char *copy_target = calloc(1, target_len + 1);
|
|
|
|
strcpy(copy_target, target);
|
2023-11-22 21:55:55 +00:00
|
|
|
config->target = copy_target;
|
2023-11-22 21:39:27 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void free_config(struct Config *config) {
|
|
|
|
if (!config) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
free((void *)config->target);
|
|
|
|
free(config);
|
|
|
|
}
|