Page MenuHome GnuPG

02-decrypt-data-use-iobuf_read

Authored By
jukivili
Feb 11 2018, 1:33 PM
Size
4 KB
Subscribers
None

02-decrypt-data-use-iobuf_read

decrypt-data: use iobuf_read instead of iobuf_get for higher performance
From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
---
g10/decrypt-data.c | 82 ++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 60 insertions(+), 22 deletions(-)
diff --git a/g10/decrypt-data.c b/g10/decrypt-data.c
index afdedcbf6..9433467da 100644
--- a/g10/decrypt-data.c
+++ b/g10/decrypt-data.c
@@ -566,27 +566,40 @@ aead_underflow (decode_filter_ctx_t dfx, iobuf_t a, byte *buf, size_t *ret_len)
* case). */
if (dfx->partial)
{
- for (; len < size; len++ )
+ for (; len < size; )
{
- if ((c = iobuf_get (a)) == -1)
+ size_t curr = size - len;
+ int ret;
+
+ ret = iobuf_read(a, &buf[len], curr);
+ if (ret == -1)
{
dfx->eof_seen = 1; /* Normal EOF. */
break;
}
- buf[len] = c;
+
+ len += ret;
}
}
else
{
- for (; len < size && dfx->length; len++, dfx->length--)
+ for (; len < size && dfx->length; )
{
- c = iobuf_get (a);
- if (c == -1)
+ size_t curr = size - len;
+ int ret;
+
+ if (curr > dfx->length)
+ curr = dfx->length;
+
+ ret = iobuf_read(a, &buf[len], curr);
+ if (ret == -1)
{
dfx->eof_seen = 3; /* Premature EOF. */
break;
}
- buf[len] = c;
+
+ len += ret;
+ dfx->length -= ret;
}
if (!dfx->length)
dfx->eof_seen = 1; /* Normal EOF. */
@@ -910,27 +923,40 @@ mdc_decode_filter (void *opaque, int control, IOBUF a,
/* Fill up the buffer. */
if (dfx->partial)
{
- for (; n < size; n++ )
+ for (; n < size; )
{
- if ( (c = iobuf_get(a)) == -1 )
+ size_t curr = size - n;
+ int ret;
+
+ ret = iobuf_read(a, &buf[n], curr);
+ if (ret == -1)
{
dfx->eof_seen = 1; /* Normal EOF. */
break;
}
- buf[n] = c;
+
+ n += ret;
}
}
else
{
- for (; n < size && dfx->length; n++, dfx->length--)
+ for (; n < size && dfx->length; )
{
- c = iobuf_get(a);
- if (c == -1)
+ size_t curr = size - n;
+ int ret;
+
+ if (curr > dfx->length)
+ curr = dfx->length;
+
+ ret = iobuf_read(a, &buf[n], curr);
+ if (ret == -1)
{
dfx->eof_seen = 3; /* Premature EOF. */
break;
}
- buf[n] = c;
+
+ n += ret;
+ dfx->length -= ret;
}
if (!dfx->length)
dfx->eof_seen = 1; /* Normal EOF. */
@@ -1003,28 +1029,40 @@ decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len)
if (fc->partial)
{
- for (n=0; n < size; n++ )
+ for (n=0; n < size; )
{
- c = iobuf_get(a);
- if (c == -1)
+ size_t curr = size - n;
+ int ret;
+
+ ret = iobuf_read(a, &buf[n], curr);
+ if (ret == -1)
{
fc->eof_seen = 1; /* Normal EOF. */
break;
}
- buf[n] = c;
+
+ n += ret;
}
}
else
{
- for (n=0; n < size && fc->length; n++, fc->length--)
+ for (n=0; n < size && fc->length; )
{
- c = iobuf_get(a);
- if (c == -1)
+ size_t curr = size - n;
+ int ret;
+
+ if (curr > fc->length)
+ curr = fc->length;
+
+ ret = iobuf_read(a, &buf[n], curr);
+ if (ret == -1)
{
fc->eof_seen = 3; /* Premature EOF. */
break;
}
- buf[n] = c;
+
+ n += ret;
+ fc->length -= ret;
}
if (!fc->length)
fc->eof_seen = 1; /* Normal EOF. */

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
135796

Event Timeline