Properly handle the case where strlcpy() exists in libc but isn't

declared in the system headers.  Per report from Bruce than some BSDen
are like this.
This commit is contained in:
Tom Lane 2006-10-02 00:06:18 +00:00
parent 7ceec34a73
commit 1e05359f4b
4 changed files with 156 additions and 79 deletions

220
configure vendored
View File

@ -13191,80 +13191,6 @@ fi
fi
# This is probably only present on Darwin, but may as well check always
echo "$as_me:$LINENO: checking whether F_FULLFSYNC is declared" >&5
echo $ECHO_N "checking whether F_FULLFSYNC is declared... $ECHO_C" >&6
if test "${ac_cv_have_decl_F_FULLFSYNC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <fcntl.h>
int
main ()
{
#ifndef F_FULLFSYNC
char *p = (char *) F_FULLFSYNC;
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_have_decl_F_FULLFSYNC=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_have_decl_F_FULLFSYNC=no
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $ac_cv_have_decl_F_FULLFSYNC" >&5
echo "${ECHO_T}$ac_cv_have_decl_F_FULLFSYNC" >&6
if test $ac_cv_have_decl_F_FULLFSYNC = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_F_FULLFSYNC 1
_ACEOF
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_F_FULLFSYNC 0
_ACEOF
fi
##
## Functions, global variables
@ -13780,6 +13706,152 @@ _ACEOF
fi
echo "$as_me:$LINENO: checking whether strlcpy is declared" >&5
echo $ECHO_N "checking whether strlcpy is declared... $ECHO_C" >&6
if test "${ac_cv_have_decl_strlcpy+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
int
main ()
{
#ifndef strlcpy
char *p = (char *) strlcpy;
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_have_decl_strlcpy=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_have_decl_strlcpy=no
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $ac_cv_have_decl_strlcpy" >&5
echo "${ECHO_T}$ac_cv_have_decl_strlcpy" >&6
if test $ac_cv_have_decl_strlcpy = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRLCPY 1
_ACEOF
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRLCPY 0
_ACEOF
fi
# This is probably only present on Darwin, but may as well check always
echo "$as_me:$LINENO: checking whether F_FULLFSYNC is declared" >&5
echo $ECHO_N "checking whether F_FULLFSYNC is declared... $ECHO_C" >&6
if test "${ac_cv_have_decl_F_FULLFSYNC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <fcntl.h>
int
main ()
{
#ifndef F_FULLFSYNC
char *p = (char *) F_FULLFSYNC;
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_have_decl_F_FULLFSYNC=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_have_decl_F_FULLFSYNC=no
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $ac_cv_have_decl_F_FULLFSYNC" >&5
echo "${ECHO_T}$ac_cv_have_decl_F_FULLFSYNC" >&6
if test $ac_cv_have_decl_F_FULLFSYNC = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_F_FULLFSYNC 1
_ACEOF
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_F_FULLFSYNC 0
_ACEOF
fi
HAVE_IPV6=no
echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5

View File

@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
dnl $PostgreSQL: pgsql/configure.in,v 1.477 2006/10/01 23:47:16 tgl Exp $
dnl $PostgreSQL: pgsql/configure.in,v 1.478 2006/10/02 00:06:18 tgl Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
@ -854,8 +854,6 @@ if test "$with_krb5" = yes; then
[#include <krb5.h>])
fi
# This is probably only present on Darwin, but may as well check always
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
##
## Functions, global variables
@ -869,6 +867,9 @@ AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getpeereid memmove poll pstat readlin
AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>])
AC_CHECK_DECLS(strlcpy)
# This is probably only present on Darwin, but may as well check always
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
HAVE_IPV6=no
AC_CHECK_TYPE([struct sockaddr_in6],

View File

@ -87,6 +87,10 @@
don't. */
#undef HAVE_DECL_SNPRINTF
/* Define to 1 if you have the declaration of `strlcpy', and to 0 if you
don't. */
#undef HAVE_DECL_STRLCPY
/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
don't. */
#undef HAVE_DECL_VSNPRINTF

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/port.h,v 1.101 2006/09/30 12:06:42 momjian Exp $
* $PostgreSQL: pgsql/src/include/port.h,v 1.102 2006/10/02 00:06:18 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -332,7 +332,7 @@ extern int inet_aton(const char *cp, struct in_addr * addr);
extern char *strdup(const char *str);
#endif
#if !defined(HAVE_STRLCPY) || defined(bsdi) /* bsdi doesn't have the prototype */
#if !HAVE_DECL_STRLCPY
extern size_t strlcpy(char *dst, const char *src, size_t siz);
#endif