mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-28 12:13:18 +00:00
Expose patch serialization to git_buf
Returning library-allocated strings from libgit2 works fine on Linux, but may cause problems on Windows because there is no one C Runtime that everything links against. With libgit2 not exposing its own allocator, freeing the string is a gamble. git_patch_to_str already serializes to a buffer, then returns the underlying memory. Expose the functionality directly, so callers can use the git_buf_free function to free the memory later.
This commit is contained in:
parent
af2b969b6f
commit
450e8e9e62
@ -242,6 +242,16 @@ GIT_EXTERN(int) git_patch_to_str(
|
||||
char **string,
|
||||
git_patch *patch);
|
||||
|
||||
/**
|
||||
* Get the content of a patch as a single diff text.
|
||||
*
|
||||
* @param out The git_buf to be filled in
|
||||
* @param patch A git_patch representing changes to one file
|
||||
* @return 0 on success, <0 on failure.
|
||||
*/
|
||||
GIT_EXTERN(int) git_patch_to_buf(
|
||||
git_buf *out,
|
||||
git_patch *patch);
|
||||
|
||||
GIT_END_DECL
|
||||
|
||||
|
@ -452,7 +452,15 @@ static int diff_print_to_buffer_cb(
|
||||
return git_buf_put(output, line->content, line->content_len);
|
||||
}
|
||||
|
||||
/* print a git_patch to a string buffer */
|
||||
/* print a git_patch to a git_buf */
|
||||
int git_patch_to_buf(
|
||||
git_buf *out,
|
||||
git_patch *patch)
|
||||
{
|
||||
return git_patch_print(patch, diff_print_to_buffer_cb, out);
|
||||
}
|
||||
|
||||
/* print a git_patch to a char* */
|
||||
int git_patch_to_str(
|
||||
char **string,
|
||||
git_patch *patch)
|
||||
@ -460,7 +468,7 @@ int git_patch_to_str(
|
||||
int error;
|
||||
git_buf output = GIT_BUF_INIT;
|
||||
|
||||
if (!(error = git_patch_print(patch, diff_print_to_buffer_cb, &output)))
|
||||
if (!(error = git_patch_to_buf(&output, patch)))
|
||||
*string = git_buf_detach(&output);
|
||||
else {
|
||||
git_buf_free(&output);
|
||||
|
Loading…
Reference in New Issue
Block a user