summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2022-04-22 21:52:50 +0200
committerStephan Bergmann <sbergman@redhat.com>2022-04-22 23:38:33 +0200
commit8279d89d6e037def78f50c72fab2116ca56bef52 (patch)
tree40a4e558fe288b4f2d508dc2a0713fb8d22d3e10 /external
parentb212163587524f723c737d698919cb4fe4e547e6 (diff)
external/libassuan: Fix fallout of defining __STDC__ on Windows
...since 1bb0e177124d5d6661b72df6c7d848fb23639652 "Fix autoconf>=2.70 gcc-wrapper breakage", which had the side effect of preventing various deprecated function declarations in system headers (e.g., isascii in addition to __isascii). This went unnoticed so far due to the traditionally lax handling of missing function declarations in C, and only now started to cause > conversion.c(94,9): error: call to undeclared function 'isascii'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > if ((isascii (*istr) && isprint (*istr)) || (*istr >= 0x80)) > ^ etc. with clang-cl 15 trunk after <https://github.com/llvm/llvm-project/commit/7d644e1215b376ec5e915df9ea2eeb56e2d94626> "[C11/C2x] Change the behavior of the implicit function declaration warning". Where undeclared functions have been used in Windows-only code, they have been replaced with their __STDC__-declared counterparts, and for occurrences in shared code Windows-only macro definitions have been introduced (as would have done in the system headers too, if __STDC__ was not defined) to not clutter the shared code with #ifdefs. Also, for getpid (resp. _getpid), the #include <process.h> was apparently missing from the upstream code, even without our __STDC__ hack in external/libassuan/ExternalProject_libassuan.mk (but never caused errors until now, either). Change-Id: I7442394d0c6e633bca1f6c7331d7ee51651179a4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133339 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'external')
-rw-r--r--external/libassuan/UnpackedTarball_libassuan.mk1
-rw-r--r--external/libassuan/w32-stdc.patch74
2 files changed, 75 insertions, 0 deletions
diff --git a/external/libassuan/UnpackedTarball_libassuan.mk b/external/libassuan/UnpackedTarball_libassuan.mk
index 295b87d49677..3604fa36a395 100644
--- a/external/libassuan/UnpackedTarball_libassuan.mk
+++ b/external/libassuan/UnpackedTarball_libassuan.mk
@@ -19,6 +19,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,libassuan, \
$(if $(filter MSC,$(COM)),external/libassuan/w32-build-fixes.patch.1) \
external/libassuan/w32-build-fixes-2.patch \
$(if $(filter LINUX,$(OS)),external/libassuan/rpath.patch) \
+ external/libassuan/w32-stdc.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/libassuan/w32-stdc.patch b/external/libassuan/w32-stdc.patch
new file mode 100644
index 000000000000..def3dea833af
--- /dev/null
+++ b/external/libassuan/w32-stdc.patch
@@ -0,0 +1,74 @@
+--- src/assuan-handler.c
++++ src/assuan-handler.c
+@@ -938,7 +938,7 @@
+ #if defined(HAVE_W32CE_SYSTEM)
+ fdarray[n++] = (void*)fileno (ctx->outbound.data.fp);
+ #elif defined(HAVE_W32_SYSTEM)
+- fdarray[n++] = (void*)_get_osfhandle (fileno (ctx->outbound.data.fp));
++ fdarray[n++] = (void*)_get_osfhandle (_fileno (ctx->outbound.data.fp));
+ #else
+ fdarray[n++] = fileno (ctx->outbound.data.fp);
+ #endif
+--- src/assuan-logging.c
++++ src/assuan-logging.c
+@@ -30,10 +30,15 @@
+ # ifdef HAVE_WINSOCK2_H
+ # include <winsock2.h>
+ # endif
++# include <process.h>
++# define getpid _getpid
+ # include <windows.h>
+ #endif /*HAVE_W32_SYSTEM*/
+ #include <errno.h>
+ #include <ctype.h>
++#if defined HAVE_W32_SYSTEM
++#define isascii __isascii
++#endif
+
+ #include "assuan-defs.h"
+
+--- src/assuan-pipe-connect.c
++++ src/assuan-pipe-connect.c
+@@ -47,6 +47,8 @@
+ # ifdef HAVE_WINSOCK2_H
+ # include <winsock2.h>
+ # endif
++# include <process.h>
++# define getpid _getpid
+ # include <windows.h>
+ #endif
+
+--- src/assuan-socket.c
++++ src/assuan-socket.c
+@@ -27,6 +27,8 @@
+ #include <stdlib.h>
+ #ifdef HAVE_W32_SYSTEM
+ # define WIN32_LEAN_AND_MEAN
++# include <process.h>
++# define getpid _getpid
+ # include <windows.h>
+ # include <wincrypt.h>
+ #ifndef HAVE_W32CE_SYSTEM
+--- src/conversion.c
++++ src/conversion.c
+@@ -27,6 +27,9 @@
+ #include <string.h>
+ #include <errno.h>
+ #include <ctype.h>
++#if defined HAVE_W32_SYSTEM
++#define isascii __isascii
++#endif
+
+ #include "assuan-defs.h"
+ #include "debug.h"
+--- src/system-w32.c
++++ src/system-w32.c
+@@ -453,7 +453,7 @@
+
+ /* Dup stderr to /dev/null unless it is in the list of FDs to be
+ passed to the child. */
+- fd = assuan_fd_from_posix_fd (fileno (stderr));
++ fd = assuan_fd_from_posix_fd (_fileno (stderr));
+ fdp = fd_child_list;
+ if (fdp)
+ {