libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

commit d8d278dd8d48b349ec7b9f193dc4d53ae6625589
parent d5702562a9a9383960af7fea19984b826bc41079
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date:   Sat, 27 Dec 2025 18:32:44 +0100

upgraded_net.c: improved portability

Diffstat:
Msrc/mhd2/upgraded_net.c | 49++++++++++++++++++++++++++++++++++---------------
1 file changed, 34 insertions(+), 15 deletions(-)

diff --git a/src/mhd2/upgraded_net.c b/src/mhd2/upgraded_net.c @@ -86,7 +86,8 @@ mhd_sleep (uint_fast32_t millisec) #if defined(_WIN32) Sleep (millisec); #elif defined(HAVE_NANOSLEEP) - struct timespec slp = {millisec / 1000, (millisec % 1000) * 1000000}; + struct timespec slp = { (time_t) (millisec / 1000), + (long) ((millisec % 1000) * 1000000l)}; struct timespec rmn; int num_retries = 0; while (0 != nanosleep (&slp, &rmn)) @@ -252,19 +253,28 @@ MHD_upgraded_recv (struct MHD_UpgradedHandle *MHD_RESTRICT urh, int wait_err; struct timeval tmvl; -# ifdef MHD_SOCKETS_KIND_POSIX +# ifdef HAVE_TIME_T tmvl.tv_sec = (time_t) (max_wait_millisec / 1000); -# else /* MHD_SOCKETS_KIND_WINSOCK */ +# else /* ! HAVE_TIME_T */ tmvl.tv_sec = (long) (max_wait_millisec / 1000); -# endif /* MHD_SOCKETS_KIND_WINSOCK */ +# endif /* ! HAVE_TIME_T */ if ((max_wait_millisec / 1000 != (uint_fast64_t) tmvl.tv_sec) || - (0 > tmvl.tv_sec)) + ((0 >= tmvl.tv_sec) && (0 != tmvl.tv_sec))) /* Avoid signed/unsigned warnings */ { - tmvl.tv_sec = mhd_TIMEVAL_TV_SEC_MAX; + /* Do not bother figuring out the real maximum 'time_t' value. + '0x7FFFFFFF' is large enough to be already unrealistic and should + fit most of signed or unsigned time_t types. */ + tmvl.tv_sec = 0x7FFFFFFF; tmvl.tv_usec = 0; } else - tmvl.tv_usec = (int) (max_wait_millisec % 1000); + { +# ifdef HAVE_SUSECONDS_T + tmvl.tv_usec = (suseconds_t) ((max_wait_millisec % 1000) * 1000); +# else /* ! HAVE_SUSECONDS_T */ + tmvl.tv_usec = (long) ((max_wait_millisec % 1000) * 1000); +# endif /* ! HAVE_SUSECONDS_T */ + } FD_ZERO (&rfds); FD_SET (socket_fd, &rfds); @@ -495,20 +505,29 @@ MHD_upgraded_send (struct MHD_UpgradedHandle *MHD_RESTRICT urh, } else { -# ifdef MHD_SOCKETS_KIND_POSIX - tmvl.tv_sec = (time_t) (wait_left / 1000); -# else /* MHD_SOCKETS_KIND_WINSOCK */ - tmvl.tv_sec = (long) (wait_left / 1000); -# endif /* MHD_SOCKETS_KIND_WINSOCK */ +# ifdef HAVE_TIME_T + tmvl.tv_sec = (time_t) (max_wait_millisec / 1000); +# else /* ! HAVE_TIME_T */ + tmvl.tv_sec = (long) (max_wait_millisec / 1000); +# endif /* ! HAVE_TIME_T */ if ((max_wait_millisec / 1000 != (uint_fast64_t) tmvl.tv_sec) || - (0 > tmvl.tv_sec)) + ((0 >= tmvl.tv_sec) && (0 != tmvl.tv_sec))) /* Avoid signed/unsigned warnings */ { - tmvl.tv_sec = mhd_TIMEVAL_TV_SEC_MAX; + /* Do not bother figuring out the real maximum 'time_t' value. + '0x7FFFFFFF' is large enough to be already unrealistic and should + fit most of signed or unsigned time_t types. */ + tmvl.tv_sec = 0x7FFFFFFF; tmvl.tv_usec = 0; max_wait = true; } else - tmvl.tv_usec = (int) (max_wait_millisec % 1000); + { +# ifdef HAVE_SUSECONDS_T + tmvl.tv_usec = (suseconds_t) ((max_wait_millisec % 1000) * 1000); +# else /* ! HAVE_SUSECONDS_T */ + tmvl.tv_usec = (long) ((max_wait_millisec % 1000) * 1000); +# endif /* ! HAVE_SUSECONDS_T */ + } } FD_ZERO (&wfds); FD_SET (socket_fd, &wfds);