You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2015/09/02 19:40:02 UTC
svn commit: r1700855 - in /subversion/trunk/subversion:
include/private/svn_ra_svn_private.h libsvn_ra_svn/client.c
libsvn_ra_svn/cyrus_auth.c libsvn_ra_svn/internal_auth.c
libsvn_ra_svn/marshal.c svnserve/serve.c
Author: stefan2
Date: Wed Sep 2 17:40:02 2015
New Revision: 1700855
URL: http://svn.apache.org/r1700855
Log:
Continue work towards using a specialized list type for ra_svn items.
This introduces a typesafe access macro replacing APR_ARRAY_IDX for
svn_ra_svn__list_t. The generated code is still the same but specifics
of the list data type are now hidden in that new macro.
* subversion/include/private/svn_ra_svn_private.h
(SVN_RA_SVN__LIST_ITEM): Declare new macro.
* subversion/libsvn_ra_svn/client.c
(parse_prop_diffs,
parse_iproplist,
ra_svn_get_dir,
perform_ra_svn_log,
ra_svn_get_locks): Use the new macro to access for svn_ra_svn__list_t
throughout the code.
* subversion/libsvn_ra_svn/cyrus_auth.c
(svn_ra_svn__do_cyrus_auth): Same.
* subversion/libsvn_ra_svn/internal_auth.c
(svn_ra_svn__find_mech): Same.
* subversion/libsvn_ra_svn/marshal.c
(svn_ra_svn__to_public_array,
svn_ra_svn__set_capabilities,
vparse_tuple,
svn_ra_svn__parse_proplist,
svn_ra_svn__handle_failure_status,
svn_ra_svn__read_string,
svn_ra_svn__read_cstring,
svn_ra_svn__read_word,
svn_ra_svn__read_revision,
svn_ra_svn__read_boolean,
svn_ra_svn__read_list): Same.
* subversion/svnserve/serve.c
(add_lock_tokens,
unlock_paths,
construct_server_baton): Same.
Modified:
subversion/trunk/subversion/include/private/svn_ra_svn_private.h
subversion/trunk/subversion/libsvn_ra_svn/client.c
subversion/trunk/subversion/libsvn_ra_svn/cyrus_auth.c
subversion/trunk/subversion/libsvn_ra_svn/internal_auth.c
subversion/trunk/subversion/libsvn_ra_svn/marshal.c
subversion/trunk/subversion/svnserve/serve.c
Modified: subversion/trunk/subversion/include/private/svn_ra_svn_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_ra_svn_private.h?rev=1700855&r1=1700854&r2=1700855&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_ra_svn_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_ra_svn_private.h Wed Sep 2 17:40:02 2015
@@ -37,6 +37,11 @@ extern "C" {
/* A list of svn_ra_svn__item_t objects. */
typedef apr_array_header_t svn_ra_svn__list_t;
+/* List element access macro. This is for transitional usage only.
+ * Once svn_ra_svn__list_t is finalized, this macro will become obsolete. */
+#define SVN_RA_SVN__LIST_ITEM(list, idx) \
+ APR_ARRAY_IDX(list, idx, svn_ra_svn__item_t)
+
/** Memory representation of an on-the-wire data item. */
typedef struct svn_ra_svn__item_t
{
Modified: subversion/trunk/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/client.c?rev=1700855&r1=1700854&r2=1700855&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/client.c Wed Sep 2 17:40:02 2015
@@ -198,7 +198,7 @@ static svn_error_t *parse_prop_diffs(con
for (i = 0; i < list->nelts; i++)
{
svn_prop_t *prop;
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(list, i, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(list, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -1220,8 +1220,7 @@ parse_iproplist(apr_array_header_t **inh
apr_hash_index_t *hi;
svn_prop_inherited_item_t *new_iprop =
apr_palloc(result_pool, sizeof(*new_iprop));
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(iproplist, i,
- svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(iproplist, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(
SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -1385,7 +1384,7 @@ static svn_error_t *ra_svn_get_dir(svn_r
svn_dirent_t *dirent;
apr_uint64_t size;
svn_revnum_t crev;
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(dirlist, i, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(dirlist, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -1478,7 +1477,7 @@ static svn_error_t *ra_svn_get_mergeinfo
svn_mergeinfo_t for_path;
const char *to_parse;
- elt = &((svn_ra_svn__item_t *) mergeinfo_tuple->elts)[i];
+ elt = &SVN_RA_SVN__LIST_ITEM(mergeinfo_tuple, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Mergeinfo element is not a list"));
@@ -1743,8 +1742,7 @@ perform_ra_svn_log(svn_error_t **outer_e
const char *copy_path, *action, *kind_str;
apr_uint64_t text_mods, prop_mods;
svn_revnum_t copy_rev;
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(cplist, i,
- svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(cplist, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
@@ -2658,7 +2656,7 @@ static svn_error_t *ra_svn_get_locks(svn
for (i = 0; i < list->nelts; ++i)
{
svn_lock_t *lock;
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(list, i, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(list, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
Modified: subversion/trunk/subversion/libsvn_ra_svn/cyrus_auth.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/cyrus_auth.c?rev=1700855&r1=1700854&r2=1700855&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/cyrus_auth.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/cyrus_auth.c Wed Sep 2 17:40:02 2015
@@ -856,8 +856,7 @@ svn_ra_svn__do_cyrus_auth(svn_ra_svn__se
/* Create a string containing the list of mechanisms, separated by spaces. */
for (i = 0; i < mechlist->nelts; i++)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(mechlist, i,
- svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(mechlist, i);
mechstring = apr_pstrcat(pool,
mechstring,
i == 0 ? "" : " ",
Modified: subversion/trunk/subversion/libsvn_ra_svn/internal_auth.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/internal_auth.c?rev=1700855&r1=1700854&r2=1700855&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/internal_auth.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/internal_auth.c Wed Sep 2 17:40:02 2015
@@ -45,7 +45,7 @@ svn_boolean_t svn_ra_svn__find_mech(cons
for (i = 0; i < mechlist->nelts; i++)
{
- elt = &APR_ARRAY_IDX(mechlist, i, svn_ra_svn__item_t);
+ elt = &SVN_RA_SVN__LIST_ITEM(mechlist, i);
if (elt->kind == SVN_RA_SVN_WORD && strcmp(elt->u.word, mech) == 0)
return TRUE;
}
Modified: subversion/trunk/subversion/libsvn_ra_svn/marshal.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_svn/marshal.c?rev=1700855&r1=1700854&r2=1700855&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_svn/marshal.c (original)
+++ subversion/trunk/subversion/libsvn_ra_svn/marshal.c Wed Sep 2 17:40:02 2015
@@ -117,8 +117,7 @@ svn_ra_svn__to_public_array(const svn_ra
for (i = 0; i < source->nelts; ++i)
{
svn_ra_svn_item_t *sub_target = apr_array_push(result);
- svn_ra_svn__item_t *sub_source = &APR_ARRAY_IDX(source, i,
- svn_ra_svn__item_t);
+ svn_ra_svn__item_t *sub_source = &SVN_RA_SVN__LIST_ITEM(source, i);
svn_ra_svn__to_public_item(sub_target, sub_source, result_pool);
}
@@ -242,7 +241,7 @@ svn_ra_svn__set_capabilities(svn_ra_svn_
for (i = 0; i < list->nelts; i++)
{
- item = &APR_ARRAY_IDX(list, i, svn_ra_svn__item_t);
+ item = &SVN_RA_SVN__LIST_ITEM(list, i);
if (item->kind != SVN_RA_SVN_WORD)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Capability entry is not a word"));
@@ -1468,7 +1467,7 @@ vparse_tuple(const svn_ra_svn__list_t *i
/* '?' just means the tuple may stop; skip past it. */
if (**fmt == '?')
(*fmt)++;
- elt = &APR_ARRAY_IDX(items, count, svn_ra_svn__item_t);
+ elt = &SVN_RA_SVN__LIST_ITEM(items, count);
if (**fmt == '(' && elt->kind == SVN_RA_SVN_LIST)
{
(*fmt)++;
@@ -1624,7 +1623,7 @@ svn_ra_svn__parse_proplist(const svn_ra_
*props = svn_hash__make(pool);
for (i = 0; i < list->nelts; i++)
{
- elt = &APR_ARRAY_IDX(list, i, svn_ra_svn__item_t);
+ elt = &SVN_RA_SVN__LIST_ITEM(list, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Proplist element not a list"));
@@ -1673,7 +1672,7 @@ svn_ra_svn__handle_failure_status(const
for (i = params->nelts - 1; i >= 0; i--)
{
svn_pool_clear(subpool);
- elt = &APR_ARRAY_IDX(params, i, svn_ra_svn__item_t);
+ elt = &SVN_RA_SVN__LIST_ITEM(params, i);
if (elt->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Malformed error list"));
@@ -2774,7 +2773,7 @@ svn_ra_svn__read_string(const svn_ra_svn
int idx,
svn_string_t **result)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(items, idx, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(items, idx);
CHECK_PROTOCOL_COND(elt->kind == SVN_RA_SVN_STRING);
*result = elt->u.string;
@@ -2788,7 +2787,7 @@ svn_ra_svn__read_cstring(const svn_ra_sv
int idx,
const char **result)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(items, idx, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(items, idx);
CHECK_PROTOCOL_COND(elt->kind == SVN_RA_SVN_STRING);
*result = elt->u.string->data;
@@ -2802,7 +2801,7 @@ svn_ra_svn__read_word(const svn_ra_svn__
int idx,
const char **result)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(items, idx, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(items, idx);
CHECK_PROTOCOL_COND(elt->kind == SVN_RA_SVN_WORD);
*result = elt->u.word;
@@ -2816,7 +2815,7 @@ svn_ra_svn__read_revision(const svn_ra_s
int idx,
svn_revnum_t *result)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(items, idx, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(items, idx);
CHECK_PROTOCOL_COND(elt->kind == SVN_RA_SVN_NUMBER);
*result = (svn_revnum_t)elt->u.number;
@@ -2830,7 +2829,7 @@ svn_ra_svn__read_boolean(const svn_ra_sv
int idx,
apr_uint64_t *result)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(items, idx, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(items, idx);
CHECK_PROTOCOL_COND(elt->kind == SVN_RA_SVN_WORD);
if (elt->u.word[0] == 't' && strcmp(elt->u.word, "true") == 0)
*result = TRUE;
@@ -2849,7 +2848,7 @@ svn_ra_svn__read_list(const svn_ra_svn__
int idx,
const svn_ra_svn__list_t **result)
{
- svn_ra_svn__item_t *elt = &APR_ARRAY_IDX(items, idx, svn_ra_svn__item_t);
+ svn_ra_svn__item_t *elt = &SVN_RA_SVN__LIST_ITEM(items, idx);
CHECK_PROTOCOL_COND(elt->kind == SVN_RA_SVN_LIST);
*result = elt->u.list;
Modified: subversion/trunk/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnserve/serve.c?rev=1700855&r1=1700854&r2=1700855&view=diff
==============================================================================
--- subversion/trunk/subversion/svnserve/serve.c (original)
+++ subversion/trunk/subversion/svnserve/serve.c Wed Sep 2 17:40:02 2015
@@ -1338,18 +1338,17 @@ add_lock_tokens(const svn_ra_svn__list_t
{
const char *path, *token, *full_path;
svn_ra_svn__item_t *path_item, *token_item;
- svn_ra_svn__item_t *item = &APR_ARRAY_IDX(lock_tokens, i,
- svn_ra_svn__item_t);
+ svn_ra_svn__item_t *item = &SVN_RA_SVN__LIST_ITEM(lock_tokens, i);
if (item->kind != SVN_RA_SVN_LIST)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
"Lock tokens aren't a list of lists");
- path_item = &APR_ARRAY_IDX(item->u.list, 0, svn_ra_svn__item_t);
+ path_item = &SVN_RA_SVN__LIST_ITEM(item->u.list, 0);
if (path_item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
"Lock path isn't a string");
- token_item = &APR_ARRAY_IDX(item->u.list, 1, svn_ra_svn__item_t);
+ token_item = &SVN_RA_SVN__LIST_ITEM(item->u.list, 1);
if (token_item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
"Lock token isn't a string");
@@ -1402,9 +1401,9 @@ unlock_paths(const svn_ra_svn__list_t *l
svn_ra_svn__item_t *item, *path_item, *token_item;
const char *path, *token, *full_path;
- item = &APR_ARRAY_IDX(lock_tokens, i, svn_ra_svn__item_t);
- path_item = &APR_ARRAY_IDX(item->u.list, 0, svn_ra_svn__item_t);
- token_item = &APR_ARRAY_IDX(item->u.list, 1, svn_ra_svn__item_t);
+ item = &SVN_RA_SVN__LIST_ITEM(lock_tokens, i);
+ path_item = &SVN_RA_SVN__LIST_ITEM(item->u.list, 0);
+ token_item = &SVN_RA_SVN__LIST_ITEM(item->u.list, 1);
path = path_item->u.string->data;
full_path = svn_fspath__join(sb->repository->fs_path->data,
@@ -3954,7 +3953,7 @@ construct_server_baton(server_baton_t **
sizeof(const char *));
for (i = 0; i < caplist->nelts; i++)
{
- item = &APR_ARRAY_IDX(caplist, i, svn_ra_svn__item_t);
+ item = &SVN_RA_SVN__LIST_ITEM(caplist, i);
/* ra_svn_set_capabilities() already type-checked for us */
if (strcmp(item->u.word, SVN_RA_SVN_CAP_MERGEINFO) == 0)
{