mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-30 22:24:56 +00:00
Read and parse the confguration when openingt the config file
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
This commit is contained in:
parent
a69053c715
commit
e4c796f1a2
37
src/config.c
37
src/config.c
@ -30,7 +30,11 @@
|
|||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
/**********************
|
||||||
|
* Forward declarations
|
||||||
|
***********************/
|
||||||
|
static int config_parse(git_config *cfg_file);
|
||||||
|
static int parse_variable(git_config *cfg, const char *section_name, const char *line);
|
||||||
uint32_t config_table_hash(const void *key)
|
uint32_t config_table_hash(const void *key)
|
||||||
{
|
{
|
||||||
const char *var_name = (char *)key;
|
const char *var_name = (char *)key;
|
||||||
@ -48,6 +52,7 @@ int config_table_haskey(void *object, const void *key)
|
|||||||
int git_config_open(git_config **cfg_out, const char *path)
|
int git_config_open(git_config **cfg_out, const char *path)
|
||||||
{
|
{
|
||||||
git_config *cfg;
|
git_config *cfg;
|
||||||
|
int error = GIT_SUCCESS;
|
||||||
|
|
||||||
assert(cfg_out && path);
|
assert(cfg_out && path);
|
||||||
|
|
||||||
@ -58,15 +63,35 @@ int git_config_open(git_config **cfg_out, const char *path)
|
|||||||
memset(cfg, 0x0, sizeof(git_config));
|
memset(cfg, 0x0, sizeof(git_config));
|
||||||
|
|
||||||
cfg->file_path = git__strdup(path);
|
cfg->file_path = git__strdup(path);
|
||||||
if (cfg->file_path == NULL)
|
if (cfg->file_path == NULL){
|
||||||
return GIT_ENOMEM;
|
error = GIT_ENOMEM;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
cfg->vars = git_hashtable_alloc(16, config_table_hash, config_table_haskey);
|
cfg->vars = git_hashtable_alloc(16, config_table_hash, config_table_haskey);
|
||||||
if (cfg->vars == NULL)
|
if (cfg->vars == NULL){
|
||||||
return GIT_ENOMEM;
|
error = GIT_ENOMEM;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
*cfg_out = cfg;
|
*cfg_out = cfg;
|
||||||
return GIT_SUCCESS;
|
|
||||||
|
error = gitfo_read_file(&cfg->reader.buffer, cfg->file_path);
|
||||||
|
if(error < GIT_SUCCESS)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
/* Initialise the reading position */
|
||||||
|
cfg->reader.read_ptr = cfg->reader.buffer.data;
|
||||||
|
return config_parse(cfg);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if(cfg->vars)
|
||||||
|
git_hashtable_free(cfg->vars);
|
||||||
|
if(cfg->file_path)
|
||||||
|
free(cfg->file_path);
|
||||||
|
free(cfg);
|
||||||
|
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
void git_config_free(git_config *cfg)
|
void git_config_free(git_config *cfg)
|
||||||
|
Loading…
Reference in New Issue
Block a user