summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2022-03-31 18:36:06 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2022-03-31 18:36:06 +0900
commita8125eba05beb33823657f095acc72191543b07f (patch)
tree061fb937e8c87eb3e1330414f4c0b3705f9b36c0
parent9de02ca16d30a3501a9333e48934b008fcd94f8f (diff)
downloadlibassuan-a8125eba05beb33823657f095acc72191543b07f.tar.gz
Fix internal socket API to be consistent for SOCKET.
* src/assuan-defs.h (_assuan_socket): Return value has type assuan_fd_t. (_assuan_connect): Second argument has type assuan_fd_t. [HAVE_W64_SYSTEM] (SOCKET2HANDLE): Revert the change before. * src/assuan-socket.c (_assuan_sock_new): No type coercion for _assuan_socket. (socks5_connect): No type coercion for _assuan_connect. (_assuan_sock_connect): Likewise. * src/assuan.h.in (struct assuan_system_hooks): Fix method signature of socket for return value type and of connect for the second argument. (__assuan_socket): Return value has type assuan_fd_t. (__assuan_connect): Second argument has type assuan_fd_t. (ASSUAN_SYSTEM_NPTH_IMPL): Fix for _assuan_npth_connect for its second argument. * src/system-w32.c (__assuan_socket): Return value has type assuan_fd_t. Use SOCKET2HANDLE for type coercion for socket. Use INVALID_SOCKET. (__assuan_connect): Second argument has type assuan_fd_t. Use HANDLE2SOCKET for type coercion for sock. * src/system.c (_assuan_socket): Return value has type assuan_fd_t. (_assuan_connect): Second argument has type assuan_fd_t. -- Note that this change does *NOT* constitute any ABI change, no API change, either. It is fix for internal consistency for socket. The change of SOCKET2HANDLE in the past for HAVE_W64_SYSTEM was done, because of internal use of 'int' which represents the type for socket. Instead of fixing that part of code for 'int', I touched another part to silence warnings. That's not correct fix, but a work around. This time, with the changes, whole parts are now consisitent. Fixes-commit: 6c736325c028647dc3283bf723e2e28199e7f45b Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r--src/assuan-defs.h9
-rw-r--r--src/assuan-socket.c11
-rw-r--r--src/assuan.h.in37
-rw-r--r--src/system-w32.c14
-rw-r--r--src/system.c7
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,