You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2012/07/13 17:22:17 UTC
svn commit: r1361274 - in /subversion/trunk/subversion:
include/private/svn_skel.h libsvn_subr/skel.c tests/libsvn_subr/skel-test.c
Author: rhuijben
Date: Fri Jul 13 15:22:17 2012
New Revision: 1361274
URL: http://svn.apache.org/viewvc?rev=1361274&view=rev
Log:
Add a simple function to dup skels, to allow updating some code in the update
editor to the desired format.
* subversion/include/private/svn_skel.h
(svn_skel__dup): New function.
* subversion/libsvn_subr/skel.c
(svn_skel__dup): New function.
* subversion/tests/libsvn_subr/skel-test.c
(unparse_list): Call svn_skel__dup and verify.
Modified:
subversion/trunk/subversion/include/private/svn_skel.h
subversion/trunk/subversion/libsvn_subr/skel.c
subversion/trunk/subversion/tests/libsvn_subr/skel-test.c
Modified: subversion/trunk/subversion/include/private/svn_skel.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_skel.h?rev=1361274&r1=1361273&r2=1361274&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_skel.h (original)
+++ subversion/trunk/subversion/include/private/svn_skel.h Fri Jul 13 15:22:17 2012
@@ -133,6 +133,11 @@ svn_skel_t *svn_skel__mem_atom(const voi
/* Create an empty list skel, allocated from POOL. */
svn_skel_t *svn_skel__make_empty_list(apr_pool_t *pool);
+/* Duplicates the skel structure SRC_SKEL and if DUP_DATA is true also the
+ data it references in RESULT_POOL */
+svn_skel_t *svn_skel__dup(const svn_skel_t *src_skel, svn_boolean_t dup_data,
+ apr_pool_t *result_pool);
+
/* Prepend SKEL to LIST. */
void svn_skel__prepend(svn_skel_t *skel, svn_skel_t *list);
Modified: subversion/trunk/subversion/libsvn_subr/skel.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/skel.c?rev=1361274&r1=1361273&r2=1361274&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/skel.c (original)
+++ subversion/trunk/subversion/libsvn_subr/skel.c Fri Jul 13 15:22:17 2012
@@ -532,6 +532,33 @@ svn_skel__make_empty_list(apr_pool_t *po
return skel;
}
+svn_skel_t *svn_skel__dup(const svn_skel_t *src_skel, svn_boolean_t dup_data,
+ apr_pool_t *result_pool)
+{
+ svn_skel_t *skel = apr_pmemdup(result_pool, src_skel, sizeof(svn_skel_t));
+
+ if (dup_data && skel->data)
+ {
+ if (skel->is_atom)
+ skel->data = apr_pmemdup(result_pool, skel->data, skel->len);
+ else
+ {
+ /* When creating a skel this would be NULL, 0 for a list.
+ When parsing a string to a skel this might point to real data
+ delimiting the sublist. We don't copy that from here. */
+ skel->data = NULL;
+ skel->len = 0;
+ }
+ }
+
+ if (skel->children)
+ skel->children = svn_skel__dup(skel->children, dup_data, result_pool);
+
+ if (skel->next)
+ skel->next = svn_skel__dup(skel->next, dup_data, result_pool);
+
+ return skel;
+}
void
svn_skel__prepend(svn_skel_t *skel, svn_skel_t *list_skel)
Modified: subversion/trunk/subversion/tests/libsvn_subr/skel-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/skel-test.c?rev=1361274&r1=1361273&r2=1361274&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/skel-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/skel-test.c Fri Jul 13 15:22:17 2012
@@ -873,6 +873,11 @@ unparse_list(apr_pool_t *pool)
if (! skel_equal(top, reparsed))
return fail(pool, "failed to reparse list of lists");
+
+ reparsed = svn_skel__dup(reparsed, TRUE, pool);
+
+ if (! skel_equal(top, reparsed))
+ return fail(pool, "failed to dup list of lists");
}
return SVN_NO_ERROR;