aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--gpgme/ChangeLog5
-rw-r--r--gpgme/w32-io.c31
2 files changed, 23 insertions, 13 deletions
diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog
index 17913d68..29f496d1 100644
--- a/gpgme/ChangeLog
+++ b/gpgme/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-22 Marcus Brinkmann <[email protected]>
+
+ * w32-io.c (_gpgme_io_write): Return early if COUNT is zero.
+ (writer): Remove superfluous check.
+
2007-08-20 Marcus Brinkmann <[email protected]>
* gpgme.h: Move include of gpg-error.h out of extern "C".
diff --git a/gpgme/w32-io.c b/gpgme/w32-io.c
index f7453711..dfdf45e5 100644
--- a/gpgme/w32-io.c
+++ b/gpgme/w32-io.c
@@ -531,20 +531,22 @@ writer (void *arg)
UNLOCK (ctx->mutex);
TRACE_LOG1 ("writing %d bytes", ctx->nbytes);
- if (ctx->nbytes
- && !WriteFile (ctx->file_hd, ctx->buffer,
- ctx->nbytes, &nwritten, NULL))
- {
- ctx->error_code = (int) GetLastError ();
- ctx->error = 1;
- TRACE_LOG1 ("write error: ec=%d", ctx->error_code);
- break;
- }
- TRACE_LOG1 ("wrote %d bytes", (int) nwritten);
+ /* Note that CTX->nbytes is not zero at this point, because
+ _gpgme_io_write always writes at least 1 byte before waking
+ us up, unless CTX->stop_me is true, which we catch above. */
+ if (!WriteFile (ctx->file_hd, ctx->buffer,
+ ctx->nbytes, &nwritten, NULL))
+ {
+ ctx->error_code = (int) GetLastError ();
+ ctx->error = 1;
+ TRACE_LOG1 ("write error: ec=%d", ctx->error_code);
+ break;
+ }
+ TRACE_LOG1 ("wrote %d bytes", (int) nwritten);
- LOCK (ctx->mutex);
- ctx->nbytes -= nwritten;
- UNLOCK (ctx->mutex);
+ LOCK (ctx->mutex);
+ ctx->nbytes -= nwritten;
+ UNLOCK (ctx->mutex);
}
/* Indicate that we have an error. */
if (!SetEvent (ctx->is_empty))
@@ -724,6 +726,9 @@ _gpgme_io_write (int fd, const void *buffer, size_t count)
"buffer=%p, count=%u", buffer, count);
TRACE_LOGBUF (buffer, count);
+ if (count == 0)
+ return TRACE_SYS (0);
+
ctx = find_writer (fd, 1);
if (!ctx)
return TRACE_SYSRES (-1);