[Pkg-gnupg-commit] [gnupg2] 92/116: common: Fix buffer copy code again.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Tue Jan 24 04:40:57 UTC 2017
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch master
in repository gnupg2.
commit e031b3c16cfec583c4322c84d299b355f0849c77
Author: Werner Koch <wk at gnupg.org>
Date: Thu Jan 19 14:58:23 2017 +0100
common: Fix buffer copy code again.
* common/exectool.c (my_error_from_errno): Remove.
(copy_buffer_do_copy): Do without var RC.
(copy_buffer_flush): Ditto. Use ERRNO instead of es_write return
code.
(gnupg_exec_tool): Correctly return errors from es_read.
--
Fixes-commit: 55c9212a2338bf0b07c8cf3a69bcedaa28d48d43
Signed-off-by: Werner Koch <wk at gnupg.org>
---
common/exectool.c | 34 ++++++++++++++--------------------
1 file changed, 14 insertions(+), 20 deletions(-)
diff --git a/common/exectool.c b/common/exectool.c
index 8c1f757..ed8225a 100644
--- a/common/exectool.c
+++ b/common/exectool.c
@@ -65,12 +65,6 @@ my_error_from_syserror (void)
return gpg_err_make (default_errsource, gpg_err_code_from_syserror ());
}
-static inline gpg_error_t
-my_error_from_errno (int rc)
-{
- return gpg_err_make (default_errsource, gpg_err_code_from_errno (rc));
-}
-
static void
read_and_log_stderr (read_and_log_buffer_t *state, es_poll_t *fderr)
@@ -232,15 +226,13 @@ copy_buffer_shred (struct copy_buffer *c)
static gpg_error_t
copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
{
- int rc;
gpg_error_t err;
size_t nwritten = 0;
if (c->nread == 0)
{
c->writep = c->buffer;
- rc = es_read (source, c->buffer, sizeof c->buffer, &c->nread);
- if (rc)
+ if (es_read (source, c->buffer, sizeof c->buffer, &c->nread))
{
err = my_error_from_syserror ();
if (gpg_err_code (err) == GPG_ERR_EAGAIN)
@@ -256,8 +248,10 @@ copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
return 0; /* Done copying. */
nwritten = 0;
- rc = sink? es_write (sink, c->writep, c->nread, &nwritten) : 0;
- err = rc? my_error_from_errno (rc) : 0;
+ if (sink && es_write (sink, c->writep, c->nread, &nwritten))
+ err = my_error_from_syserror ();
+ else
+ err = 0;
log_assert (nwritten <= c->nread);
c->writep += nwritten;
@@ -283,13 +277,11 @@ copy_buffer_do_copy (struct copy_buffer *c, estream_t source, estream_t sink)
static gpg_error_t
copy_buffer_flush (struct copy_buffer *c, estream_t sink)
{
- int rc;
- gpg_error_t err;
- size_t nwritten;
+ gpg_error_t err = 0;
+ size_t nwritten = 0;
- nwritten = 0;
- rc = es_write (sink, c->writep, c->nread, &nwritten);
- err = rc? my_error_from_errno (rc) : 0;
+ if (es_write (sink, c->writep, c->nread, &nwritten))
+ err = my_error_from_syserror ();
log_assert (nwritten <= c->nread);
c->writep += nwritten;
@@ -628,9 +620,11 @@ gnupg_exec_tool (const char *pgmname, const char *argv[],
if (len)
{
- err = es_read (output, *result, len, &nread);
- if (err)
- goto leave;
+ if (es_read (output, *result, len, &nread))
+ {
+ err = my_error_from_syserror ();
+ goto leave;
+ }
if (nread != len)
log_fatal ("%s: short read from memstream\n", __func__);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git
More information about the Pkg-gnupg-commit
mailing list