summaryrefslogtreecommitdiff
path: root/subversion/libsvn_delta/text_delta.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_delta/text_delta.c')
-rw-r--r--subversion/libsvn_delta/text_delta.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/subversion/libsvn_delta/text_delta.c b/subversion/libsvn_delta/text_delta.c
index 04eca8afb8c10..4f834988bf385 100644
--- a/subversion/libsvn_delta/text_delta.c
+++ b/subversion/libsvn_delta/text_delta.c
@@ -102,7 +102,7 @@ struct apply_baton {
char *tbuf; /* Target buffer */
apr_size_t tbuf_size; /* Allocated target buffer space */
- apr_md5_ctx_t md5_context; /* Leads to result_digest below. */
+ svn_checksum_ctx_t *md5_context; /* Leads to result_digest below. */
unsigned char *result_digest; /* MD5 digest of resultant fulltext;
must point to at least APR_MD5_DIGESTSIZE
bytes of storage. */
@@ -180,8 +180,7 @@ svn_txdelta_window_dup(const svn_txdelta_window_t *window,
build_baton.num_ops = window->num_ops;
build_baton.src_ops = window->src_ops;
build_baton.ops_size = window->num_ops;
- build_baton.ops = apr_palloc(pool, ops_size);
- memcpy(build_baton.ops, window->ops, ops_size);
+ build_baton.ops = apr_pmemdup(pool, window->ops, ops_size);
build_baton.new_data =
svn_stringbuf_create_from_string(window->new_data, pool);
@@ -721,15 +720,23 @@ apply_window(svn_txdelta_window_t *window, void *baton)
{
struct apply_baton *ab = (struct apply_baton *) baton;
apr_size_t len;
- svn_error_t *err;
if (window == NULL)
{
+ svn_error_t *err = SVN_NO_ERROR;
+
/* We're done; just clean up. */
if (ab->result_digest)
- apr_md5_final(ab->result_digest, &(ab->md5_context));
+ {
+ svn_checksum_t *md5_checksum;
+
+ err = svn_checksum_final(&md5_checksum, ab->md5_context, ab->pool);
+ if (!err)
+ memcpy(ab->result_digest, md5_checksum->digest,
+ svn_checksum_size(md5_checksum));
+ }
- err = svn_stream_close(ab->target);
+ err = svn_error_compose_create(err, svn_stream_close(ab->target));
svn_pool_destroy(ab->pool);
return err;
@@ -773,12 +780,10 @@ apply_window(svn_txdelta_window_t *window, void *baton)
if (ab->sbuf_len < window->sview_len)
{
len = window->sview_len - ab->sbuf_len;
- err = svn_stream_read_full(ab->source, ab->sbuf + ab->sbuf_len, &len);
- if (err == SVN_NO_ERROR && len != window->sview_len - ab->sbuf_len)
- err = svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
- "Delta source ended unexpectedly");
- if (err != SVN_NO_ERROR)
- return err;
+ SVN_ERR(svn_stream_read_full(ab->source, ab->sbuf + ab->sbuf_len, &len));
+ if (len != window->sview_len - ab->sbuf_len)
+ return svn_error_create(SVN_ERR_INCOMPLETE_DATA, NULL,
+ "Delta source ended unexpectedly");
ab->sbuf_len = window->sview_len;
}
@@ -792,7 +797,7 @@ apply_window(svn_txdelta_window_t *window, void *baton)
/* Just update the context here. */
if (ab->result_digest)
- apr_md5_update(&(ab->md5_context), ab->tbuf, len);
+ SVN_ERR(svn_checksum_update(ab->md5_context, ab->tbuf, len));
return svn_stream_write(ab->target, ab->tbuf, &len);
}
@@ -823,7 +828,7 @@ svn_txdelta_apply(svn_stream_t *source,
ab->result_digest = result_digest;
if (result_digest)
- apr_md5_init(&(ab->md5_context));
+ ab->md5_context = svn_checksum_ctx_create(svn_checksum_md5, subpool);
if (error_info)
ab->error_info = apr_pstrdup(subpool, error_info);