2007-08-22 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Wed, 22 Aug 2007 17:29:41 +0000 (17:29 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Wed, 22 Aug 2007 17:29:41 +0000 (17:29 +0000)
* w32-io.c (_gpgme_io_write): Return early if COUNT is zero.
(writer): Remove superfluous check.

gpgme/ChangeLog
gpgme/w32-io.c

index 17913d6..29f496d 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-22  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c (_gpgme_io_write): Return early if COUNT is zero.
+       (writer): Remove superfluous check.
+
 2007-08-20  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.h: Move include of gpg-error.h out of extern "C".
index f745371..dfdf45e 100644 (file)
@@ -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);