|
|
@@ -1,34 +1,45 @@ |
|
|
|
#include "IZ_repo.h" |
|
|
|
|
|
|
|
void IZ_RepoLoadConfig(IZ_RepoState* state, const char* config_path) { |
|
|
|
char buffer[64]; |
|
|
|
static IZ_ConfigItem repo_config_items[] = { |
|
|
|
{ |
|
|
|
IZ_CONFIG_TYPE_STRING, |
|
|
|
sizeof(char) * 64, |
|
|
|
"Database", |
|
|
|
"Path", |
|
|
|
"-d", |
|
|
|
&IZ_REPO_DEFAULT_STATE.config.path, |
|
|
|
NULL, |
|
|
|
{ |
|
|
|
.serialize = NULL, |
|
|
|
.deserialize = NULL, |
|
|
|
}, |
|
|
|
NULL, |
|
|
|
}, |
|
|
|
IZ_CONFIG_ITEM_NULL, |
|
|
|
}; |
|
|
|
|
|
|
|
ini_gets("Database", "Path", IZ_REPO_DEFAULT_STATE.config.path, buffer, 64, config_path); |
|
|
|
memcpy_s(state->config.path, 64, buffer, 64); |
|
|
|
void IZ_RepoBindStateToConfig(IZ_RepoState* state, IZ_ConfigItem config_items[]) { |
|
|
|
config_items[0].dest = &state->config.path; |
|
|
|
} |
|
|
|
|
|
|
|
IZ_ProcedureResult IZ_RepoSaveConfig(IZ_RepoState* state, const char* config_path) { |
|
|
|
if (!ini_puts("Database", "Path", state->config.path, config_path)) { |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
IZ_RepoBindStateToConfig(state, repo_config_items); |
|
|
|
return IZ_ConfigSave(repo_config_items, config_path); |
|
|
|
} |
|
|
|
|
|
|
|
void IZ_RepoOverrideConfig(IZ_RepoState* state, u8 argc, const char* argv[]) { |
|
|
|
const char* cmdline_buffer; |
|
|
|
if ((cmdline_buffer = IZ_ConfigGetCommandlineOption(argc, argv, "-d"))) { |
|
|
|
memcpy_s(state->config.path, 64, cmdline_buffer, 64); |
|
|
|
IZ_ProcedureResult IZ_RepoInitializeConfig(IZ_RepoState* state, const char* config_path, u8 argc, const char* argv[]) { |
|
|
|
IZ_RepoBindStateToConfig(state, repo_config_items); |
|
|
|
if (IZ_ConfigInitialize(repo_config_items, config_path, argc, argv) < 0) { |
|
|
|
return -1; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
IZ_ProcedureResult IZ_RepoInitialize(IZ_RepoState* state, const char* config_path, u8 argc, const char* argv[]) { |
|
|
|
memcpy_s(state, sizeof(IZ_RepoState), &IZ_REPO_DEFAULT_STATE, sizeof(IZ_RepoState)); |
|
|
|
IZ_RepoLoadConfig(state, config_path); |
|
|
|
if (IZ_RepoSaveConfig(state, config_path)) { |
|
|
|
return -1; |
|
|
|
if (IZ_RepoInitializeConfig(state, config_path, argc, argv) < 0) { |
|
|
|
return -2; |
|
|
|
} |
|
|
|
IZ_RepoOverrideConfig(state, argc, argv); |
|
|
|
sqlite3_open_v2(state->config.path, &state->db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); |
|
|
|
return 0; |
|
|
|
} |
|
|
|