diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/assuan-defs.h | 9 | ||||
-rw-r--r-- | src/assuan-socket.c | 11 | ||||
-rw-r--r-- | src/assuan.h.in | 37 | ||||
-rw-r--r-- | src/system-w32.c | 14 | ||||
-rw-r--r-- | src/system.c | 7 |
5 files changed, 44 insertions, 34 deletions
diff --git a/src/assuan-defs.h b/src/assuan-defs.h index e7ca918..9538223 100644 --- a/src/assuan-defs.h +++ b/src/assuan-defs.h @@ -269,9 +269,10 @@ pid_t _assuan_waitpid (assuan_context_t ctx, pid_t pid, int nowait, int *status, int options); int _assuan_socketpair (assuan_context_t ctx, int namespace, int style, int protocol, assuan_fd_t filedes[2]); -int _assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol); -int _assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr, - socklen_t length); +assuan_fd_t _assuan_socket (assuan_context_t ctx, int namespace, + int style, int protocol); +int _assuan_connect (assuan_context_t ctx, assuan_fd_t sock, + struct sockaddr *addr, socklen_t length); extern struct assuan_system_hooks _assuan_system_hooks; @@ -411,7 +412,7 @@ int putc_unlocked (int c, FILE *stream); #if HAVE_W64_SYSTEM -# define SOCKET2HANDLE(s) ((void *)(uintptr_t)(s)) +# define SOCKET2HANDLE(s) ((void *)(s)) # define HANDLE2SOCKET(h) ((uintptr_t)(h)) #elif HAVE_W32_SYSTEM # define SOCKET2HANDLE(s) ((void *)(s)) diff --git a/src/assuan-socket.c b/src/assuan-socket.c index 97b2312..e841cda 100644 --- a/src/assuan-socket.c +++ b/src/assuan-socket.c @@ -531,7 +531,7 @@ _assuan_sock_new (assuan_context_t ctx, int domain, int type, int proto) assuan_fd_t res; if (domain == AF_UNIX || domain == AF_LOCAL) domain = AF_INET; - res = SOCKET2HANDLE(_assuan_socket (ctx, domain, type, proto)); + res = _assuan_socket (ctx, domain, type, proto); return res; #else return _assuan_socket (ctx, domain, type, proto); @@ -746,13 +746,12 @@ socks5_connect (assuan_context_t ctx, assuan_fd_t sock, proxyaddr_in.sin_addr.s_addr = htonl (INADDR_LOOPBACK); proxyaddr = (struct sockaddr *)&proxyaddr_in; proxyaddrlen = sizeof proxyaddr_in; - ret = _assuan_connect (ctx, HANDLE2SOCKET (sock), proxyaddr, proxyaddrlen); + ret = _assuan_connect (ctx, sock, proxyaddr, proxyaddrlen); if (ret && socksport == TOR_PORT && errno == ECONNREFUSED) { /* Standard Tor port failed - try the Tor browser port. */ proxyaddr_in.sin_port = htons (TOR_PORT2); - ret = _assuan_connect (ctx, HANDLE2SOCKET (sock), - proxyaddr, proxyaddrlen); + ret = _assuan_connect (ctx, sock, proxyaddr, proxyaddrlen); } /* If we get an EINPROGRESS here the caller is trying to do a * non-blocking connect (e.g. for custom time out handling) which @@ -1017,7 +1016,7 @@ _assuan_sock_connect (assuan_context_t ctx, assuan_fd_t sockfd, unaddr->sun_port = myaddr.sin_port; unaddr->sun_addr.s_addr = myaddr.sin_addr.s_addr; - ret = _assuan_connect (ctx, HANDLE2SOCKET(sockfd), + ret = _assuan_connect (ctx, sockfd, (struct sockaddr *)&myaddr, sizeof myaddr); if (!ret) { @@ -1054,7 +1053,7 @@ _assuan_sock_connect (assuan_context_t ctx, assuan_fd_t sockfd, } else { - return _assuan_connect (ctx, HANDLE2SOCKET (sockfd), addr, addrlen); + return _assuan_connect (ctx, sockfd, addr, addrlen); } #else # if HAVE_STAT diff --git a/src/assuan.h.in b/src/assuan.h.in index b727ffb..08c2b62 100644 --- a/src/assuan.h.in +++ b/src/assuan.h.in @@ -267,8 +267,10 @@ struct assuan_system_hooks int action, int *status, int options); int (*socketpair) (assuan_context_t ctx, int _namespace, int style, int protocol, assuan_fd_t filedes[2]); - int (*socket) (assuan_context_t ctx, int _namespace, int style, int protocol); - int (*connect) (assuan_context_t ctx, int sock, struct sockaddr *addr, socklen_t length); + assuan_fd_t (*socket) (assuan_context_t ctx, int _namespace, + int style, int protocol); + int (*connect) (assuan_context_t ctx, assuan_fd_t sock, + struct sockaddr *addr, socklen_t length); }; typedef struct assuan_system_hooks *assuan_system_hooks_t; @@ -527,18 +529,25 @@ int __assuan_pipe (assuan_context_t ctx, assuan_fd_t fd[2], int inherit_idx); int __assuan_close (assuan_context_t ctx, assuan_fd_t fd); int __assuan_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name, const char **argv, assuan_fd_t fd_in, assuan_fd_t fd_out, - assuan_fd_t *fd_child_list, - void (*atfork) (void *opaque, int reserved), - void *atforkvalue, unsigned int flags); + assuan_fd_t *fd_child_list, + void (*atfork) (void *opaque, int reserved), + void *atforkvalue, unsigned int flags); int __assuan_socketpair (assuan_context_t ctx, int _namespace, int style, - int protocol, assuan_fd_t filedes[2]); -int __assuan_socket (assuan_context_t ctx, int _namespace, int style, int protocol); -int __assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr, socklen_t length); -ssize_t __assuan_read (assuan_context_t ctx, assuan_fd_t fd, void *buffer, size_t size); -ssize_t __assuan_write (assuan_context_t ctx, assuan_fd_t fd, const void *buffer, size_t size); -int __assuan_recvmsg (assuan_context_t ctx, assuan_fd_t fd, assuan_msghdr_t msg, int flags); -int __assuan_sendmsg (assuan_context_t ctx, assuan_fd_t fd, const assuan_msghdr_t msg, int flags); -pid_t __assuan_waitpid (assuan_context_t ctx, pid_t pid, int nowait, int *status, int options); + int protocol, assuan_fd_t filedes[2]); +assuan_fd_t __assuan_socket (assuan_context_t ctx, int _namespace, + int style, int protocol); +int __assuan_connect (assuan_context_t ctx, assuan_fd_t sock, + struct sockaddr *addr, socklen_t length); +ssize_t __assuan_read (assuan_context_t ctx, assuan_fd_t fd, + void *buffer, size_t size); +ssize_t __assuan_write (assuan_context_t ctx, assuan_fd_t fd, + const void *buffer, size_t size); +int __assuan_recvmsg (assuan_context_t ctx, assuan_fd_t fd, + assuan_msghdr_t msg, int flags); +int __assuan_sendmsg (assuan_context_t ctx, assuan_fd_t fd, + const assuan_msghdr_t msg, int flags); +pid_t __assuan_waitpid (assuan_context_t ctx, pid_t pid, + int nowait, int *status, int options); /* Standard system hooks for nPth. */ #define ASSUAN_SYSTEM_NPTH_IMPL \ @@ -571,7 +580,7 @@ pid_t __assuan_waitpid (assuan_context_t ctx, pid_t pid, int nowait, int *status { pid_t res; (void) ctx; npth_unprotect(); \ res = __assuan_waitpid (ctx, pid, nowait, status, options); \ npth_protect(); return res; } \ - static int _assuan_npth_connect (assuan_context_t ctx, int sock, \ + static int _assuan_npth_connect (assuan_context_t ctx, assuan_fd_t sock, \ struct sockaddr *addr, socklen_t len)\ { int res; npth_unprotect(); \ res = __assuan_connect (ctx, sock, addr, len); \ diff --git a/src/system-w32.c b/src/system-w32.c index a0e9a98..77117b8 100644 --- a/src/system-w32.c +++ b/src/system-w32.c @@ -566,25 +566,25 @@ __assuan_socketpair (assuan_context_t ctx, int namespace, int style, } -int +assuan_fd_t __assuan_socket (assuan_context_t ctx, int domain, int type, int proto) { - int res; + assuan_fd_t res; - res = socket (domain, type, proto); - if (res == -1) + res = SOCKET2HANDLE (socket (domain, type, proto)); + if (res == SOCKET2HANDLE (INVALID_SOCKET)) gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ())); return res; } int -__assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr, - socklen_t length) +__assuan_connect (assuan_context_t ctx, assuan_fd_t sock, + struct sockaddr *addr, socklen_t length) { int res; - res = connect (sock, addr, length); + res = connect (HANDLE2SOCKET (sock), addr, length); if (res < 0) gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ())); return res; diff --git a/src/system.c b/src/system.c index 00b76cb..e4de0e4 100644 --- a/src/system.c +++ b/src/system.c @@ -389,10 +389,10 @@ _assuan_socketpair (assuan_context_t ctx, int namespace, int style, -int +assuan_fd_t _assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol) { - int res; + assuan_fd_t res; TRACE_BEG3 (ctx, ASSUAN_LOG_SYSIO, "_assuan_socket", ctx, "namespace=%i,style=%i,protocol=%i", namespace, style, protocol); @@ -403,7 +403,8 @@ _assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol) int -_assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr, socklen_t length) +_assuan_connect (assuan_context_t ctx, assuan_fd_t sock, + struct sockaddr *addr, socklen_t length) { int res; TRACE_BEG3 (ctx, ASSUAN_LOG_SYSIO, "_assuan_connect", ctx, |