summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2022-04-04 09:48:57 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2022-04-04 09:48:57 +0900
commit28a40a298661877e1bbeb3eb9ac58a85bdd85b02 (patch)
treee84af13e3f7a15ada0d918dde54d0d065480bac2
parenta054a0a7cfb086e2cd80c64043a8694c3c1f525d (diff)
downloadlibassuan-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.c11
-rw-r--r--src/assuan.h.in2
-rw-r--r--src/posix-fd-t.inc.h5
-rw-r--r--src/system-w32.c10
-rw-r--r--src/w32-fd-t.inc.h15
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##