diff options
| -rw-r--r-- | gpgme/ChangeLog | 5 | ||||
| -rw-r--r-- | gpgme/w32-io.c | 31 | 
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);  | 
