static int parse_header_path(char **out, git_patch_parse_ctx *ctx) { git_buf path = GIT_BUF_INIT; int error = parse_header_path_buf(&path, ctx, header_path_len(ctx)); *out = git_buf_detach(&path); return error; }
static int parse_header_rename( char **out, git_patch_parse_ctx *ctx) { git_buf path = GIT_BUF_INIT; if (parse_header_path_buf(&path, ctx, header_path_len(ctx)) < 0) return -1; /* Note: the `rename from` and `rename to` lines include the literal * filename. They do *not* include the prefix. (Who needs consistency?) */ *out = git_buf_detach(&path); return 0; }
static int parse_header_path_buf(git_buf *path, git_patch_parse_ctx *ctx) { int path_len, error = 0; path_len = header_path_len(ctx); if ((error = git_buf_put(path, ctx->line, path_len)) < 0) goto done; parse_advance_chars(ctx, path_len); git_buf_rtrim(path); if (path->size > 0 && path->ptr[0] == '"') error = git_buf_unquote(path); if (error < 0) goto done; git_path_squash_slashes(path); done: return error; }