Commit 450e8e9e by Nicolas Hake

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.
parent af2b969b
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment