https://git.openldap.org/openldap/openldap/-/merge_requests/605 From 83e2db9bf9fc2530a0ea6ca538a7732f6ad9de0e Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 9 Feb 2023 23:17:53 +0000 Subject: [PATCH 1/3] build: fix compatibility with stricter C99 compilers Fix the following warnings: - -Wimplicit-int (fatal with Clang 16) - -Wimplicit-function-declaration (fatal with Clang 16) - -Wincompatible-function-pointer-types (fatal with Clang 16) - -Wint-conversion (fatal with Clang 15) - Old style prototypes (K&R, removed from C23) These warnings-now-error led to misconfigurations and failure to build OpenLDAP, as the tests used during configure caused the wrong results to be emitted. For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2], or the (new) c-std-porting mailing list [3]. [0] https://lwn.net/Articles/913505/ [1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213 [2] https://wiki.gentoo.org/wiki/Modern_C_porting [3] hosted at lists.linux.dev. Bug: https://bugs.gentoo.org/871288 Signed-off-by: Sam James --- a/build/openldap.m4 +++ b/build/openldap.m4 @@ -154,6 +154,7 @@ fi if test $ol_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include #ifndef HAVE_EBCDIC # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -360,9 +361,7 @@ AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[ AC_DEFUN([OL_PTHREAD_TEST_PROGRAM], [AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES -int main(argc, argv) - int argc; - char **argv; +int main(int argc, char **argv) { OL_PTHREAD_TEST_FUNCTION } @@ -484,7 +483,7 @@ AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[ #include #include static char *pattern, *string; -main() +int main(void) { int rc; regex_t re; @@ -511,7 +510,8 @@ AC_DEFUN([OL_C_UPPER_LOWER], [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include -main() +#include +int main(void) { if ('C' == toupper('C')) exit(0); @@ -569,7 +569,7 @@ AC_DEFUN([OL_NONPOSIX_STRERROR_R], ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no]) else AC_RUN_IFELSE([AC_LANG_SOURCE([[ - main() { + int main(void) { char buf[100]; buf[0] = 0; strerror_r( 1, buf, sizeof buf ); --- a/configure.ac +++ b/configure.ac @@ -1017,7 +1017,11 @@ dnl ---------------------------------------------------------------- AC_CHECK_HEADERS( sys/epoll.h ) if test "${ac_cv_header_sys_epoll_h}" = yes; then AC_MSG_CHECKING(for epoll system call) - AC_RUN_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) + AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#ifdef HAVE_SYS_POLL_H +#include +#endif +int main(int argc, char **argv) { int epfd = epoll_create(256); exit (epfd == -1 ? 1 : 0); @@ -1479,10 +1483,8 @@ pthread_rwlock_t rwlock; dnl save the flags AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include -#ifndef NULL -#define NULL (void*)0 -#endif -]], [[pthread_detach(NULL);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no]) +pthread_t thread; +]], [[pthread_detach(thread);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no]) ]) if test $ol_cv_func_pthread_detach = no ; then @@ -1537,6 +1539,9 @@ dnl esac AC_CACHE_CHECK([if select yields when using pthreads], ol_cv_pthread_select_yields,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#define _XOPEN_SOURCE 500 /* For pthread_setconcurrency() on glibc */ +#include +#include #include #include #include @@ -1547,8 +1552,7 @@ dnl esac static int fildes[2]; -static void *task(p) - void *p; +static void *task(void *p) { int i; struct timeval tv; @@ -1572,9 +1576,7 @@ static void *task(p) exit(0); /* if we exit here, the select blocked the whole process */ } -int main(argc, argv) - int argc; - char **argv; +int main(int argc, char **argv) { pthread_t t; -- GitLab From 853d613f39ae9e8d7dad4492076959c2d80e38c1 Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 9 Feb 2023 23:20:32 +0000 Subject: [PATCH 2/3] contrib: fix old-style K&R declarations Removed in C23. For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2], or the (new) c-std-porting mailing list [3]. [0] https://lwn.net/Articles/913505/ [1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213 [2] https://wiki.gentoo.org/wiki/Modern_C_porting [3] hosted at lists.linux.dev. Signed-off-by: Sam James --- a/contrib/ldaptcl/tclAppInit.c +++ b/contrib/ldaptcl/tclAppInit.c @@ -45,9 +45,7 @@ EXTERN int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp)); */ int -main(argc, argv) - int argc; /* Number of command-line arguments. */ - char **argv; /* Values of command-line arguments. */ +main(int argc, char **argv) { #ifdef USE_TCLX TclX_Main(argc, argv, Tcl_AppInit); --- a/contrib/ldaptcl/tkAppInit.c +++ b/contrib/ldaptcl/tkAppInit.c @@ -37,16 +37,9 @@ int (*tclDummyMathPtr)() = matherr; * This is the main program for the application. *----------------------------------------------------------------------------- */ -#ifdef __cplusplus int main (int argc, char **argv) -#else -int -main (argc, argv) - int argc; - char **argv; -#endif { #ifdef USE_TCLX TkX_Main(argc, argv, Tcl_AppInit); @@ -68,14 +61,8 @@ main (argc, argv) * interp->result if an error occurs. *----------------------------------------------------------------------------- */ -#ifdef __cplusplus int Tcl_AppInit (Tcl_Interp *interp) -#else -int -Tcl_AppInit (interp) - Tcl_Interp *interp; -#endif { if (Tcl_Init (interp) == TCL_ERROR) { return TCL_ERROR; -- GitLab From b4b3d026461b16f4f462e70225a5a0493647f0c8 Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 9 Feb 2023 23:20:51 +0000 Subject: [PATCH 3/3] servers: fix -Wstrict-prototypes For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2], or the (new) c-std-porting mailing list [3]. [0] https://lwn.net/Articles/913505/ [1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213 [2] https://wiki.gentoo.org/wiki/Modern_C_porting [3] hosted at lists.linux.dev. Signed-off-by: Sam James --- a/servers/slapd/syslog.c +++ b/servers/slapd/syslog.c @@ -209,7 +209,7 @@ openlog(const char *ident, int logstat, int logfac) } void -closelog() +closelog(void) { (void)close(LogFile); LogFile = -1; -- GitLab