mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-13 22:21:09 +02:00
common: Add a function for copying data from one iobuf to another.
* common/iobuf.c (iobuf_copy): New function. -- Signed-off-by: Neal H. Walfield <neal@g10code.com>
This commit is contained in:
parent
2b0e0a53b4
commit
fd4b9e2328
@ -2208,6 +2208,41 @@ iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copies the data from the input iobuf SOURCE to the output iobuf
|
||||||
|
DEST until either an error is encountered or EOF is reached.
|
||||||
|
Returns the number of bytes copies. */
|
||||||
|
size_t
|
||||||
|
iobuf_copy (iobuf_t dest, iobuf_t source)
|
||||||
|
{
|
||||||
|
char *temp;
|
||||||
|
/* Use a 1 MB buffer. */
|
||||||
|
const size_t temp_size = 1024 * 1024;
|
||||||
|
|
||||||
|
size_t nread;
|
||||||
|
size_t nwrote = 0;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
assert (source->use == IOBUF_INPUT || source->use == IOBUF_INPUT_TEMP);
|
||||||
|
assert (dest->use == IOBUF_OUTPUT || source->use == IOBUF_OUTPUT_TEMP);
|
||||||
|
|
||||||
|
temp = xmalloc (temp_size);
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
nread = iobuf_read (source, temp, temp_size);
|
||||||
|
if (nread == -1)
|
||||||
|
/* EOF. */
|
||||||
|
break;
|
||||||
|
|
||||||
|
err = iobuf_write (dest, temp, nread);
|
||||||
|
if (err)
|
||||||
|
break;
|
||||||
|
nwrote += nread;
|
||||||
|
}
|
||||||
|
xfree (temp);
|
||||||
|
|
||||||
|
return nwrote;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
iobuf_flush_temp (iobuf_t temp)
|
iobuf_flush_temp (iobuf_t temp)
|
||||||
|
@ -552,6 +552,14 @@ int iobuf_write_temp (iobuf_t dest, iobuf_t source);
|
|||||||
BUFFER. Returns the number of bytes actually copied. */
|
BUFFER. Returns the number of bytes actually copied. */
|
||||||
size_t iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen);
|
size_t iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen);
|
||||||
|
|
||||||
|
/* Copies the data from the input iobuf SOURCE to the output iobuf
|
||||||
|
DEST until either an error is encountered or EOF is reached.
|
||||||
|
Returns the number of bytes successfully written. If an error
|
||||||
|
occured, then any buffered bytes are not returned to SOURCE and are
|
||||||
|
effectively lost. To check if an error occured, use
|
||||||
|
iobuf_error. */
|
||||||
|
size_t iobuf_copy (iobuf_t dest, iobuf_t source);
|
||||||
|
|
||||||
/* Return the size of any underlying file. This only works with
|
/* Return the size of any underlying file. This only works with
|
||||||
file_filter based pipelines.
|
file_filter based pipelines.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user