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;