diff options
-rw-r--r-- | src/assuan-defs.h | 3 | ||||
-rw-r--r-- | src/assuan-socket.c | 14 | ||||
-rw-r--r-- | src/assuan-uds.c | 4 | ||||
-rw-r--r-- | src/system-w32.c | 6 |
4 files changed, 17 insertions, 10 deletions
diff --git a/src/assuan-defs.h b/src/assuan-defs.h index e7fb28b..fcb3d2b 100644 --- a/src/assuan-defs.h +++ b/src/assuan-defs.h @@ -76,6 +76,7 @@ struct assuan_context_s #ifdef HAVE_W32_SYSTEM /* The per-context w32 error string. */ char w32_strerror[256]; + int w32_error; #endif /* The allocation hooks. */ @@ -402,7 +403,7 @@ int _assuan_sock_check_nonce (assuan_context_t ctx, assuan_fd_t fd, assuan_sock_nonce_t *nonce); #ifdef HAVE_W32_SYSTEM wchar_t *_assuan_utf8_to_wchar (const char *string); -int _assuan_sock_wsa2errno (int err); +int _assuan_sock_wsa2errno (assuan_context_t ctx, int err); #endif #ifdef HAVE_FOPENCOOKIE diff --git a/src/assuan-socket.c b/src/assuan-socket.c index 2b148d1..4c859a5 100644 --- a/src/assuan-socket.c +++ b/src/assuan-socket.c @@ -289,7 +289,7 @@ MyDeleteFile (LPCSTR lpFileName) int -_assuan_sock_wsa2errno (int err) +_assuan_sock_wsa2errno (assuan_context_t ctx, int err) { switch (err) { @@ -306,6 +306,8 @@ _assuan_sock_wsa2errno (int err) default: return EIO; } + + ctx->w32_error = err; } @@ -674,6 +676,10 @@ _assuan_sock_get_flag (assuan_context_t ctx, assuan_fd_t sockfd, } *r_value = !!i; } +#ifdef HAVE_W32_SYSTEM + else if (!strcmp (name, "w32_error")) + *r_value = ctx->w32_error; +#endif else { gpg_err_set_errno (EINVAL); @@ -1076,7 +1082,7 @@ _assuan_sock_accept (assuan_context_t ctx, assuan_fd_t sockfd, #ifdef HAVE_W32_SYSTEM res = SOCKET2HANDLE (accept (HANDLE2SOCKET (sockfd), addr, p_addrlen)); if (res == SOCKET2HANDLE (INVALID_SOCKET)) - gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ())); + gpg_err_set_errno (_assuan_sock_wsa2errno (ctx, WSAGetLastError ())); #else res = accept (sockfd, addr, p_addrlen); #endif @@ -1312,7 +1318,7 @@ _assuan_sock_bind (assuan_context_t ctx, assuan_fd_t sockfd, (struct sockaddr *)&myaddr, &len); if (rc) { - int save_e = _assuan_sock_wsa2errno (WSAGetLastError ()); + int save_e = _assuan_sock_wsa2errno (ctx, WSAGetLastError ()); CloseHandle (filehd); MyDeleteFile (unaddr->sun_path); gpg_err_set_errno (save_e); @@ -1351,7 +1357,7 @@ _assuan_sock_bind (assuan_context_t ctx, assuan_fd_t sockfd, { res = bind (HANDLE2SOCKET(sockfd), addr, addrlen); if (res < 0) - gpg_err_set_errno ( _assuan_sock_wsa2errno (WSAGetLastError ())); + gpg_err_set_errno ( _assuan_sock_wsa2errno (ctx, WSAGetLastError ())); } leave: #else diff --git a/src/assuan-uds.c b/src/assuan-uds.c index 8712b02..01f0861 100644 --- a/src/assuan-uds.c +++ b/src/assuan-uds.c @@ -148,7 +148,7 @@ uds_reader (assuan_context_t ctx, void *buf, size_t buflen) #else /*HAVE_W32_SYSTEM*/ int res = recvfrom (HANDLE2SOCKET(ctx->inbound.fd), buf, buflen, 0, NULL, NULL); if (res < 0) - gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ())); + gpg_err_set_errno (_assuan_sock_wsa2errno (ctx, WSAGetLastError ())); return res; #endif /*HAVE_W32_SYSTEM*/ } @@ -180,7 +180,7 @@ uds_writer (assuan_context_t ctx, const void *buf, size_t buflen) (struct sockaddr *)&ctx->serveraddr, sizeof (struct sockaddr_in)); if (res < 0) - gpg_err_set_errno ( _assuan_sock_wsa2errno (WSAGetLastError ())); + gpg_err_set_errno ( _assuan_sock_wsa2errno (ctx, WSAGetLastError ())); return res; #endif /*HAVE_W32_SYSTEM*/ } diff --git a/src/system-w32.c b/src/system-w32.c index 25c2df2..80c935a 100644 --- a/src/system-w32.c +++ b/src/system-w32.c @@ -149,7 +149,7 @@ __assuan_close (assuan_context_t ctx, assuan_fd_t fd) { int rc = closesocket (HANDLE2SOCKET(fd)); if (rc) - gpg_err_set_errno ( _assuan_sock_wsa2errno (WSAGetLastError ()) ); + gpg_err_set_errno ( _assuan_sock_wsa2errno (ctx, WSAGetLastError ()) ); if (rc && WSAGetLastError () == WSAENOTSOCK) { rc = CloseHandle (fd); @@ -647,7 +647,7 @@ __assuan_socket (assuan_context_t ctx, int domain, int type, int proto) res = SOCKET2HANDLE (socket (domain, type, proto)); if (res == SOCKET2HANDLE (INVALID_SOCKET)) - gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ())); + gpg_err_set_errno (_assuan_sock_wsa2errno (ctx, WSAGetLastError ())); return res; } @@ -660,7 +660,7 @@ __assuan_connect (assuan_context_t ctx, assuan_fd_t sock, res = connect (HANDLE2SOCKET (sock), addr, length); if (res < 0) - gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ())); + gpg_err_set_errno (_assuan_sock_wsa2errno (ctx, WSAGetLastError ())); return res; } |