You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2013/05/10 16:58:56 UTC
svn commit: r1481041 [14/38] - in /subversion/branches/master-passphrase: ./
build/ build/ac-macros/ build/generator/ build/generator/templates/
contrib/client-side/svncopy/ contrib/hook-scripts/
contrib/server-side/fsfsfixer/ contrib/server-side/fsfsf...
Modified: subversion/branches/master-passphrase/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_ra_serf/update.c?rev=1481041&r1=1481040&r2=1481041&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_ra_serf/update.c Fri May 10 14:58:47 2013
@@ -31,6 +31,7 @@
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -93,8 +94,8 @@ typedef enum report_state_e {
We measure outstanding requests as the sum of NUM_ACTIVE_FETCHES and
NUM_ACTIVE_PROPFINDS in the report_context_t structure. */
-#define REQUEST_COUNT_TO_PAUSE 1000
-#define REQUEST_COUNT_TO_RESUME 100
+#define REQUEST_COUNT_TO_PAUSE 50
+#define REQUEST_COUNT_TO_RESUME 40
/* Forward-declare our report context. */
@@ -471,7 +472,7 @@ update_closed(svn_ra_serf__xml_estate_t
if (leaving_state == TARGET_REVISION)
{
- const char *rev = apr_hash_get(attrs, "rev", APR_HASH_KEY_STRING);
+ const char *rev = svn_hash_gets(attrs, "rev");
SVN_ERR(ctx->update_editor->set_target_revision(ctx->update_baton,
SVN_STR_TO_REV(rev),
@@ -516,7 +517,7 @@ get_best_connection(report_context_t *ct
### editor implementations (such as svnrdump's dump editor)
### simply can't handle the way ra_serf violates the editor v1
### drive ordering requirements.
- ###
+ ###
### See http://subversion.tigris.org/issues/show_bug.cgi?id=4116.
*/
if (ctx->report_received && (ctx->sess->max_connections > 2))
@@ -1023,26 +1024,6 @@ open_updated_file(report_info_t *info,
if (info->lock_token)
check_lock(info);
- /* Set all of the properties we received */
- SVN_ERR(svn_ra_serf__walk_all_props(info->props,
- info->base_name,
- info->base_rev,
- set_file_props, info,
- scratch_pool));
- SVN_ERR(svn_ra_serf__walk_all_props(info->dir->removed_props,
- info->base_name,
- info->base_rev,
- remove_file_props, info,
- scratch_pool));
- if (info->fetch_props)
- {
- SVN_ERR(svn_ra_serf__walk_all_props(info->props,
- info->url,
- ctx->target_rev,
- set_file_props, info,
- scratch_pool));
- }
-
/* Get (maybe) a textdelta window handler for transmitting file
content changes. */
if (info->fetch_file || force_apply_textdelta)
@@ -1063,6 +1044,28 @@ static svn_error_t *
close_updated_file(report_info_t *info,
apr_pool_t *scratch_pool)
{
+ report_context_t *ctx = info->dir->report_context;
+
+ /* Set all of the properties we received */
+ SVN_ERR(svn_ra_serf__walk_all_props(info->props,
+ info->base_name,
+ info->base_rev,
+ set_file_props, info,
+ scratch_pool));
+ SVN_ERR(svn_ra_serf__walk_all_props(info->dir->removed_props,
+ info->base_name,
+ info->base_rev,
+ remove_file_props, info,
+ scratch_pool));
+ if (info->fetch_props)
+ {
+ SVN_ERR(svn_ra_serf__walk_all_props(info->props,
+ info->url,
+ ctx->target_rev,
+ set_file_props, info,
+ scratch_pool));
+ }
+
/* Close the file via the editor. */
SVN_ERR(info->dir->report_context->update_editor->close_file(
info->file_baton, info->final_checksum, scratch_pool));
@@ -1358,7 +1361,7 @@ maybe_close_dir_chain(report_dir_t *dir)
report_dir_t *cur_dir = dir;
SVN_ERR(ensure_dir_opened(cur_dir));
-
+
while (cur_dir
&& !cur_dir->ref_count
&& cur_dir->tag_closed
@@ -1411,7 +1414,7 @@ handle_propchange_only(report_info_t *in
{
SVN_ERR(open_updated_file(info, FALSE, scratch_pool));
SVN_ERR(close_updated_file(info, scratch_pool));
-
+
/* We're done with our pool. */
svn_pool_destroy(info->pool);
@@ -1502,7 +1505,7 @@ fetch_file(report_context_t *ctx, report
{
svn_error_t *err = NULL;
svn_checksum_t *checksum = NULL;
-
+
/* Parse the optional SHA1 checksum (1.7+) */
err = svn_checksum_parse_hex(&checksum, svn_checksum_sha1,
info->final_sha1_checksum,
@@ -1534,7 +1537,7 @@ fetch_file(report_context_t *ctx, report
{
/* If we'll be doing a PROPFIND for this file... */
if (info->propfind_handler)
- {
+ {
/* ... then we'll just leave ourselves a little "todo"
about that fact (and we'll deal with the file content
stuff later, after we've handled that PROPFIND
@@ -1687,8 +1690,7 @@ start_report(svn_ra_serf__xml_parser_t *
info->base_name = info->dir->base_name;
info->name = info->dir->name;
- info->dir->repos_relpath = apr_hash_get(ctx->switched_paths, "",
- APR_HASH_KEY_STRING);
+ info->dir->repos_relpath = svn_hash_gets(ctx->switched_paths, "");
if (!info->dir->repos_relpath)
SVN_ERR(svn_ra_serf__get_relative_path(&info->dir->repos_relpath,
@@ -1742,8 +1744,7 @@ start_report(svn_ra_serf__xml_parser_t *
dir->pool);
info->name = dir->name;
- dir->repos_relpath = apr_hash_get(ctx->switched_paths, dir->name,
- APR_HASH_KEY_STRING);
+ dir->repos_relpath = svn_hash_gets(ctx->switched_paths, dir->name);
if (!dir->repos_relpath)
dir->repos_relpath = svn_relpath_join(dir->parent_dir->repos_relpath,
@@ -2198,7 +2199,7 @@ end_report(svn_ra_serf__xml_parser_t *pa
if (info->dir->fetch_props)
{
svn_ra_serf__list_t *list_item;
-
+
SVN_ERR(svn_ra_serf__deliver_props(&info->dir->propfind_handler,
info->dir->props, ctx->sess,
get_best_connection(ctx),
@@ -2247,8 +2248,7 @@ end_report(svn_ra_serf__xml_parser_t *pa
info->pool);
}
- info->lock_token = apr_hash_get(ctx->lock_path_tokens, info->name,
- APR_HASH_KEY_STRING);
+ info->lock_token = svn_hash_gets(ctx->lock_path_tokens, info->name);
if (info->lock_token && !info->fetch_props)
info->fetch_props = TRUE;
@@ -2267,8 +2267,7 @@ end_report(svn_ra_serf__xml_parser_t *pa
/* If this file is switched vs the editor root we should provide
its real url instead of the one calculated from the session root.
*/
- repos_relpath = apr_hash_get(ctx->switched_paths, info->name,
- APR_HASH_KEY_STRING);
+ repos_relpath = svn_hash_gets(ctx->switched_paths, info->name);
if (!repos_relpath)
{
@@ -2279,8 +2278,7 @@ end_report(svn_ra_serf__xml_parser_t *pa
SVN_ERR_ASSERT(*svn_relpath_dirname(info->name, info->pool)
== '\0');
- repos_relpath = apr_hash_get(ctx->switched_paths, "",
- APR_HASH_KEY_STRING);
+ repos_relpath = svn_hash_gets(ctx->switched_paths, "");
}
else
repos_relpath = svn_relpath_join(info->dir->repos_relpath,
@@ -2582,10 +2580,9 @@ set_path(void *report_baton,
if (lock_token)
{
- apr_hash_set(report->lock_path_tokens,
- apr_pstrdup(report->pool, path),
- APR_HASH_KEY_STRING,
- apr_pstrdup(report->pool, lock_token));
+ svn_hash_sets(report->lock_path_tokens,
+ apr_pstrdup(report->pool, path),
+ apr_pstrdup(report->pool, lock_token));
}
return SVN_NO_ERROR;
@@ -2657,16 +2654,16 @@ link_path(void *report_baton,
/* Store the switch roots to allow generating repos_relpaths from just
the working copy paths. (Needed for HTTPv2) */
path = apr_pstrdup(report->pool, path);
- apr_hash_set(report->switched_paths, path, APR_HASH_KEY_STRING,
- apr_pstrdup(report->pool, link+1));
+ svn_hash_sets(report->switched_paths,
+ path, apr_pstrdup(report->pool, link + 1));
if (!*path)
report->root_is_switched = TRUE;
if (lock_token)
{
- apr_hash_set(report->lock_path_tokens, path, APR_HASH_KEY_STRING,
- apr_pstrdup(report->pool, lock_token));
+ svn_hash_sets(report->lock_path_tokens,
+ path, apr_pstrdup(report->pool, lock_token));
}
return APR_SUCCESS;
@@ -2724,7 +2721,7 @@ create_update_report_body(serf_bucket_t
apr_off_t offset;
offset = 0;
- apr_file_seek(report->body_file, APR_SET, &offset);
+ SVN_ERR(svn_io_file_seek(report->body_file, APR_SET, &offset, pool));
*body_bkt = serf_bucket_file_create(report->body_file, alloc);
@@ -2890,6 +2887,15 @@ finish_report(void *report_baton,
waittime_left = sess->timeout;
}
+ if (status && handler->sline.code != 200)
+ {
+ return svn_error_trace(
+ svn_error_compose_create(
+ svn_ra_serf__error_on_status(handler->sline.code,
+ handler->path,
+ handler->location),
+ err));
+ }
SVN_ERR(err);
if (status)
{
@@ -2992,7 +2998,7 @@ finish_report(void *report_baton,
report->num_active_fetches--;
/* See if the parent directory of this fetched item (and
- perhaps even parents of that) can be closed now.
+ perhaps even parents of that) can be closed now.
NOTE: This could delete cur_dir->pool, from which is
allocated the list item in report->done_fetches.
@@ -3097,8 +3103,13 @@ finish_report(void *report_baton,
err = report->update_editor->close_edit(report->update_baton, iterpool);
}
else
- err = svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("Missing update-report close tag"));
+ {
+ /* Tell the editor that something failed */
+ err = report->update_editor->abort_edit(report->update_baton, iterpool);
+
+ err = svn_error_create(SVN_ERR_RA_DAV_MALFORMED_DATA, err,
+ _("Missing update-report close tag"));
+ }
svn_pool_destroy(iterpool);
return svn_error_trace(err);
@@ -3143,10 +3154,9 @@ make_update_reporter(svn_ra_session_t *r
svn_boolean_t send_copyfrom_args,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *result_pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- /* ### would be nice to get a SCRATCH_POOL passed to us. */
- apr_pool_t *scratch_pool = svn_pool_create(result_pool);
report_context_t *report;
const svn_delta_editor_t *filter_editor;
void *filter_baton;
@@ -3327,7 +3337,6 @@ make_update_reporter(svn_ra_session_t *r
SVN_ERR(svn_io_file_write_full(report->body_file, buf->data, buf->len,
NULL, scratch_pool));
- svn_pool_destroy(scratch_pool);
return SVN_NO_ERROR;
}
@@ -3339,17 +3348,22 @@ svn_ra_serf__do_update(svn_ra_session_t
const char *update_target,
svn_depth_t depth,
svn_boolean_t send_copyfrom_args,
+ svn_boolean_t ignore_ancestry,
const svn_delta_editor_t *update_editor,
void *update_baton,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
- return make_update_reporter(ra_session, reporter, report_baton,
- revision_to_update_to,
- session->session_url.path, NULL, update_target,
- depth, FALSE, TRUE, send_copyfrom_args,
- update_editor, update_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision_to_update_to,
+ session->session_url.path, NULL, update_target,
+ depth, ignore_ancestry, TRUE /* text_deltas */,
+ send_copyfrom_args,
+ update_editor, update_baton,
+ result_pool, scratch_pool));
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -3367,12 +3381,16 @@ svn_ra_serf__do_diff(svn_ra_session_t *r
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
- return make_update_reporter(ra_session, reporter, report_baton,
- revision,
- session->session_url.path, versus_url, diff_target,
- depth, ignore_ancestry, text_deltas, FALSE,
- diff_editor, diff_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision,
+ session->session_url.path, versus_url, diff_target,
+ depth, ignore_ancestry, text_deltas, FALSE,
+ diff_editor, diff_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -3387,12 +3405,16 @@ svn_ra_serf__do_status(svn_ra_session_t
apr_pool_t *pool)
{
svn_ra_serf__session_t *session = ra_session->priv;
+ apr_pool_t *scratch_pool = svn_pool_create(pool);
- return make_update_reporter(ra_session, reporter, report_baton,
- revision,
- session->session_url.path, NULL, status_target,
- depth, FALSE, FALSE, FALSE,
- status_editor, status_baton, pool);
+ SVN_ERR(make_update_reporter(ra_session, reporter, report_baton,
+ revision,
+ session->session_url.path, NULL, status_target,
+ depth, FALSE, FALSE, FALSE,
+ status_editor, status_baton,
+ pool, scratch_pool));
+ svn_pool_destroy(scratch_pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
@@ -3421,15 +3443,15 @@ svn_ra_serf__do_switch(svn_ra_session_t
TRUE /* text_deltas */,
send_copyfrom_args,
switch_editor, switch_baton,
- result_pool);
+ result_pool, scratch_pool);
}
/* Helper svn_ra_serf__get_file(). Attempts to fetch file contents
* using SESSION->wc_callbacks->get_wc_contents() if sha1 property is
* present in PROPS.
- *
+ *
* Sets *FOUND_P to TRUE if file contents was successfuly fetched.
- *
+ *
* Performs all temporary allocations in POOL.
*/
static svn_error_t *
@@ -3455,7 +3477,7 @@ try_get_wc_contents(svn_boolean_t *found
}
- svn_props = apr_hash_get(props, SVN_DAV_PROP_NS_DAV, APR_HASH_KEY_STRING);
+ svn_props = svn_hash_gets(props, SVN_DAV_PROP_NS_DAV);
if (!svn_props)
{
/* No properties -- therefore no checksum property -- in response. */
@@ -3482,7 +3504,7 @@ try_get_wc_contents(svn_boolean_t *found
/* Ignore errors for now. */
return SVN_NO_ERROR;
}
-
+
if (wc_stream)
{
SVN_ERR(svn_stream_copy3(wc_stream,
@@ -3507,7 +3529,7 @@ svn_ra_serf__get_file(svn_ra_session_t *
svn_ra_serf__connection_t *conn;
const char *fetch_url;
apr_hash_t *fetch_props;
- svn_kind_t res_kind;
+ svn_node_kind_t res_kind;
const svn_ra_serf__dav_props_t *which_props;
/* What connection should we go on? */
@@ -3545,7 +3567,7 @@ svn_ra_serf__get_file(svn_ra_session_t *
{
which_props = check_path_props;
}
-
+
SVN_ERR(svn_ra_serf__fetch_node_props(&fetch_props, conn, fetch_url,
SVN_INVALID_REVNUM,
which_props,
@@ -3553,7 +3575,7 @@ svn_ra_serf__get_file(svn_ra_session_t *
/* Verify that resource type is not collection. */
SVN_ERR(svn_ra_serf__get_resource_type(&res_kind, fetch_props));
- if (res_kind != svn_kind_file)
+ if (res_kind != svn_node_file)
{
return svn_error_create(SVN_ERR_FS_NOT_FILE, NULL,
_("Can't get text contents of a directory"));
Modified: subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c?rev=1481041&r1=1481040&r2=1481041&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_ra_serf/util.c Fri May 10 14:58:47 2013
@@ -35,6 +35,7 @@
#include <expat.h>
+#include "svn_hash.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_private_config.h"
@@ -191,12 +192,12 @@ static char *
convert_organisation_to_str(apr_hash_t *org, apr_pool_t *pool)
{
return apr_psprintf(pool, "%s, %s, %s, %s, %s (%s)",
- (char*)apr_hash_get(org, "OU", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "O", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "L", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "ST", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "C", APR_HASH_KEY_STRING),
- (char*)apr_hash_get(org, "E", APR_HASH_KEY_STRING));
+ (char*)svn_hash_gets(org, "OU"),
+ (char*)svn_hash_gets(org, "O"),
+ (char*)svn_hash_gets(org, "L"),
+ (char*)svn_hash_gets(org, "ST"),
+ (char*)svn_hash_gets(org, "C"),
+ (char*)svn_hash_gets(org, "E"));
}
/* This function is called on receiving a ssl certificate of a server when
@@ -234,17 +235,15 @@ ssl_server_cert(void *baton, int failure
issuer = serf_ssl_cert_issuer(cert, scratch_pool);
serf_cert = serf_ssl_cert_certificate(cert, scratch_pool);
- cert_info.hostname = apr_hash_get(subject, "CN", APR_HASH_KEY_STRING);
- san = apr_hash_get(serf_cert, "subjectAltName", APR_HASH_KEY_STRING);
- cert_info.fingerprint = apr_hash_get(serf_cert, "sha1", APR_HASH_KEY_STRING);
+ cert_info.hostname = svn_hash_gets(subject, "CN");
+ san = svn_hash_gets(serf_cert, "subjectAltName");
+ cert_info.fingerprint = svn_hash_gets(serf_cert, "sha1");
if (! cert_info.fingerprint)
cert_info.fingerprint = apr_pstrdup(scratch_pool, "<unknown>");
- cert_info.valid_from = apr_hash_get(serf_cert, "notBefore",
- APR_HASH_KEY_STRING);
+ cert_info.valid_from = svn_hash_gets(serf_cert, "notBefore");
if (! cert_info.valid_from)
cert_info.valid_from = apr_pstrdup(scratch_pool, "[invalid date]");
- cert_info.valid_until = apr_hash_get(serf_cert, "notAfter",
- APR_HASH_KEY_STRING);
+ cert_info.valid_until = svn_hash_gets(serf_cert, "notAfter");
if (! cert_info.valid_until)
cert_info.valid_until = apr_pstrdup(scratch_pool, "[invalid date]");
cert_info.issuer_dname = convert_organisation_to_str(issuer, scratch_pool);
@@ -658,7 +657,7 @@ setup_serf_req(serf_request_t *request,
SVN_ERR(svn_ra_serf__copy_into_spillbuf(&buf, body_bkt,
request_pool,
scratch_pool));
- /* Destroy original bucket since it content is already copied
+ /* Destroy original bucket since it content is already copied
to spillbuf. */
serf_bucket_destroy(body_bkt);
@@ -724,7 +723,7 @@ svn_ra_serf__context_run_wait(svn_boolea
{
apr_pool_t *iterpool;
apr_interval_time_t waittime_left = sess->timeout;
-
+
assert(sess->pending_error == SVN_NO_ERROR);
iterpool = svn_pool_create(scratch_pool);
@@ -762,7 +761,7 @@ svn_ra_serf__context_run_wait(svn_boolea
{
waittime_left -= SVN_RA_SERF__CONTEXT_RUN_DURATION;
}
- else
+ else
{
return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT, NULL,
_("Connection timed out"));
@@ -1420,7 +1419,7 @@ xml_parser_cleanup(void *baton)
if (*xmlp)
{
- XML_ParserFree(*xmlp);
+ (void) XML_ParserFree(*xmlp);
*xmlp = NULL;
}
@@ -1452,7 +1451,7 @@ svn_ra_serf__process_pending(svn_ra_serf
/* Parsing the pending conten in the spillbuf will result in many disc i/o
operations. This can be so slow that we don't run the network event
processing loop often enough, resulting in timed out connections.
-
+
So we limit the amounts of bytes parsed per iteration.
*/
while (cur_read < PENDING_TO_PARSE)
@@ -1776,7 +1775,7 @@ svn_ra_serf__credentials_callback(char *
(void) save_error(session,
svn_error_create(
SVN_ERR_AUTHN_FAILED, NULL,
- _("No more credentials or we tried too many"
+ _("No more credentials or we tried too many "
"times.\nAuthentication failed")));
return SVN_ERR_AUTHN_FAILED;
}
@@ -1795,7 +1794,7 @@ svn_ra_serf__credentials_callback(char *
if (!session->proxy_username || session->proxy_auth_attempts > 4)
{
/* No more credentials. */
- (void) save_error(session,
+ (void) save_error(session,
svn_error_create(
SVN_ERR_AUTHN_FAILED, NULL,
_("Proxy authentication failed")));
@@ -2266,8 +2265,7 @@ svn_ra_serf__discover_vcc(const char **v
*vcc_url = svn_prop_get_value(ns_props,
"version-controlled-configuration");
- ns_props = apr_hash_get(props,
- SVN_DAV_PROP_NS_DAV, APR_HASH_KEY_STRING);
+ ns_props = svn_hash_gets(props, SVN_DAV_PROP_NS_DAV);
relative_path = svn_prop_get_value(ns_props,
"baseline-relative-path");
uuid = svn_prop_get_value(ns_props, "repository-uuid");
Modified: subversion/branches/master-passphrase/subversion/libsvn_ra_serf/xml.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/subversion/libsvn_ra_serf/xml.c?rev=1481041&r1=1481040&r2=1481041&view=diff
==============================================================================
--- subversion/branches/master-passphrase/subversion/libsvn_ra_serf/xml.c (original)
+++ subversion/branches/master-passphrase/subversion/libsvn_ra_serf/xml.c Fri May 10 14:58:47 2013
@@ -26,6 +26,7 @@
#include <apr_uri.h>
#include <serf.h>
+#include "svn_hash.h"
#include "svn_pools.h"
#include "svn_ra.h"
#include "svn_dav.h"
@@ -218,7 +219,7 @@ svn_ra_serf__expand_ns(svn_ra_serf__dav_
return;
}
}
- }
+ }
/* If the prefix is not found, then the name is NOT within a
namespace. */
@@ -560,9 +561,9 @@ svn_ra_serf__xml_note(svn_ra_serf__xml_e
/* In all likelihood, NAME is a string constant. But we can't really
be sure. And it isn't like we're storing a billion of these into
the state pool. */
- apr_hash_set(scan->attrs,
- apr_pstrdup(scan->state_pool, name), APR_HASH_KEY_STRING,
- apr_pstrdup(scan->state_pool, value));
+ svn_hash_sets(scan->attrs,
+ apr_pstrdup(scan->state_pool, name),
+ apr_pstrdup(scan->state_pool, value));
}
@@ -675,8 +676,8 @@ svn_ra_serf__xml_cb_start(svn_ra_serf__x
}
if (value)
- apr_hash_set(new_xes->attrs, name, APR_HASH_KEY_STRING,
- apr_pstrdup(new_pool, value));
+ svn_hash_sets(new_xes->attrs, name,
+ apr_pstrdup(new_pool, value));
}
}
}