aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan-handler.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2010-06-10 23:09:32 +0000
committerMarcus Brinkmann <[email protected]>2010-06-10 23:09:32 +0000
commit9f4ec52c0e93f708f66363f45f99baa2092cf44b (patch)
tree72a7ed9e1135694681b00c63efaaa9cb890bb8d8 /src/assuan-handler.c
parent2010-06-10 Marcus Brinkmann <[email protected]> (diff)
downloadlibassuan-9f4ec52c0e93f708f66363f45f99baa2092cf44b.tar.gz
libassuan-9f4ec52c0e93f708f66363f45f99baa2092cf44b.zip
2010-06-11 Marcus Brinkmann <[email protected]>
* assuan-handler.c (std_handler_input, std_handler_output) [HAVE_W32CE_SYSTEM]: Finish the pipe. We must do this here, because otherwise assuan_close_input_fd() and assuan_close_output_fd() can't work. * system-w32ce.c (_assuan_w32ce_finish_pipe): Call SetLastError in error case. (__assuan_close): Save WSAGetLastError before trashing it! Otherwise handle is never closed and GPGME hangs.
Diffstat (limited to 'src/assuan-handler.c')
-rw-r--r--src/assuan-handler.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/assuan-handler.c b/src/assuan-handler.c
index 9bb3010..c19117f 100644
--- a/src/assuan-handler.c
+++ b/src/assuan-handler.c
@@ -264,6 +264,17 @@ std_handler_input (assuan_context_t ctx, char *line)
rc = assuan_command_parse_fd (ctx, line, &fd);
if (rc)
return PROCESS_DONE (ctx, rc);
+
+#ifdef HAVE_W32CE_SYSTEM
+ oldfd = fd;
+ fd = _assuan_w32ce_finish_pipe ((int)fd, 0);
+ if (fd == INVALID_HANDLE_VALUE)
+ return PROCESS_DONE (ctx, set_error (ctx, GPG_ERR_ASS_PARAMETER,
+ "rvid conversion failed"));
+ TRACE2 (ctx, ASSUAN_LOG_SYSIO, "std_handler_input", ctx,
+ "turned RVID 0x%x into handle 0x%x", oldfd, fd);
+#endif
+
if (ctx->input_notify_fnc)
{
oldfd = ctx->input_fd;
@@ -284,10 +295,21 @@ std_handler_output (assuan_context_t ctx, char *line)
{
gpg_error_t rc;
assuan_fd_t fd, oldfd;
-
+
rc = assuan_command_parse_fd (ctx, line, &fd);
if (rc)
return PROCESS_DONE (ctx, rc);
+
+#ifdef HAVE_W32CE_SYSTEM
+ oldfd = fd;
+ fd = _assuan_w32ce_finish_pipe ((int)fd, 1);
+ if (fd == INVALID_HANDLE_VALUE)
+ return PROCESS_DONE (ctx, set_error (ctx, gpg_err_code_from_syserror (),
+ "rvid conversion failed"));
+ TRACE2 (ctx, ASSUAN_LOG_SYSIO, "std_handler_output", ctx,
+ "turned RVID 0x%x into handle 0x%x", oldfd, fd);
+#endif
+
if (ctx->output_notify_fnc)
{
oldfd = ctx->output_fd;