mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Require a C99-compliant snprintf(), and remove related workarounds.
Since our substitute snprintf now returns a C99-compliant result, there's no need anymore to have complicated code to cope with pre-C99 behavior. We can just make configure substitute snprintf.c if it finds that the system snprintf() is pre-C99. (Note: I do not believe that there are any platforms where this test will trigger that weren't already being rejected due to our other C99-ish feature requirements for snprintf. But let's add the check for paranoia's sake.) Then, simplify the call sites that had logic to cope with the pre-C99 definition. I also dropped some stuff that was being paranoid about the possibility of snprintf overrunning the given buffer. The only reports we've ever heard of that being a problem were for Solaris 7, which is long dead, and we've sure not heard any reports of these assertions triggering in a long time. So let's drop that complexity too. Likewise, drop some code that wasn't trusting snprintf to set errno when it returns -1. That would be not-per-spec, and again there's no real reason to believe it is a live issue, especially not for snprintfs that pass all of configure's feature checks. Discussion: https://postgr.es/m/17245.1534289329@sss.pgh.pa.us
This commit is contained in:
@ -238,6 +238,33 @@ int main()
|
||||
AC_MSG_RESULT([$pgac_cv_snprintf_size_t_support])
|
||||
])# PGAC_FUNC_SNPRINTF_SIZE_T_SUPPORT
|
||||
|
||||
# PGAC_FUNC_SNPRINTF_C99_RESULT
|
||||
# -----------------------------
|
||||
# Determine whether snprintf returns the desired buffer length when
|
||||
# it overruns the actual buffer length. That's required by C99 and POSIX
|
||||
# but ancient platforms don't behave that way, so we must test.
|
||||
#
|
||||
AC_DEFUN([PGAC_FUNC_SNPRINTF_C99_RESULT],
|
||||
[AC_MSG_CHECKING([whether snprintf reports buffer overrun per C99])
|
||||
AC_CACHE_VAL(pgac_cv_snprintf_c99_result,
|
||||
[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
char buf[10];
|
||||
|
||||
if (snprintf(buf, sizeof(buf), "12345678901234567890") != 20)
|
||||
return 1;
|
||||
return 0;
|
||||
}]])],
|
||||
[pgac_cv_snprintf_c99_result=yes],
|
||||
[pgac_cv_snprintf_c99_result=no],
|
||||
[pgac_cv_snprintf_c99_result=cross])
|
||||
])dnl AC_CACHE_VAL
|
||||
AC_MSG_RESULT([$pgac_cv_snprintf_c99_result])
|
||||
])# PGAC_FUNC_SNPRINTF_C99_RESULT
|
||||
|
||||
|
||||
# PGAC_TYPE_LOCALE_T
|
||||
# ------------------
|
||||
|
Reference in New Issue
Block a user