Commit 1e05359f authored by Tom Lane's avatar Tom Lane

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.
parent 7ceec34a
...@@ -13191,80 +13191,6 @@ fi ...@@ -13191,80 +13191,6 @@ fi
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 ## Functions, global variables
...@@ -13780,6 +13706,152 @@ _ACEOF ...@@ -13780,6 +13706,152 @@ _ACEOF
fi 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 HAVE_IPV6=no
echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5 echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5
......
dnl Process this file with autoconf to produce a configure script. 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
dnl Developers, please strive to achieve this order: dnl Developers, please strive to achieve this order:
dnl dnl
...@@ -854,8 +854,6 @@ if test "$with_krb5" = yes; then ...@@ -854,8 +854,6 @@ if test "$with_krb5" = yes; then
[#include <krb5.h>]) [#include <krb5.h>])
fi 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 ## Functions, global variables
...@@ -869,6 +867,9 @@ AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getpeereid memmove poll pstat readlin ...@@ -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(fdatasync, [], [], [#include <unistd.h>])
AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.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 HAVE_IPV6=no
AC_CHECK_TYPE([struct sockaddr_in6], AC_CHECK_TYPE([struct sockaddr_in6],
......
...@@ -87,6 +87,10 @@ ...@@ -87,6 +87,10 @@
don't. */ don't. */
#undef HAVE_DECL_SNPRINTF #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 /* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
don't. */ don't. */
#undef HAVE_DECL_VSNPRINTF #undef HAVE_DECL_VSNPRINTF
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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); ...@@ -332,7 +332,7 @@ extern int inet_aton(const char *cp, struct in_addr * addr);
extern char *strdup(const char *str); extern char *strdup(const char *str);
#endif #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); extern size_t strlcpy(char *dst, const char *src, size_t siz);
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment