Hi again,
Here's another attempt at this patch. I took the
liberty of doing the following:
if ((err) || (len != SVN__STREAM_CHUNK_SIZE))
break;
Is this ok? Or is this a no-no. So far I haven't
seen any of the real code (aside for merge.c),
so I haven't seen evidence that leads to a different
conclusion that this construct is invalid or
illegal(in terms of SVN coding conduct).
Thanks
Edmund
Log:
[[[
Completed the TODO as stated in svn_io.h for
svn_stream_copy3().
* subversion/libsvn_subr/stream.c
(svn_stream_copy3): Even on error exit, the two files
from and to are closed.
Patch by: Edmund Wong <edmund_at_belfordhk.com>
Review by: mf
gstein
]]]
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1632483
Index: subversion/libsvn_subr/stream.c
===================================================================
--- subversion/libsvn_subr/stream.c (revision 37129)
+++ subversion/libsvn_subr/stream.c (working copy)
@@ -210,6 +210,8 @@
apr_pool_t *scratch_pool)
{
char *buf = apr_palloc(scratch_pool, SVN__STREAM_CHUNK_SIZE);
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_error_t *err2 = SVN_NO_ERROR;
/* Read and write chunks until we get a short read, indicating the
end of the stream. (We can't get a short write without an
@@ -219,17 +221,28 @@
apr_size_t len = SVN__STREAM_CHUNK_SIZE;
if (cancel_func)
- SVN_ERR(cancel_func(cancel_baton));
+ {
+ err = cancel_func(cancel_baton);
- SVN_ERR(svn_stream_read(from, buf, &len));
+ if (err)
+ break;
+ }
+
+ err = svn_stream_read(from, buf, &len);
+ if (err)
+ break;
+
if (len > 0)
- SVN_ERR(svn_stream_write(to, buf, &len));
- if (len != SVN__STREAM_CHUNK_SIZE)
- break;
+ err = svn_stream_write(to, buf, &len);
+
+ if ((err) || (len != SVN__STREAM_CHUNK_SIZE))
+ break;
}
+
+ err2 = svn_error_compose_create(svn_stream_close(from),
+ svn_stream_close(to));
- return svn_error_compose_create(svn_stream_close(from),
- svn_stream_close(to));
+ return svn_error_compose_create(err, err2);
}
svn_error_t *
Received on 2009-04-10 18:06:55 CEST