diff options
| -rw-r--r-- | src/config_file.c | 10 | ||||
| -rw-r--r-- | src/config_mem.c | 18 | ||||
| -rw-r--r-- | src/config_parse.c | 11 | ||||
| -rw-r--r-- | src/config_parse.h | 5 | ||||
| -rw-r--r-- | src/parse.h | 2 |
5 files changed, 34 insertions, 12 deletions
diff --git a/src/config_file.c b/src/config_file.c index d2238e811..51a3e93e2 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -1176,9 +1176,9 @@ static int config_write(diskfile_backend *cfg, const char *orig_key, const char { char *orig_section = NULL, *section = NULL, *orig_name, *name, *ldot; git_buf buf = GIT_BUF_INIT, contents = GIT_BUF_INIT; + git_config_parser parser = GIT_CONFIG_PARSER_INIT; git_filebuf file = GIT_FILEBUF_INIT; struct write_data write_data; - git_config_parser reader; int error; memset(&write_data, 0, sizeof(write_data)); @@ -1196,8 +1196,8 @@ static int config_write(diskfile_backend *cfg, const char *orig_key, const char if (error < 0 && error != GIT_ENOTFOUND) goto done; - reader.path = cfg->file.path; - git_parse_ctx_init(&reader.ctx, contents.ptr, contents.size); + if ((git_config_parser_init(&parser, cfg->file.path, contents.ptr, contents.size)) < 0) + goto done; ldot = strrchr(key, '.'); name = ldot + 1; @@ -1217,7 +1217,7 @@ static int config_write(diskfile_backend *cfg, const char *orig_key, const char write_data.preg = preg; write_data.value = value; - if ((error = git_config_parse(&reader, write_on_section, write_on_variable, + if ((error = git_config_parse(&parser, write_on_section, write_on_variable, write_on_comment, write_on_eof, &write_data)) < 0) goto done; @@ -1243,7 +1243,7 @@ done: git_buf_dispose(&buf); git_buf_dispose(&contents); git_filebuf_cleanup(&file); - git_parse_ctx_clear(&reader.ctx); + git_config_parser_dispose(&parser); return error; } diff --git a/src/config_mem.c b/src/config_mem.c index b563a972e..e4006db32 100644 --- a/src/config_mem.c +++ b/src/config_mem.c @@ -78,20 +78,24 @@ static int read_variable_cb( static int config_memory_open(git_config_backend *backend, git_config_level_t level, const git_repository *repo) { config_memory_backend *memory_backend = (config_memory_backend *) backend; + git_config_parser parser = GIT_PARSE_CTX_INIT; config_memory_parse_data parse_data; - git_config_parser reader; + int error; GIT_UNUSED(repo); - if (memory_backend->cfg.size == 0) - return 0; - - git_parse_ctx_init(&reader.ctx, memory_backend->cfg.ptr, memory_backend->cfg.size); - reader.path = "in-memory"; + if ((error = git_config_parser_init(&parser, "in-memory", memory_backend->cfg.ptr, + memory_backend->cfg.size)) < 0) + goto out; parse_data.entries = memory_backend->entries; parse_data.level = level; - return git_config_parse(&reader, NULL, read_variable_cb, NULL, NULL, &parse_data); + if ((error = git_config_parse(&parser, NULL, read_variable_cb, NULL, NULL, &parse_data)) < 0) + goto out; + +out: + git_config_parser_dispose(&parser); + return error; } static int config_memory_get(git_config_backend *backend, const char *key, git_config_entry **out) diff --git a/src/config_parse.c b/src/config_parse.c index bda1840fe..48ad1164f 100644 --- a/src/config_parse.c +++ b/src/config_parse.c @@ -474,6 +474,17 @@ out: return error; } +int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen) +{ + out->path = path; + return git_parse_ctx_init(&out->ctx, data, datalen); +} + +void git_config_parser_dispose(git_config_parser *parser) +{ + git_parse_ctx_clear(&parser->ctx); +} + int git_config_parse( git_config_parser *parser, git_config_parser_section_cb on_section, diff --git a/src/config_parse.h b/src/config_parse.h index a8657fd4a..0129ee309 100644 --- a/src/config_parse.h +++ b/src/config_parse.h @@ -22,6 +22,8 @@ typedef struct { git_parse_ctx ctx; } git_config_parser; +#define GIT_CONFIG_PARSER_INIT { NULL, GIT_PARSE_CTX_INIT } + typedef int (*git_config_parser_section_cb)( git_config_parser *parser, const char *current_section, @@ -49,6 +51,9 @@ typedef int (*git_config_parser_eof_cb)( const char *current_section, void *payload); +int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen); +void git_config_parser_dispose(git_config_parser *parser); + int git_config_parse( git_config_parser *parser, git_config_parser_section_cb on_section, diff --git a/src/parse.h b/src/parse.h index 21dcf9bd1..42a2aff1a 100644 --- a/src/parse.h +++ b/src/parse.h @@ -23,6 +23,8 @@ typedef struct { size_t line_num; } git_parse_ctx; +#define GIT_PARSE_CTX_INIT { 0 } + int git_parse_ctx_init(git_parse_ctx *ctx, const char *content, size_t content_len); void git_parse_ctx_clear(git_parse_ctx *ctx); |
