diff options
author | Marcus Brinkmann <[email protected]> | 2010-06-10 23:09:32 +0000 |
---|---|---|
committer | Marcus Brinkmann <[email protected]> | 2010-06-10 23:09:32 +0000 |
commit | 9f4ec52c0e93f708f66363f45f99baa2092cf44b (patch) | |
tree | 72a7ed9e1135694681b00c63efaaa9cb890bb8d8 /src/assuan-handler.c | |
parent | 2010-06-10 Marcus Brinkmann <[email protected]> (diff) | |
download | libassuan-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.c | 24 |
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; |