gout

A static git page generator
git clone https://git.bracken.jp/gout.git
Log | Files | Refs | README | LICENSE

commit 49ff05d0020e362d1d936c61fac7aad7a3a880e4
parent b7f749eb3782322e9de02f0dc6fbbc3866f4f1d2
Author: Chris Bracken <chris@bracken.jp>
Date:   Tue, 17 Feb 2026 18:15:01 +0900

delta: make GitDelta.{old,new}_file_path owned copies

Diffstat:
Msrc/git/delta.c | 19++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/git/delta.c b/src/git/delta.c @@ -167,32 +167,28 @@ char status_for_delta(const git_diff_delta* delta) { struct GitDelta { bool is_binary; char status; - const char* old_file_path; - const char* new_file_path; + char* old_file_path; + char* new_file_path; size_t addcount; size_t delcount; GitHunk** hunks; size_t hunks_len; - - git_patch* patch; }; GitDelta* gitdelta_create(git_patch* patch) { GitDelta* delta = ecalloc(1, sizeof(GitDelta)); - /* Take ownership of patch. */ - delta->patch = patch; - const git_diff_delta* git_delta = git_patch_get_delta(patch); delta->status = status_for_delta(git_delta); delta->is_binary = git_delta->flags & GIT_DIFF_FLAG_BINARY; - delta->old_file_path = git_delta->old_file.path; - delta->new_file_path = git_delta->new_file.path; + delta->old_file_path = git_delta->old_file.path ? estrdup(git_delta->old_file.path) : NULL; + delta->new_file_path = git_delta->new_file.path ? estrdup(git_delta->new_file.path) : NULL; delta->addcount = 0; delta->delcount = 0; /* Skip stats for binary data. */ if (delta->is_binary) { + git_patch_free(patch); return delta; } @@ -224,6 +220,7 @@ GitDelta* gitdelta_create(git_patch* patch) { } } } + git_patch_free(patch); return delta; } @@ -231,14 +228,14 @@ void gitdelta_free(GitDelta* delta) { if (!delta) { return; } + free(delta->old_file_path); + free(delta->new_file_path); for (size_t i = 0; i < delta->hunks_len; i++) { githunk_free(delta->hunks[i]); delta->hunks[i] = NULL; } free(delta->hunks); delta->hunks = NULL; - git_patch_free(delta->patch); - delta->patch = NULL; free(delta); }