commit 9f333edbdf76c1a8e9842ab551b97975570cf192
parent aaab73802c5f05d231d87ab9d401e6b262c6fe2e
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date: Thu, 2 Sep 2021 10:45:24 +0300
Fixed possible preprocessor error when SIZE_MAX is not digits-only
Diffstat:
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
@@ -1073,6 +1073,9 @@ AC_CHECK_HEADER([[search.h]],
AM_CONDITIONAL([MHD_HAVE_TSEARCH], [[test "x$ac_cv_header_search_h" = xyes && test "x$HAVE_TSEARCH" = "x1" && test "x$REPLACE_TSEARCH" != "x1"]])
# Check for types sizes
+# Types sizes are used as an indirect indication of maximum allowed values for types
+# which is used to exclude by preprocessor some compiler checks for values clips
+# Assuming no staffing or uniform staffing for integer types
AC_CACHE_CHECK([size of tv_sec member of struct timeval], [mhd_cv_size_timeval_tv_sec],
[
AC_COMPUTE_INT([mhd_cv_size_timeval_tv_sec], [((long int)sizeof(test_var.tv_sec))],
@@ -1103,6 +1106,17 @@ AC_DEFINE_UNQUOTED([SIZEOF_STRUCT_TIMEVAL_TV_SEC], [$mhd_cv_size_timeval_tv_sec]
[The size of `tv_sec' member of `struct timeval', as computed by sizeof])
AC_CHECK_SIZEOF([uint64_t], [], [[#include <stdint.h>]])
AC_CHECK_SIZEOF([unsigned int], [], [[#include <stdint.h>]])
+AC_CHECK_SIZEOF([size_t], [],
+ [[
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif /* HAVE_STDLIB_H */
+#ifdef HAVE_STDDEF_H
+#include <stddef.h>
+#endif /* HAVE_STDDEF_H */
+#include <stdio.h>
+ ]]
+)
AC_CHECK_HEADERS([dlfcn.h],[have_tlsplugin=yes],[have_tlsplugin=no], [AC_INCLUDES_DEFAULT])
AM_CONDITIONAL([MHD_HAVE_TLS_PLUGIN], [[test "x$have_tlsplugin" = xyes]])
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
@@ -5695,7 +5695,7 @@ parse_options_va (struct MHD_Daemon *daemon,
#endif
daemon->worker_pool_size = 0;
}
-#if (0 == (UINT_MAX + 0)) || (UINT_MAX >= (SIZE_MAX / (64 * 1024)))
+#if SIZEOF_UNSIGNED_INT >= (SIZEOF_SIZE_T - 2)
/* Next comparison could be always false on some platforms and whole branch will
* be optimized out on these platforms. On others it will be compiled into real
* check. */
@@ -5709,7 +5709,7 @@ parse_options_va (struct MHD_Daemon *daemon,
#endif
return MHD_NO;
}
-#endif /* (UINT_MAX >= (SIZE_MAX/(64*1024))) */
+#endif /* SIZEOF_UNSIGNED_INT >= (SIZEOF_SIZE_T - 2) */
else
{
if (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD))
diff --git a/src/microhttpd/mhd_threads.c b/src/microhttpd/mhd_threads.c
@@ -215,13 +215,13 @@ MHD_create_thread_ (MHD_thread_handle_ID_ *thread,
return ! res;
#elif defined(MHD_USE_W32_THREADS)
-#if SIZE_MAX != UINT_MAX
+#if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_INT
if (stack_size > UINT_MAX)
{
errno = EINVAL;
return 0;
}
-#endif /* SIZE_MAX != UINT_MAX */
+#endif /* SIZEOF_SIZE_T != SIZEOF_UNSIGNED_INT */
thread->handle = (MHD_thread_handle_)
_beginthreadex (NULL,