Commit 5b02fc32 authored by Mark Andrews's avatar Mark Andrews

2901. [port] Use AC_C_FLEXIBLE_ARRAY_MEMBER. [RT #21316]

parent b667946f
2901. [port] Use AC_C_FLEXIBLE_ARRAY_MEMBER. [RT #21316]
2900. [bug] The placeholder negative caching element was not
properly constructed triggering a INSIST in
dns_ncache_towire(). [RT #21346]
......
......@@ -16,7 +16,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: config.h.in,v 1.124 2010/05/12 08:25:21 marka Exp $ */
/* $Id: config.h.in,v 1.126 2010/05/26 23:44:27 marka Exp $ */
/*! \file */
......@@ -160,6 +160,15 @@ int sigwait(const unsigned int *set, int *sig);
/* Solaris hack to get select_large_fdset. */
#undef FD_SETSIZE
/* Define to nothing if C supports flexible array members, and to 1 if it does
not. That way, with a declaration like `struct s { int n; double
d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99
compilers. When computing the size of such an object, don't use 'sizeof
(struct s)' as it overestimates the size. Use 'offsetof (struct s, d)'
instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with
MSVC and with C++ compilers. */
#undef FLEXIBLE_ARRAY_MEMBER
/* Define to 1 if you have the `chroot' function. */
#undef HAVE_CHROOT
......
......@@ -14,7 +14,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
#
# $Id: configure,v 1.475 2010/05/12 08:25:21 marka Exp $
# $Id: configure,v 1.476 2010/05/19 07:13:15 marka Exp $
#
# Portions Copyright (C) 1996-2001 Nominum, Inc.
#
......@@ -29,7 +29,7 @@
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# From configure.in Revision: 1.492 .
# From configure.in Revision: 1.493 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.62.
#
......@@ -21227,6 +21227,77 @@ _ACEOF
fi
{ $as_echo "$as_me:$LINENO: checking for flexible array members" >&5
$as_echo_n "checking for flexible array members... " >&6; }
if test "${ac_cv_c_flexmember+set}" = set; then
$as_echo_n "(cached) " >&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 <stdlib.h>
#include <stdio.h>
#include <stddef.h>
struct s { int n; double d[]; };
int
main ()
{
int m = getchar ();
struct s *p = malloc (offsetof (struct s, d)
+ m * sizeof (double));
p->d[0] = 0.0;
return p->d != (double *) NULL;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
$as_echo "$ac_try_echo") >&5
(eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
ac_cv_c_flexmember=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_c_flexmember=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_flexmember" >&5
$as_echo "$ac_cv_c_flexmember" >&6; }
if test $ac_cv_c_flexmember = yes; then
cat >>confdefs.h <<\_ACEOF
#define FLEXIBLE_ARRAY_MEMBER /**/
_ACEOF
else
cat >>confdefs.h <<\_ACEOF
#define FLEXIBLE_ARRAY_MEMBER 1
_ACEOF
fi
#
# Older versions of HP/UX don't define seteuid() and setegid()
#
......@@ -18,7 +18,7 @@ AC_DIVERT_PUSH(1)dnl
esyscmd([sed "s/^/# /" COPYRIGHT])dnl
AC_DIVERT_POP()dnl
AC_REVISION($Revision: 1.492 $)
AC_REVISION($Revision: 1.493 $)
AC_INIT(lib/dns/name.c)
AC_PREREQ(2.59)
......@@ -282,6 +282,7 @@ AC_C_CONST
AC_C_INLINE
AC_C_VOLATILE
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
AC_C_FLEXIBLE_ARRAY_MEMBER
#
# Older versions of HP/UX don't define seteuid() and setegid()
......
......@@ -14,10 +14,12 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: client.c,v 1.9 2010/04/14 22:08:47 jinmei Exp $ */
/* $Id: client.c,v 1.10 2010/05/19 07:09:25 marka Exp $ */
#include <config.h>
#include <stddef.h>
#include <isc/app.h>
#include <isc/mem.h>
#include <isc/mutex.h>
......@@ -2878,7 +2880,7 @@ typedef struct {
dns_rdata_t rdata;
size_t size;
isc_mem_t * mctx;
unsigned char data[0];
unsigned char data[FLEXIBLE_ARRAY_MEMBER];
} dns_client_updaterec_t;
isc_result_t
......@@ -2888,9 +2890,8 @@ dns_client_updaterec(dns_client_updateop_t op, dns_name_t *owner,
dns_rdataset_t *rdataset, dns_rdatalist_t *rdatalist,
dns_rdata_t *rdata, isc_mem_t *mctx)
{
dns_client_updaterec_t *updaterec;
size_t size = sizeof(dns_client_updaterec_t);
isc_buffer_t *b = NULL;
dns_client_updaterec_t *updaterec = NULL;
size_t size = offsetof(dns_client_updaterec_t, data);
REQUIRE(op < updateop_max);
REQUIRE(owner != NULL);
......@@ -2919,16 +2920,15 @@ dns_client_updaterec(dns_client_updateop_t op, dns_name_t *owner,
dns_rdataset_init(rdataset);
dns_rdatalist_init(&updaterec->rdatalist);
dns_rdata_init(&updaterec->rdata);
isc_buffer_init(b, b + 1,
size - sizeof(dns_client_updaterec_t));
dns_name_copy(owner, target, b);
isc_buffer_init(&updaterec->buffer, updaterec->data,
size - offsetof(dns_client_updaterec_t, data));
dns_name_copy(owner, target, &updaterec->buffer);
if (source != NULL) {
isc_region_t r;
dns_rdata_clone(source, rdata);
dns_rdata_toregion(rdata, &r);
rdata->data = isc_buffer_used(b);
isc_buffer_copyregion(b, &r);
rdata->data = isc_buffer_used(&updaterec->buffer);
isc_buffer_copyregion(&updaterec->buffer, &r);
}
updaterec->mctx = NULL;
isc_mem_attach(mctx, &updaterec->mctx);
......@@ -2968,9 +2968,9 @@ dns_client_updaterec(dns_client_updateop_t op, dns_name_t *owner,
ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
dns_rdatalist_tordataset(rdatalist, rdataset);
ISC_LIST_APPEND(target->list, rdataset, link);
if (b != NULL) {
if (updaterec != NULL) {
target->attributes |= DNS_NAMEATTR_HASUPDATEREC;
dns_name_setbuffer(target, b);
dns_name_setbuffer(target, &updaterec->buffer);
}
if (op == updateop_add || op == updateop_delete)
target->attributes |= DNS_NAMEATTR_UPDATE;
......
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