You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2015/10/30 18:21:15 UTC

svn commit: r1711517 - in /subversion/trunk/subversion: include/svn_base64.h libsvn_subr/base64.c libsvn_subr/deprecated.c mod_dav_svn/util.c tests/libsvn_delta/svndiff-test.c tests/libsvn_subr/stream-test.c

Author: ivan
Date: Fri Oct 30 17:21:14 2015
New Revision: 1711517

URL: http://svn.apache.org/viewvc?rev=1711517&view=rev
Log:
Implement svn_base64_encode2() with BREAK_LINES flag to control whether
insert newlines periodically or not. The old svn_base64_encode() was
inserting newlines unconditionally.

* subversion/include/svn_base64.h
  (svn_base64_encode2): New function declaration.
  (svn_base64_encode): Deprecate.  

* subversion/libsvn_subr/base64.c
  (encode_baton): Add BREAK_LINES field.
  (encode_data, finish_encoding_data): Use EB->BREAK_LINES flag.
  (svn_base64_encode2): Revv from svn_base64_encode(). Add BREAK_LINES.
   argument and save it in ENCODE_BATON.

* subversion/libsvn_subr/deprecated.c
  (svn_base64_encode): Call svn_base64_encode2() with BREAK_LINES=TRUE.

* subversion/mod_dav_svn/util.c
  (dav_svn__make_base64_output_stream): Use svn_base64_encode2() with
   BREAK_LINES=TRUE.

* subversion/tests/libsvn_delta/svndiff-test.c
  (main): Use svn_base64_encode2() with BREAK_LINES=TRUE.

* subversion/tests/libsvn_subr/stream-test.c
  (test_stream_base64, test_stream_base64_2): Test svn_base64_encode2() with
   BREAK_LINES=TRUE and BREAK_LINES=FALSE.

Modified:
    subversion/trunk/subversion/include/svn_base64.h
    subversion/trunk/subversion/libsvn_subr/base64.c
    subversion/trunk/subversion/libsvn_subr/deprecated.c
    subversion/trunk/subversion/mod_dav_svn/util.c
    subversion/trunk/subversion/tests/libsvn_delta/svndiff-test.c
    subversion/trunk/subversion/tests/libsvn_subr/stream-test.c

Modified: subversion/trunk/subversion/include/svn_base64.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_base64.h?rev=1711517&r1=1711516&r2=1711517&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_base64.h (original)
+++ subversion/trunk/subversion/include/svn_base64.h Fri Oct 30 17:21:14 2015
@@ -46,11 +46,24 @@ extern "C" {
  */
 
 /** Return a writable generic stream which will encode binary data in
- * base64 format and write the encoded data to @a output.  Be sure to
- * close the stream when done writing in order to squeeze out the last
- * bit of encoded data.  The stream is allocated in @a pool.
+ * base64 format and write the encoded data to @a output.  If @a break_lines
+ * is true, newlines will be inserted periodically; otherwise the output
+ * stream will only consist of base64 encoding characters. Be sure to close
+ * the stream when done writing in order to squeeze out the last bit of
+ * encoded data.  The stream is allocated in @a pool.
  */
 svn_stream_t *
+svn_base64_encode2(svn_stream_t *output,
+                   svn_boolean_t break_lines,
+                   apr_pool_t *pool);
+
+/**
+ * Same as svn_base64_encode2, but with @a break_lines always TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API.
+ */
+SVN_DEPRECATED
+svn_stream_t *
 svn_base64_encode(svn_stream_t *output,
                   apr_pool_t *pool);
 

Modified: subversion/trunk/subversion/libsvn_subr/base64.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/base64.c?rev=1711517&r1=1711516&r2=1711517&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/base64.c (original)
+++ subversion/trunk/subversion/libsvn_subr/base64.c Fri Oct 30 17:21:14 2015
@@ -58,6 +58,7 @@ struct encode_baton {
   unsigned char buf[3];         /* Bytes waiting to be encoded */
   size_t buflen;                /* Number of bytes waiting */
   size_t linelen;               /* Bytes output so far on this line */
+  svn_boolean_t break_lines;
   apr_pool_t *scratch_pool;
 };
 
@@ -214,7 +215,8 @@ encode_data(void *baton, const char *dat
   svn_error_t *err = SVN_NO_ERROR;
 
   /* Encode this block of data and write it out.  */
-  encode_bytes(encoded, data, *len, eb->buf, &eb->buflen, &eb->linelen, TRUE);
+  encode_bytes(encoded, data, *len, eb->buf, &eb->buflen, &eb->linelen,
+               eb->break_lines);
   enclen = encoded->len;
   if (enclen != 0)
     err = svn_stream_write(eb->output, encoded->data, &enclen);
@@ -233,7 +235,8 @@ finish_encoding_data(void *baton)
   svn_error_t *err = SVN_NO_ERROR;
 
   /* Encode a partial group at the end if necessary, and write it out.  */
-  encode_partial_group(encoded, eb->buf, eb->buflen, eb->linelen, TRUE);
+  encode_partial_group(encoded, eb->buf, eb->buflen, eb->linelen,
+                       eb->break_lines);
   enclen = encoded->len;
   if (enclen != 0)
     err = svn_stream_write(eb->output, encoded->data, &enclen);
@@ -247,7 +250,9 @@ finish_encoding_data(void *baton)
 
 
 svn_stream_t *
-svn_base64_encode(svn_stream_t *output, apr_pool_t *pool)
+svn_base64_encode2(svn_stream_t *output,
+                   svn_boolean_t break_lines,
+                   apr_pool_t *pool)
 {
   struct encode_baton *eb = apr_palloc(pool, sizeof(*eb));
   svn_stream_t *stream;
@@ -255,6 +260,7 @@ svn_base64_encode(svn_stream_t *output,
   eb->output = output;
   eb->buflen = 0;
   eb->linelen = 0;
+  eb->break_lines = break_lines;
   eb->scratch_pool = svn_pool_create(pool);
   stream = svn_stream_create(eb, pool);
   svn_stream_set_write(stream, encode_data);

Modified: subversion/trunk/subversion/libsvn_subr/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/deprecated.c?rev=1711517&r1=1711516&r2=1711517&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_subr/deprecated.c Fri Oct 30 17:21:14 2015
@@ -46,6 +46,7 @@
 #include "svn_utf.h"
 #include "svn_xml.h"
 #include "svn_auth.h"
+#include "svn_base64.h"
 
 #include "opt.h"
 #include "auth.h"
@@ -1574,3 +1575,10 @@ svn_cmdline_create_auth_baton(svn_auth_b
                                                         cancel_baton,
                                                         pool));
 }
+
+/*** From base64.c ***/
+svn_stream_t *
+svn_base64_encode(svn_stream_t *output, apr_pool_t *pool)
+{
+  return svn_base64_encode2(output, TRUE, pool);
+}

Modified: subversion/trunk/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/mod_dav_svn/util.c?rev=1711517&r1=1711516&r2=1711517&view=diff
==============================================================================
--- subversion/trunk/subversion/mod_dav_svn/util.c (original)
+++ subversion/trunk/subversion/mod_dav_svn/util.c Fri Oct 30 17:21:14 2015
@@ -620,7 +620,7 @@ dav_svn__make_base64_output_stream(apr_b
   wb->output = output;
   svn_stream_set_write(stream, brigade_write_fn);
 
-  return svn_base64_encode(stream, pool);
+  return svn_base64_encode2(stream, TRUE, pool);
 }
 
 void

Modified: subversion/trunk/subversion/tests/libsvn_delta/svndiff-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_delta/svndiff-test.c?rev=1711517&r1=1711516&r2=1711517&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_delta/svndiff-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_delta/svndiff-test.c Fri Oct 30 17:21:14 2015
@@ -88,7 +88,7 @@ main(int argc, char **argv)
 #ifdef QUOPRINT_SVNDIFFS
   encoder = svn_quoprint_encode(stdout_stream, pool);
 #else
-  encoder = svn_base64_encode(stdout_stream, pool);
+  encoder = svn_base64_encode2(stdout_stream, TRUE, pool);
 #endif
   /* use maximum compression level */
   svn_txdelta_to_svndiff3(&svndiff_handler, &svndiff_baton,

Modified: subversion/trunk/subversion/tests/libsvn_subr/stream-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/stream-test.c?rev=1711517&r1=1711516&r2=1711517&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/stream-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/stream-test.c Fri Oct 30 17:21:14 2015
@@ -550,9 +550,27 @@ test_stream_base64(apr_pool_t *pool)
     NULL
   };
 
+  /* Test svn_base64_encode2() with BREAK_LINES=FALSE. */
   stream = svn_stream_from_stringbuf(actual, pool);
   stream = svn_base64_decode(stream, pool);
-  stream = svn_base64_encode(stream, pool);
+  stream = svn_base64_encode2(stream, TRUE, pool);
+
+  for (i = 0; strings[i]; i++)
+    {
+      apr_size_t len = strlen(strings[i]);
+
+      svn_stringbuf_appendbytes(expected, strings[i], len);
+      SVN_ERR(svn_stream_write(stream, strings[i], &len));
+    }
+
+  SVN_ERR(svn_stream_close(stream));
+
+  SVN_TEST_STRING_ASSERT(actual->data, expected->data);
+
+  /* Test svn_base64_encode2() with BREAK_LINES=FALSE. */
+  stream = svn_stream_from_stringbuf(actual, pool);
+  stream = svn_base64_decode(stream, pool);
+  stream = svn_base64_encode2(stream, FALSE, pool);
 
   for (i = 0; strings[i]; i++)
     {
@@ -701,6 +719,32 @@ test_stream_base64_2(apr_pool_t *pool)
   };
   int i;
 
+  /* Test svn_base64_encode2() with BREAK_LINES=TRUE. */
+  for (i = 0; data[i].encoded1; i++)
+    {
+      apr_size_t len1 = strlen(data[i].encoded1);
+
+      svn_stringbuf_t *actual = svn_stringbuf_create_empty(pool);
+      svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
+      svn_stream_t *stream = svn_stream_from_stringbuf(actual, pool);
+
+      stream = svn_base64_encode2(stream, TRUE, pool);
+      stream = svn_base64_decode(stream, pool);
+
+      SVN_ERR(svn_stream_write(stream, data[i].encoded1, &len1));
+      svn_stringbuf_appendbytes(expected, data[i].encoded1, len1);
+
+      if (data[i].encoded2)
+        {
+          apr_size_t len2 = strlen(data[i].encoded2);
+          SVN_ERR(svn_stream_write(stream, data[i].encoded2, &len2));
+          svn_stringbuf_appendbytes(expected, data[i].encoded2, len2);
+        }
+
+      SVN_ERR(svn_stream_close(stream));
+    }
+
+  /* Test svn_base64_encode2() with BREAK_LINES=FALSE. */
   for (i = 0; data[i].encoded1; i++)
     {
       apr_size_t len1 = strlen(data[i].encoded1);
@@ -709,7 +753,7 @@ test_stream_base64_2(apr_pool_t *pool)
       svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
       svn_stream_t *stream = svn_stream_from_stringbuf(actual, pool);
 
-      stream = svn_base64_encode(stream, pool);
+      stream = svn_base64_encode2(stream, FALSE, pool);
       stream = svn_base64_decode(stream, pool);
 
       SVN_ERR(svn_stream_write(stream, data[i].encoded1, &len1));