mirror of git://anongit.mindrot.org/openssh.git
Handle calloc(0,x) where different from malloc.
Configure assumes that if malloc(0) returns null then calloc(0,n) also does. On some old platforms (SunOS4) malloc behaves as expected (as determined by AC_FUNC_MALLOC) but calloc doesn't. Test for this at configure time and activate the replacement function if found, plus handle this case in rpl_calloc.
This commit is contained in:
parent
2eb4041493
commit
e9dede06e5
19
configure.ac
19
configure.ac
|
@ -1337,8 +1337,23 @@ AC_FUNC_STRFTIME
|
||||||
AC_FUNC_MALLOC
|
AC_FUNC_MALLOC
|
||||||
AC_FUNC_REALLOC
|
AC_FUNC_REALLOC
|
||||||
# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL;
|
# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL;
|
||||||
if test "x$ac_cv_func_malloc_0_nonnull" != "xyes"; then
|
AC_MSG_CHECKING([if calloc(0, N) returns non-null])
|
||||||
AC_DEFINE(HAVE_CALLOC, 0, [calloc(x, 0) returns NULL])
|
AC_RUN_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[ #include <stdlib.h> ]],
|
||||||
|
[[ void *p = calloc(0, 1); exit(p == NULL); ]]
|
||||||
|
)],
|
||||||
|
[ func_calloc_0_nonnull=yes ],
|
||||||
|
[ func_calloc_0_nonnull=no ],
|
||||||
|
[ AC_MSG_WARN([cross compiling: assuming same as malloc])
|
||||||
|
func_calloc_0_nonnull="$ac_cv_func_malloc_0_nonnull"]
|
||||||
|
)
|
||||||
|
AC_MSG_RESULT([$func_calloc_0_nonnull])
|
||||||
|
|
||||||
|
if test "x$func_calloc_0_nonnull" == "xyes"; then
|
||||||
|
AC_DEFINE(HAVE_CALLOC, 1, [calloc(0, x) returns non-null])
|
||||||
|
else
|
||||||
|
AC_DEFINE(HAVE_CALLOC, 0, [calloc(0, x) returns NULL])
|
||||||
AC_DEFINE(calloc, rpl_calloc,
|
AC_DEFINE(calloc, rpl_calloc,
|
||||||
[Define to rpl_calloc if the replacement function should be used.])
|
[Define to rpl_calloc if the replacement function should be used.])
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -50,6 +50,8 @@ rpl_realloc(void *ptr, size_t size)
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
size = 1;
|
size = 1;
|
||||||
|
if (ptr == 0)
|
||||||
|
return malloc(size);
|
||||||
return realloc(ptr, size);
|
return realloc(ptr, size);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue