diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2022-04-04 09:48:57 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2022-04-04 09:48:57 +0900 |
commit | 28a40a298661877e1bbeb3eb9ac58a85bdd85b02 (patch) | |
tree | e84af13e3f7a15ada0d918dde54d0d065480bac2 | |
parent | a054a0a7cfb086e2cd80c64043a8694c3c1f525d (diff) | |
download | libassuan-28a40a298661877e1bbeb3eb9ac58a85bdd85b02.tar.gz |
w32: Fix assuan_socket_connect_fd to be usable.
* src/assuan.h.in (assuan_socket_connect_fd): Second arg assuan_fd_t.
* src/assuan-socket-connect.c (assuan_socket_connect_fd): Second arg
should be an object of type SOCKET.
* src/posix-fd-t.inc.h (assuan_fd_from_posix_fd): Remove.
* src/w32-fd-t.inc.h (assuan_fd_from_posix_fd): Move to...
* src/system-w32.c (assuan_fd_from_posix_fd): ... here.
--
On Windows, when an application has an already-connected socket, it
must be an object of type SOCKET. In this case, it is wrong to use
_get_osfhandle.
This does not constitute any ABI/API change for POSIX system.
This is an API change for Windows, as assuan_fd_t on Windows is
pointer type, but it's a fix from non-correctly-usable API.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r-- | src/assuan-socket-connect.c | 11 | ||||
-rw-r--r-- | src/assuan.h.in | 2 | ||||
-rw-r--r-- | src/posix-fd-t.inc.h | 5 | ||||
-rw-r--r-- | src/system-w32.c | 10 | ||||
-rw-r--r-- | src/w32-fd-t.inc.h | 15 |
5 files changed, 16 insertions, 27 deletions
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c index ed18095..5423963 100644 --- a/src/assuan-socket-connect.c +++ b/src/assuan-socket-connect.c @@ -147,18 +147,17 @@ _assuan_connect_finalize (assuan_context_t ctx, assuan_fd_t fd, * and initialize the connection. */ gpg_error_t -assuan_socket_connect_fd (assuan_context_t ctx, int fd, unsigned int flags) +assuan_socket_connect_fd (assuan_context_t ctx, assuan_fd_t fd, + unsigned int flags) { gpg_error_t err; - assuan_fd_t afd; - if (!ctx || fd < 0) + if (!ctx) return GPG_ERR_INV_ARG; - afd = assuan_fd_from_posix_fd (fd); - if (afd == ASSUAN_INVALID_FD) + if (fd == ASSUAN_INVALID_FD) return GPG_ERR_INV_ARG; - err = _assuan_connect_finalize(ctx, afd, flags); + err = _assuan_connect_finalize (ctx, fd, flags); if (err) _assuan_reset (ctx); diff --git a/src/assuan.h.in b/src/assuan.h.in index 08c2b62..26b18e6 100644 --- a/src/assuan.h.in +++ b/src/assuan.h.in @@ -389,7 +389,7 @@ gpg_error_t assuan_socket_connect (assuan_context_t ctx, const char *name, pid_t server_pid, unsigned int flags); /*-- assuan-socket-connect.c --*/ -gpg_error_t assuan_socket_connect_fd (assuan_context_t ctx, int fd, +gpg_error_t assuan_socket_connect_fd (assuan_context_t ctx, assuan_fd_t fd, unsigned int flags); /*-- context.c --*/ diff --git a/src/posix-fd-t.inc.h b/src/posix-fd-t.inc.h index 832c4fa..b9d8dd2 100644 --- a/src/posix-fd-t.inc.h +++ b/src/posix-fd-t.inc.h @@ -24,10 +24,5 @@ typedef int assuan_fd_t; #define ASSUAN_INVALID_FD (-1) #define ASSUAN_INVALID_PID ((pid_t) -1) -static GPG_ERR_INLINE assuan_fd_t -assuan_fd_from_posix_fd (int fd) -{ - return fd; -} ##EOF## diff --git a/src/system-w32.c b/src/system-w32.c index 77117b8..3927b5d 100644 --- a/src/system-w32.c +++ b/src/system-w32.c @@ -403,6 +403,16 @@ build_w32_commandline (assuan_context_t ctx, const char * const *argv, } +static assuan_fd_t +assuan_fd_from_posix_fd (int fd) +{ + if (fd < 0) + return ASSUAN_INVALID_FD; + else + return (assuan_fd_t) _get_osfhandle (fd); +} + + int __assuan_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name, const char **argv, diff --git a/src/w32-fd-t.inc.h b/src/w32-fd-t.inc.h index bc3df28..4e3e66b 100644 --- a/src/w32-fd-t.inc.h +++ b/src/w32-fd-t.inc.h @@ -28,20 +28,5 @@ typedef void *assuan_fd_t; #define ASSUAN_INVALID_FD ((void*)(-1)) #define ASSUAN_INVALID_PID ((pid_t) -1) -#if GPGRT_HAVE_PRAGMA_GCC_PUSH -# pragma GCC push_options -# pragma GCC diagnostic ignored "-Wbad-function-cast" -#endif -static GPG_ERR_INLINE assuan_fd_t -assuan_fd_from_posix_fd (int fd) -{ - if (fd < 0) - return ASSUAN_INVALID_FD; - else - return (assuan_fd_t) _get_osfhandle (fd); -} -#if GPGRT_HAVE_PRAGMA_GCC_PUSH -# pragma GCC pop_options -#endif ##EOF## |