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));