aboutsummaryrefslogtreecommitdiffstats
path: root/agent/gpg-stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'agent/gpg-stream.c')
-rw-r--r--agent/gpg-stream.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/agent/gpg-stream.c b/agent/gpg-stream.c
index f8d34e1ff..1139cbe3d 100644
--- a/agent/gpg-stream.c
+++ b/agent/gpg-stream.c
@@ -912,3 +912,37 @@ gpg_stream_stat (gpg_stream_t stream,
return err;
}
+
+
+static gpg_error_t
+gpg_stream_copy_do (gpg_stream_t dst,
+ gpg_stream_t src)
+{
+ gpg_error_t err = GPG_ERR_NO_ERROR;
+ unsigned char buffer[STREAM_BLOCK_SIZE];
+ size_t bytes_read = 0;
+
+ while (1)
+ {
+ err = gpg_stream_read (src, buffer, sizeof (buffer), &bytes_read);
+ if (err || (! bytes_read))
+ break;
+
+ err = gpg_stream_write (dst, buffer, bytes_read, NULL);
+ if (err)
+ break;
+ }
+
+ return err;
+}
+
+gpg_error_t
+gpg_stream_copy (gpg_stream_t dst,
+ gpg_stream_t src)
+{
+ gpg_error_t err = GPG_ERR_NO_ERROR;
+
+ err = gpg_stream_copy_do (dst, src);
+
+ return err;
+}