aboutsummaryrefslogtreecommitdiffstats
path: root/common/exectool.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-01-19 13:58:23 +0000
committerWerner Koch <[email protected]>2017-01-19 13:58:23 +0000
commite031b3c16cfec583c4322c84d299b355f0849c77 (patch)
treefb5feef8d2792f189d92880872613e8bf89fcae3 /common/exectool.c
parentgpg: Allow to freeze faked system time. (diff)
downloadgnupg-e031b3c16cfec583c4322c84d299b355f0849c77.tar.gz
gnupg-e031b3c16cfec583c4322c84d299b355f0849c77.zip
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 <[email protected]>
Diffstat (limited to '')
-rw-r--r--common/exectool.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/common/exectool.c b/common/exectool.c
index 8c1f75792..ed8225ad4 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__);
}