Import Apache apr-1.4.8 to vendor staging area.

This commit is contained in:
Peter Wemm 2013-07-28 05:06:53 +00:00
parent b641829dca
commit f2be5817e9
27 changed files with 619 additions and 944 deletions

66
CHANGES
View File

@ -1,11 +1,73 @@
-*- coding: utf-8 -*- -*- coding: utf-8 -*-
Changes for APR 1.4.8
*) Fix compiltation with FreeBSD on ARM. [Olli Hauer <ohauer gmx.de>]
*) Fix 1.4.7 regression in apr_mcast_hops() and apr_mcast_loopback()
for AF_INET (IPv4) sockets on most Unix platforms. [Joe Orton]
*) Fix the return value of apr_threadattr_detach_get() on some
platforms like OS X and Solaris. [Rainer Jung, <dusanv gmail com>]
Changes for APR 1.4.7
*) Fix apr_sockaddr_info_get() not returning an error in some cases.
PR 54779. [Jan Kaluža <jkaluza redhat com>]
*) Fix amd64 assembler version of apr_atomic_xchgptr(). PR 51851. [Mattias
Engdegård <mattiase acm org>]
*) Fix PPC atomics to work with gcc 4.0. PR 54840. [Mattias Engdegård
<mattiase acm org>]
*) configure: Fix detection of O_NONBLOCK inheritance on busy
systems. [Rainer Jung]
*) Remove unused code, fix strict C compliance bug in SHA-256
implementation. [Jan Kaluza <jkaluza redhat.com>]
*) Fix apr_ipsubnet_test() false positives when comparing IPv4
subnet representation against an IPv6 address. PR 54047. [Joe Orton]
*) apr_socket_accept_filter: Return success when trying to again set
the filter to the same value as before, avoiding an unhelpful
APR_EINVAL. PR 37863. [Jeff Trawick]
*) configure: Fix Linux 3.x detection. PR 54001. [Gilles Espinasse
<g esp free fr>]
*) apr_time_exp_*() on Windows: Fix error in the tm_yday field of
apr_time_exp_t for times within leap years. PR 53175.
[Jeff Trawick]
*) Improve platform detection by updating config.guess and config.sub.
[Rainer Jung]
*) Add support for OSX Mountain Lion (10.8) [Jim Jagielski]
*) Add various gcc function attributes. [Stefan Fritsch]
*) Fix some problems in apr_sockaddr_info_get() when trying to resolve
the loopback addresses of a protocol family that is not otherwise
configured on the system. PR 52709. [Nirgal Vourgère
<jmv_deb nirgal com>, Stefan Fritsch]
*) Fix file not being unlocked if truncate call on a file fails.
[Mladen Turk]
*) apr_mcast_hops: Fix EINVAL for IPv6 sockets caused by using byte
instead integer for setsockopt. [Mladen Turk]
*) Windows: Fix compile-time checks for 64-bit builds, resolving a
crash in httpd's mod_rewrite. PR 49155. [<anindyabaruah gmail.com>]
Changes for APR 1.4.6 Changes for APR 1.4.6
*) Flush write buffer before truncate call on a file. *) Flush write buffer before truncate call on a file.
[Mladen Turk] [Mladen Turk]
*) Security: oCERT-2011-003 *) Randomise hashes by providing a seed.
Randomise hashes by providing a seed. Assigned CVE-2012-0840, oCERT-2011-003, but not known to be exploitable.
[Bojan Smojver, Branko Čibej, Ruediger Pluem et al.] [Bojan Smojver, Branko Čibej, Ruediger Pluem et al.]
*) apr_random: Prevent segfault if pool used to initialize apr_random is *) apr_random: Prevent segfault if pool used to initialize apr_random is

View File

@ -25,7 +25,7 @@
# #
# For example; # For example;
# #
# nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean # nmake -f Makefile.win PREFIX=C:\APR buildall checkall install clean
# #
!IF EXIST("apr.sln") && ([devenv /help > NUL 2>&1] == 0) \ !IF EXIST("apr.sln") && ([devenv /help > NUL 2>&1] == 0) \

View File

@ -3,7 +3,7 @@
Summary: Apache Portable Runtime library Summary: Apache Portable Runtime library
Name: apr Name: apr
Version: 1.4.6 Version: 1.4.8
Release: 1 Release: 1
License: Apache Software License License: Apache Software License
Group: System Environment/Libraries Group: System Environment/Libraries

View File

@ -117,7 +117,7 @@ APR_DECLARE(void*) apr_atomic_xchgptr(volatile void **mem, void *with)
#elif APR_SIZEOF_VOIDP == 8 #elif APR_SIZEOF_VOIDP == 8
asm volatile ("xchgq %q2, %1" asm volatile ("xchgq %q2, %1"
: "=a" (prev), "+m" (*mem) : "=a" (prev), "+m" (*mem)
: "r" ((unsigned long)with)); : "0" (with));
#else #else
#error APR_SIZEOF_VOIDP value not supported #error APR_SIZEOF_VOIDP value not supported
#endif #endif

View File

@ -43,12 +43,12 @@ APR_DECLARE(apr_uint32_t) apr_atomic_add32(volatile apr_uint32_t *mem, apr_uint3
{ {
apr_uint32_t prev, temp; apr_uint32_t prev, temp;
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%3\n" /* load and reserve */ " lwarx %0,0,%3\n" /* load and reserve */
" add %1,%0,%4\n" /* add val and prev */ " add %1,%0,%4\n" /* add val and prev */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %1,0,%3\n" /* store new value */ " stwcx. %1,0,%3\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
: "=&r" (prev), "=&r" (temp), "=m" (*mem) : "=&r" (prev), "=&r" (temp), "=m" (*mem)
: "b" (mem), "r" (val) : "b" (mem), "r" (val)
: "cc", "memory"); : "cc", "memory");
@ -60,12 +60,12 @@ APR_DECLARE(void) apr_atomic_sub32(volatile apr_uint32_t *mem, apr_uint32_t val)
{ {
apr_uint32_t temp; apr_uint32_t temp;
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%2\n" /* load and reserve */ " lwarx %0,0,%2\n" /* load and reserve */
" subf %0,%3,%0\n" /* subtract val */ " subf %0,%3,%0\n" /* subtract val */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %0,0,%2\n" /* store new value */ " stwcx. %0,0,%2\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
: "=&r" (temp), "=m" (*mem) : "=&r" (temp), "=m" (*mem)
: "b" (mem), "r" (val) : "b" (mem), "r" (val)
: "cc", "memory"); : "cc", "memory");
@ -75,12 +75,12 @@ APR_DECLARE(apr_uint32_t) apr_atomic_inc32(volatile apr_uint32_t *mem)
{ {
apr_uint32_t prev; apr_uint32_t prev;
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%2\n" /* load and reserve */ " lwarx %0,0,%2\n" /* load and reserve */
" addi %0,%0,1\n" /* add immediate */ " addi %0,%0,1\n" /* add immediate */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %0,0,%2\n" /* store new value */ " stwcx. %0,0,%2\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
" subi %0,%0,1\n" /* return old value */ " subi %0,%0,1\n" /* return old value */
: "=&b" (prev), "=m" (*mem) : "=&b" (prev), "=m" (*mem)
: "b" (mem), "m" (*mem) : "b" (mem), "m" (*mem)
@ -93,12 +93,12 @@ APR_DECLARE(int) apr_atomic_dec32(volatile apr_uint32_t *mem)
{ {
apr_uint32_t prev; apr_uint32_t prev;
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%2\n" /* load and reserve */ " lwarx %0,0,%2\n" /* load and reserve */
" subi %0,%0,1\n" /* subtract immediate */ " subi %0,%0,1\n" /* subtract immediate */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %0,0,%2\n" /* store new value */ " stwcx. %0,0,%2\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
: "=&b" (prev), "=m" (*mem) : "=&b" (prev), "=m" (*mem)
: "b" (mem), "m" (*mem) : "b" (mem), "m" (*mem)
: "cc", "memory"); : "cc", "memory");
@ -111,13 +111,13 @@ APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint3
{ {
apr_uint32_t prev; apr_uint32_t prev;
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%1\n" /* load and reserve */ " lwarx %0,0,%1\n" /* load and reserve */
" cmpw %0,%3\n" /* compare operands */ " cmpw %0,%3\n" /* compare operands */
" bne- exit_%=\n" /* skip if not equal */ " bne- exit_%=\n" /* skip if not equal */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %2,0,%1\n" /* store new value */ " stwcx. %2,0,%1\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
"exit_%=:\n" /* not equal */ "exit_%=:\n" /* not equal */
: "=&r" (prev) : "=&r" (prev)
: "b" (mem), "r" (with), "r" (cmp) : "b" (mem), "r" (with), "r" (cmp)
@ -130,11 +130,11 @@ APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint
{ {
apr_uint32_t prev; apr_uint32_t prev;
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%1\n" /* load and reserve */ " lwarx %0,0,%1\n" /* load and reserve */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %2,0,%1\n" /* store new value */ " stwcx. %2,0,%1\n" /* store new value */
" bne- loop_%=" /* loop if lost */ " bne- 1b" /* loop if lost */
: "=&r" (prev) : "=&r" (prev)
: "b" (mem), "r" (val) : "b" (mem), "r" (val)
: "cc", "memory"); : "cc", "memory");
@ -146,26 +146,26 @@ APR_DECLARE(void*) apr_atomic_casptr(volatile void **mem, void *with, const void
{ {
void *prev; void *prev;
#if APR_SIZEOF_VOIDP == 4 #if APR_SIZEOF_VOIDP == 4
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%1\n" /* load and reserve */ " lwarx %0,0,%1\n" /* load and reserve */
" cmpw %0,%3\n" /* compare operands */ " cmpw %0,%3\n" /* compare operands */
" bne- exit_%=\n" /* skip if not equal */ " bne- 2f\n" /* skip if not equal */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %2,0,%1\n" /* store new value */ " stwcx. %2,0,%1\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
"exit_%=:\n" /* not equal */ "2:\n" /* not equal */
: "=&r" (prev) : "=&r" (prev)
: "b" (mem), "r" (with), "r" (cmp) : "b" (mem), "r" (with), "r" (cmp)
: "cc", "memory"); : "cc", "memory");
#elif APR_SIZEOF_VOIDP == 8 #elif APR_SIZEOF_VOIDP == 8
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" ldarx %0,0,%1\n" /* load and reserve */ " ldarx %0,0,%1\n" /* load and reserve */
" cmpd %0,%3\n" /* compare operands */ " cmpd %0,%3\n" /* compare operands */
" bne- exit_%=\n" /* skip if not equal */ " bne- 2f\n" /* skip if not equal */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stdcx. %2,0,%1\n" /* store new value */ " stdcx. %2,0,%1\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
"exit_%=:\n" /* not equal */ "2:\n" /* not equal */
: "=&r" (prev) : "=&r" (prev)
: "b" (mem), "r" (with), "r" (cmp) : "b" (mem), "r" (with), "r" (cmp)
: "cc", "memory"); : "cc", "memory");
@ -179,21 +179,21 @@ APR_DECLARE(void*) apr_atomic_xchgptr(volatile void **mem, void *with)
{ {
void *prev; void *prev;
#if APR_SIZEOF_VOIDP == 4 #if APR_SIZEOF_VOIDP == 4
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" lwarx %0,0,%1\n" /* load and reserve */ " lwarx %0,0,%1\n" /* load and reserve */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stwcx. %2,0,%1\n" /* store new value */ " stwcx. %2,0,%1\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
" isync\n" /* memory barrier */ " isync\n" /* memory barrier */
: "=&r" (prev) : "=&r" (prev)
: "b" (mem), "r" (with) : "b" (mem), "r" (with)
: "cc", "memory"); : "cc", "memory");
#elif APR_SIZEOF_VOIDP == 8 #elif APR_SIZEOF_VOIDP == 8
asm volatile ("loop_%=:\n" /* lost reservation */ asm volatile ("1:\n" /* lost reservation */
" ldarx %0,0,%1\n" /* load and reserve */ " ldarx %0,0,%1\n" /* load and reserve */
PPC405_ERR77_SYNC /* ppc405 Erratum 77 */ PPC405_ERR77_SYNC /* ppc405 Erratum 77 */
" stdcx. %2,0,%1\n" /* store new value */ " stdcx. %2,0,%1\n" /* store new value */
" bne- loop_%=\n" /* loop if lost */ " bne- 1b\n" /* loop if lost */
" isync\n" /* memory barrier */ " isync\n" /* memory barrier */
: "=&r" (prev) : "=&r" (prev)
: "b" (mem), "r" (with) : "b" (mem), "r" (with)

435
configure vendored
View File

@ -1,11 +1,9 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.68. # Generated by GNU Autoconf 2.69.
# #
# #
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
# Foundation, Inc.
# #
# #
# This configure script is free software; the Free Software Foundation # This configure script is free software; the Free Software Foundation
@ -134,6 +132,31 @@ export LANGUAGE
# CDPATH. # CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
_as_can_reexec=no; export _as_can_reexec;
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
as_fn_exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then if test "x$CONFIG_SHELL" = x; then
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
emulate sh emulate sh
@ -167,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
else else
exitcode=1; echo positional parameters were not saved. exitcode=1; echo positional parameters were not saved.
fi fi
test x\$exitcode = x0 || exit 1" test x\$exitcode = x0 || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@ -220,6 +244,7 @@ IFS=$as_save_IFS
if test "x$CONFIG_SHELL" != x; then : if test "x$CONFIG_SHELL" != x; then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also # neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables. # works around shells that cannot unset nonexistent variables.
@ -227,14 +252,17 @@ IFS=$as_save_IFS
BASH_ENV=/dev/null BASH_ENV=/dev/null
ENV=/dev/null ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
export CONFIG_SHELL
case $- in # (((( case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;; *v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;; *v* ) as_opts=-v ;;
*x* ) as_opts=-x ;; *x* ) as_opts=-x ;;
* ) as_opts= ;; * ) as_opts= ;;
esac esac
exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi fi
if test x$as_have_required = xno; then : if test x$as_have_required = xno; then :
@ -336,6 +364,14 @@ $as_echo X"$as_dir" |
} # as_fn_mkdir_p } # as_fn_mkdir_p
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE # as_fn_append VAR VALUE
# ---------------------- # ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take # Append the text in VALUE to the end of the definition contained in VAR. Take
@ -457,6 +493,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
chmod +x "$as_me.lineno" || chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
# in an infinite loop. This has already happened in practice.
_as_can_reexec=no; export _as_can_reexec
# Don't try to exec as it changes $[0], causing all sort of problems # Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the # (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this). # original and so on. Autoconf is especially sensitive to this).
@ -491,16 +531,16 @@ if (echo >conf$$.file) 2>/dev/null; then
# ... but there are two gotchas: # ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -p'. # In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p' as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln as_ln_s=ln
else else
as_ln_s='cp -p' as_ln_s='cp -pR'
fi fi
else else
as_ln_s='cp -p' as_ln_s='cp -pR'
fi fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null rmdir conf$$.dir 2>/dev/null
@ -512,28 +552,8 @@ else
as_mkdir_p=false as_mkdir_p=false
fi fi
if test -x / >/dev/null 2>&1; then
as_test_x='test -x' as_test_x='test -x'
else as_executable_p=as_fn_executable_p
if ls -dL / >/dev/null 2>&1; then
as_ls_L_option=L
else
as_ls_L_option=
fi
as_test_x='
eval sh -c '\''
if test -d "$1"; then
test -d "$1/.";
else
case $1 in #(
-*)set "./$1";;
esac;
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
???[sx]*):;;*)false;;esac;fi
'\'' sh
'
fi
as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name. # Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@ -1371,8 +1391,6 @@ target=$target_alias
if test "x$host_alias" != x; then if test "x$host_alias" != x; then
if test "x$build_alias" = x; then if test "x$build_alias" = x; then
cross_compiling=maybe cross_compiling=maybe
$as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used" >&2
elif test "x$build_alias" != "x$host_alias"; then elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes cross_compiling=yes
fi fi
@ -1642,9 +1660,9 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
configure configure
generated by GNU Autoconf 2.68 generated by GNU Autoconf 2.69
Copyright (C) 2010 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it. gives unlimited permission to copy, distribute and modify it.
_ACEOF _ACEOF
@ -1917,7 +1935,7 @@ $as_echo "$ac_try_echo"; } >&5
test ! -s conftest.err test ! -s conftest.err
} && test -s conftest$ac_exeext && { } && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes || test "$cross_compiling" = yes ||
$as_test_x conftest$ac_exeext test -x conftest$ac_exeext
}; then : }; then :
ac_retval=0 ac_retval=0
else else
@ -2074,7 +2092,8 @@ int
main () main ()
{ {
static int test_array [1 - 2 * !(($2) >= 0)]; static int test_array [1 - 2 * !(($2) >= 0)];
test_array [0] = 0 test_array [0] = 0;
return test_array [0];
; ;
return 0; return 0;
@ -2090,7 +2109,8 @@ int
main () main ()
{ {
static int test_array [1 - 2 * !(($2) <= $ac_mid)]; static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0 test_array [0] = 0;
return test_array [0];
; ;
return 0; return 0;
@ -2116,7 +2136,8 @@ int
main () main ()
{ {
static int test_array [1 - 2 * !(($2) < 0)]; static int test_array [1 - 2 * !(($2) < 0)];
test_array [0] = 0 test_array [0] = 0;
return test_array [0];
; ;
return 0; return 0;
@ -2132,7 +2153,8 @@ int
main () main ()
{ {
static int test_array [1 - 2 * !(($2) >= $ac_mid)]; static int test_array [1 - 2 * !(($2) >= $ac_mid)];
test_array [0] = 0 test_array [0] = 0;
return test_array [0];
; ;
return 0; return 0;
@ -2166,7 +2188,8 @@ int
main () main ()
{ {
static int test_array [1 - 2 * !(($2) <= $ac_mid)]; static int test_array [1 - 2 * !(($2) <= $ac_mid)];
test_array [0] = 0 test_array [0] = 0;
return test_array [0];
; ;
return 0; return 0;
@ -2342,7 +2365,7 @@ This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was It was created by $as_me, which was
generated by GNU Autoconf 2.68. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@ $ $0 $@
@ -3192,14 +3215,6 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
# _LT_LANG # _LT_LANG
############################################################
# NOTE: This macro has been submitted for inclusion into #
# GNU Autoconf as AC_PROG_GO. When it is available in #
# a released version of Autoconf we should remove this #
# macro and use it instead. #
############################################################
#m4_defun
#m4_ifndef #m4_ifndef
@ -5069,7 +5084,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc" ac_cv_prog_CC="${ac_tool_prefix}gcc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -5109,7 +5124,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc" ac_cv_prog_ac_ct_CC="gcc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -5162,7 +5177,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc" ac_cv_prog_CC="${ac_tool_prefix}cc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -5203,7 +5218,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes ac_prog_rejected=yes
continue continue
@ -5261,7 +5276,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog" ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -5305,7 +5320,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog" ac_cv_prog_ac_ct_CC="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -5751,8 +5766,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */ /* end confdefs.h. */
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> struct stat;
#include <sys/stat.h>
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
struct buf { int x; }; struct buf { int x; };
FILE * (*rcsopen) (struct buf *, struct stat *, int); FILE * (*rcsopen) (struct buf *, struct stat *, int);
@ -5860,7 +5874,7 @@ do
for ac_prog in sed gsed; do for ac_prog in sed gsed; do
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
{ test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue as_fn_executable_p "$ac_path_SED" || continue
# Check for GNU ac_path_SED and select it if it is found. # Check for GNU ac_path_SED and select it if it is found.
# Check for GNU $ac_path_SED # Check for GNU $ac_path_SED
case `"$ac_path_SED" --version 2>&1` in case `"$ac_path_SED" --version 2>&1` in
@ -6444,83 +6458,12 @@ if test "x$apr_preload_done" != "xyes" ; then
;; ;;
*-linux*) *-linux*)
case `uname -r` in
2.* )
if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DLINUX=2\""
CPPFLAGS="-DLINUX=2"
else
apr_addto_bugger="-DLINUX=2"
for i in $apr_addto_bugger; do
apr_addto_duplicate="0"
for j in $CPPFLAGS; do
if test "x$i" = "x$j"; then
apr_addto_duplicate="1"
break
fi
done
if test $apr_addto_duplicate = "0"; then
test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS"
CPPFLAGS="$CPPFLAGS $i"
fi
done
fi
;;
1.* )
if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DLINUX=1\""
CPPFLAGS="-DLINUX=1"
else
apr_addto_bugger="-DLINUX=1"
for i in $apr_addto_bugger; do
apr_addto_duplicate="0"
for j in $CPPFLAGS; do
if test "x$i" = "x$j"; then
apr_addto_duplicate="1"
break
fi
done
if test $apr_addto_duplicate = "0"; then
test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS"
CPPFLAGS="$CPPFLAGS $i"
fi
done
fi
;;
* )
;;
esac
if test "x$CPPFLAGS" = "x"; then if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-D_REENTRANT -D_GNU_SOURCE\"" test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DLINUX -D_REENTRANT -D_GNU_SOURCE\""
CPPFLAGS="-D_REENTRANT -D_GNU_SOURCE" CPPFLAGS="-DLINUX -D_REENTRANT -D_GNU_SOURCE"
else else
apr_addto_bugger="-D_REENTRANT -D_GNU_SOURCE" apr_addto_bugger="-DLINUX -D_REENTRANT -D_GNU_SOURCE"
for i in $apr_addto_bugger; do
apr_addto_duplicate="0"
for j in $CPPFLAGS; do
if test "x$i" = "x$j"; then
apr_addto_duplicate="1"
break
fi
done
if test $apr_addto_duplicate = "0"; then
test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS"
CPPFLAGS="$CPPFLAGS $i"
fi
done
fi
;;
*-GNU*)
if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DHURD -D_GNU_SOURCE\""
CPPFLAGS="-DHURD -D_GNU_SOURCE"
else
apr_addto_bugger="-DHURD -D_GNU_SOURCE"
for i in $apr_addto_bugger; do for i in $apr_addto_bugger; do
apr_addto_duplicate="0" apr_addto_duplicate="0"
for j in $CPPFLAGS; do for j in $CPPFLAGS; do
@ -6769,6 +6712,29 @@ if test "x$apr_preload_done" != "xyes" ; then
done done
fi fi
;;
*-gnu*|*-GNU*)
if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-D_REENTRANT -D_GNU_SOURCE -DHURD\""
CPPFLAGS="-D_REENTRANT -D_GNU_SOURCE -DHURD"
else
apr_addto_bugger="-D_REENTRANT -D_GNU_SOURCE -DHURD"
for i in $apr_addto_bugger; do
apr_addto_duplicate="0"
for j in $CPPFLAGS; do
if test "x$i" = "x$j"; then
apr_addto_duplicate="1"
break
fi
done
if test $apr_addto_duplicate = "0"; then
test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS"
CPPFLAGS="$CPPFLAGS $i"
fi
done
fi
;; ;;
*-next-nextstep*) *-next-nextstep*)
@ -6898,7 +6864,7 @@ if test "x$apr_preload_done" != "xyes" ; then
fi fi
# See issue 34332 # See issue 34332
;; ;;
*-apple-darwin1[01].*) *-apple-darwin1?.*)
if test "x$CPPFLAGS" = "x"; then if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DDARWIN_10\"" test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-DDARWIN_10\""
@ -9512,7 +9478,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AWK="$ac_prog" ac_cv_prog_AWK="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9564,7 +9530,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9604,7 +9570,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib" ac_cv_prog_ac_ct_RANLIB="ranlib"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9676,7 +9642,7 @@ case $as_dir/ in #((
# by default. # by default.
for ac_prog in ginstall scoinst install; do for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
if test $ac_prog = install && if test $ac_prog = install &&
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention. # AIX install. It has an incompatible calling convention.
@ -9748,7 +9714,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_RM="rm" ac_cv_prog_RM="rm"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9785,7 +9751,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AS="as" ac_cv_prog_AS="as"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9822,7 +9788,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ASCPP="cpp" ac_cv_prog_ASCPP="cpp"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9860,7 +9826,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AR="${ac_tool_prefix}ar" ac_cv_prog_AR="${ac_tool_prefix}ar"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9900,7 +9866,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_AR="ar" ac_cv_prog_ac_ct_AR="ar"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -9955,7 +9921,7 @@ do
for ac_prog in grep ggrep; do for ac_prog in grep ggrep; do
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
{ test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue as_fn_executable_p "$ac_path_GREP" || continue
# Check for GNU ac_path_GREP and select it if it is found. # Check for GNU ac_path_GREP and select it if it is found.
# Check for GNU $ac_path_GREP # Check for GNU $ac_path_GREP
case `"$ac_path_GREP" --version 2>&1` in case `"$ac_path_GREP" --version 2>&1` in
@ -10021,7 +9987,7 @@ do
for ac_prog in egrep; do for ac_prog in egrep; do
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
{ test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue as_fn_executable_p "$ac_path_EGREP" || continue
# Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP # Check for GNU $ac_path_EGREP
case `"$ac_path_EGREP" --version 2>&1` in case `"$ac_path_EGREP" --version 2>&1` in
@ -10421,7 +10387,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AS="${ac_tool_prefix}as" ac_cv_prog_AS="${ac_tool_prefix}as"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -10461,7 +10427,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_AS="as" ac_cv_prog_ac_ct_AS="as"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -10513,7 +10479,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -10553,7 +10519,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DLLTOOL="dlltool" ac_cv_prog_ac_ct_DLLTOOL="dlltool"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -10605,7 +10571,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -10645,7 +10611,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OBJDUMP="objdump" ac_cv_prog_ac_ct_OBJDUMP="objdump"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -10819,7 +10785,7 @@ do
for ac_prog in sed gsed; do for ac_prog in sed gsed; do
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
{ test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue as_fn_executable_p "$ac_path_SED" || continue
# Check for GNU ac_path_SED and select it if it is found. # Check for GNU ac_path_SED and select it if it is found.
# Check for GNU $ac_path_SED # Check for GNU $ac_path_SED
case `"$ac_path_SED" --version 2>&1` in case `"$ac_path_SED" --version 2>&1` in
@ -10898,7 +10864,7 @@ do
for ac_prog in fgrep; do for ac_prog in fgrep; do
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
{ test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue as_fn_executable_p "$ac_path_FGREP" || continue
# Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU ac_path_FGREP and select it if it is found.
# Check for GNU $ac_path_FGREP # Check for GNU $ac_path_FGREP
case `"$ac_path_FGREP" --version 2>&1` in case `"$ac_path_FGREP" --version 2>&1` in
@ -11154,7 +11120,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -11198,7 +11164,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -11611,7 +11577,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -11651,7 +11617,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OBJDUMP="objdump" ac_cv_prog_ac_ct_OBJDUMP="objdump"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -11954,7 +11920,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -11994,7 +11960,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DLLTOOL="dlltool" ac_cv_prog_ac_ct_DLLTOOL="dlltool"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -12094,7 +12060,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AR="$ac_tool_prefix$ac_prog" ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -12138,7 +12104,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_AR="$ac_prog" ac_cv_prog_ac_ct_AR="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -12263,7 +12229,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip" ac_cv_prog_STRIP="${ac_tool_prefix}strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -12303,7 +12269,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_STRIP="strip" ac_cv_prog_ac_ct_STRIP="strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -12362,7 +12328,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -12402,7 +12368,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib" ac_cv_prog_ac_ct_RANLIB="ranlib"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13051,7 +13017,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13091,7 +13057,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13171,7 +13137,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13211,7 +13177,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13263,7 +13229,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13303,7 +13269,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_NMEDIT="nmedit" ac_cv_prog_ac_ct_NMEDIT="nmedit"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13355,7 +13321,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_LIPO="${ac_tool_prefix}lipo" ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13395,7 +13361,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_LIPO="lipo" ac_cv_prog_ac_ct_LIPO="lipo"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13447,7 +13413,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OTOOL="${ac_tool_prefix}otool" ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13487,7 +13453,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OTOOL="otool" ac_cv_prog_ac_ct_OTOOL="otool"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13539,7 +13505,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -13579,7 +13545,7 @@ do
IFS=$as_save_IFS IFS=$as_save_IFS
test -z "$as_dir" && as_dir=. test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OTOOL64="otool64" ac_cv_prog_ac_ct_OTOOL64="otool64"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2 break 2
@ -21805,23 +21771,20 @@ else
/* end confdefs.h. */ /* end confdefs.h. */
$ac_includes_default $ac_includes_default
int int
find_stack_direction () find_stack_direction (int *addr, int depth)
{
static char *addr = 0;
auto char dummy;
if (addr == 0)
{ {
int dir, dummy = 0;
if (! addr)
addr = &dummy; addr = &dummy;
return find_stack_direction (); *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
} dir = depth ? find_stack_direction (addr, depth - 1) : 0;
else return dir + dummy;
return (&dummy > addr) ? 1 : -1;
} }
int int
main () main (int argc, char **argv)
{ {
return find_stack_direction () < 0; return find_stack_direction (0, argc + !argv + 20) < 0;
} }
_ACEOF _ACEOF
if ac_fn_c_try_run "$LINENO"; then : if ac_fn_c_try_run "$LINENO"; then :
@ -22960,11 +22923,11 @@ else
int int
main () main ()
{ {
/* FIXME: Include the comments suggested by Paul. */
#ifndef __cplusplus #ifndef __cplusplus
/* Ultrix mips cc rejects this. */ /* Ultrix mips cc rejects this sort of thing. */
typedef int charset[2]; typedef int charset[2];
const charset cs; const charset cs = { 0, 0 };
/* SunOS 4.1.1 cc rejects this. */ /* SunOS 4.1.1 cc rejects this. */
char const *const *pcpcc; char const *const *pcpcc;
char **ppc; char **ppc;
@ -22981,8 +22944,9 @@ main ()
++pcpcc; ++pcpcc;
ppc = (char**) pcpcc; ppc = (char**) pcpcc;
pcpcc = (char const *const *) ppc; pcpcc = (char const *const *) ppc;
{ /* SCO 3.2v4 cc rejects this. */ { /* SCO 3.2v4 cc rejects this sort of thing. */
char *t; char tx;
char *t = &tx;
char const *s = 0 ? (char *) 0 : (char const *) 0; char const *s = 0 ? (char *) 0 : (char const *) 0;
*t++ = 0; *t++ = 0;
@ -22998,10 +22962,10 @@ main ()
iptr p = 0; iptr p = 0;
++p; ++p;
} }
{ /* AIX XL C 1.02.0.0 rejects this saying { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
"k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
struct s { int j; const int *ap[3]; }; struct s { int j; const int *ap[3]; } bx;
struct s *b; b->j = 5; struct s *b = &bx; b->j = 5;
} }
{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
const int foo = 10; const int foo = 10;
@ -27149,13 +27113,24 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */ /* end confdefs.h. */
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h> #include <stdio.h>
#endif
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
@ -27226,6 +27201,26 @@ int main(void) {
exit(1); exit(1);
} }
sa_len = sizeof sa; sa_len = sizeof sa;
/* 1 second select timeout */
tv.tv_sec = 1;
tv.tv_usec = 0;
/* Set up fd set */
FD_ZERO(&fds);
FD_SET(listen_s, &fds);
/* Wait for socket to become readable */
rc = select(listen_s + 1, &fds, NULL, NULL, &tv);
if (rc < 0) {
perror("select");
exit(1);
}
if (rc == 0) {
fprintf(stderr, "Socket failed to become readable (timeout)\n");
exit(1);
}
if (!FD_ISSET(listen_s, &fds)) {
fprintf(stderr, "Socket failed to become readable (selected another fd)\n");
exit(1);
}
connected_s = accept(listen_s, (struct sockaddr *)&sa, &sa_len); connected_s = accept(listen_s, (struct sockaddr *)&sa, &sa_len);
if (connected_s < 0) { if (connected_s < 0) {
perror("accept"); perror("accept");
@ -28875,16 +28870,16 @@ if (echo >conf$$.file) 2>/dev/null; then
# ... but there are two gotchas: # ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -p'. # In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p' as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln as_ln_s=ln
else else
as_ln_s='cp -p' as_ln_s='cp -pR'
fi fi
else else
as_ln_s='cp -p' as_ln_s='cp -pR'
fi fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null rmdir conf$$.dir 2>/dev/null
@ -28944,28 +28939,16 @@ else
as_mkdir_p=false as_mkdir_p=false
fi fi
if test -x / >/dev/null 2>&1; then
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
as_test_x='test -x' as_test_x='test -x'
else as_executable_p=as_fn_executable_p
if ls -dL / >/dev/null 2>&1; then
as_ls_L_option=L
else
as_ls_L_option=
fi
as_test_x='
eval sh -c '\''
if test -d "$1"; then
test -d "$1/.";
else
case $1 in #(
-*)set "./$1";;
esac;
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
???[sx]*):;;*)false;;esac;fi
'\'' sh
'
fi
as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name. # Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@ -28987,7 +28970,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by $as_me, which was This file was extended by $as_me, which was
generated by GNU Autoconf 2.68. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_HEADERS = $CONFIG_HEADERS
@ -29053,10 +29036,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
config.status config.status
configured by $0, generated by GNU Autoconf 2.68, configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"
Copyright (C) 2010 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it." gives unlimited permission to copy, distribute and modify it."
@ -29146,7 +29129,7 @@ fi
_ACEOF _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then if \$ac_cs_recheck; then
set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift shift
\$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL' CONFIG_SHELL='$SHELL'

View File

@ -4,7 +4,7 @@
</head> </head>
<body> <body>
<div align="right"> <div align="right">
Last modified at [$Date: 2004-11-25 09:51:51 +1100 (Thu, 25 Nov 2004) $] Last modified at [$Date: 2004-11-24 17:51:51 -0500 (Wed, 24 Nov 2004) $]
</div> </div>
<h1>Using APR Pools</h1> <h1>Using APR Pools</h1>

View File

@ -117,10 +117,10 @@ apr_status_t apr_file_trunc(apr_file_t *fp, apr_off_t offset)
/* Reset buffer positions for write mode */ /* Reset buffer positions for write mode */
fp->bufpos = fp->direction = fp->dataRead = 0; fp->bufpos = fp->direction = fp->dataRead = 0;
} }
file_unlock(fp);
if (rc) { if (rc) {
return rc; return rc;
} }
file_unlock(fp);
} }
if (ftruncate(fp->filedes, offset) == -1) { if (ftruncate(fp->filedes, offset) == -1) {
return errno; return errno;

View File

@ -36,6 +36,12 @@
* for Win32 or Netware by those build environments, respectively. * for Win32 or Netware by those build environments, respectively.
*/ */
/* Make sure we have our platform identifier macro defined we ask for later.
*/
#if defined(_WIN32) && !defined(WIN32)
#define WIN32 1
#endif
#if defined(WIN32) || defined(DOXYGEN) #if defined(WIN32) || defined(DOXYGEN)
/* Ignore most warnings (back down to /W3) for poorly constructed headers /* Ignore most warnings (back down to /W3) for poorly constructed headers
@ -377,7 +383,7 @@ typedef int apr_off_t;
typedef int apr_socklen_t; typedef int apr_socklen_t;
typedef apr_uint64_t apr_ino_t; typedef apr_uint64_t apr_ino_t;
#ifdef WIN64 #ifdef _WIN64
#define APR_SIZEOF_VOIDP 8 #define APR_SIZEOF_VOIDP 8
#else #else
#define APR_SIZEOF_VOIDP 4 #define APR_SIZEOF_VOIDP 4
@ -552,7 +558,7 @@ typedef apr_uint32_t apr_uintptr_t;
#define APR_DECLARE_DATA __declspec(dllimport) #define APR_DECLARE_DATA __declspec(dllimport)
#endif #endif
#ifdef WIN64 #ifdef _WIN64
#define APR_SSIZE_T_FMT "I64d" #define APR_SSIZE_T_FMT "I64d"
#define APR_SIZE_T_FMT "I64u" #define APR_SIZE_T_FMT "I64u"
#else #else

View File

@ -71,7 +71,8 @@ struct apr_memnode_t {
* @param allocator The allocator we have just created. * @param allocator The allocator we have just created.
* *
*/ */
APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator); APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator)
__attribute__((nonnull(1)));
/** /**
* Destroy an allocator * Destroy an allocator
@ -79,7 +80,8 @@ APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator);
* @remark Any memnodes not given back to the allocator prior to destroying * @remark Any memnodes not given back to the allocator prior to destroying
* will _not_ be free()d. * will _not_ be free()d.
*/ */
APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator); APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator)
__attribute__((nonnull(1)));
/** /**
* Allocate a block of mem from the allocator * Allocate a block of mem from the allocator
@ -88,7 +90,8 @@ APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator);
* memnode structure) * memnode structure)
*/ */
APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator, APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator,
apr_size_t size); apr_size_t size)
__attribute__((nonnull(1)));
/** /**
* Free a list of blocks of mem, giving them back to the allocator. * Free a list of blocks of mem, giving them back to the allocator.
@ -98,7 +101,8 @@ APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator,
* @param memnode The memory node to return * @param memnode The memory node to return
*/ */
APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator, APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator,
apr_memnode_t *memnode); apr_memnode_t *memnode)
__attribute__((nonnull(1,2)));
#include "apr_pools.h" #include "apr_pools.h"
@ -114,13 +118,15 @@ APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator,
* the allocator will never be destroyed. * the allocator will never be destroyed.
*/ */
APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator, APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator,
apr_pool_t *pool); apr_pool_t *pool)
__attribute__((nonnull(1)));
/** /**
* Get the current owner of the allocator * Get the current owner of the allocator
* @param allocator The allocator to get the owner from * @param allocator The allocator to get the owner from
*/ */
APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator); APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator)
__attribute__((nonnull(1)));
/** /**
* Set the current threshold at which the allocator should start * Set the current threshold at which the allocator should start
@ -129,7 +135,8 @@ APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator);
* @param size The threshold. 0 == unlimited. * @param size The threshold. 0 == unlimited.
*/ */
APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator, APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator,
apr_size_t size); apr_size_t size)
__attribute__((nonnull(1)));
#include "apr_thread_mutex.h" #include "apr_thread_mutex.h"
@ -140,14 +147,16 @@ APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator,
* @param mutex The mutex * @param mutex The mutex
*/ */
APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator, APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator,
apr_thread_mutex_t *mutex); apr_thread_mutex_t *mutex)
__attribute__((nonnull(1)));
/** /**
* Get the mutex currently set for the allocator * Get the mutex currently set for the allocator
* @param allocator The allocator * @param allocator The allocator
*/ */
APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get( APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get(
apr_allocator_t *allocator); apr_allocator_t *allocator)
__attribute__((nonnull(1)));
#endif /* APR_HAS_THREADS */ #endif /* APR_HAS_THREADS */

View File

@ -76,7 +76,7 @@ typedef int apr_signum_t;
* @return offset * @return offset
*/ */
#if defined(CRAY) || (defined(__arm) && !defined(LINUX)) #if defined(CRAY) || (defined(__arm) && !(defined(LINUX) || defined(__FreeBSD__)))
#ifdef __STDC__ #ifdef __STDC__
#define APR_OFFSET(p_type,field) _Offsetof(p_type,field) #define APR_OFFSET(p_type,field) _Offsetof(p_type,field)
#else #else

View File

@ -756,6 +756,8 @@ APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa);
* @param name The accept filter * @param name The accept filter
* @param args Any extra args to the accept filter. Passing NULL here removes * @param args Any extra args to the accept filter. Passing NULL here removes
* the accept filter. * the accept filter.
* @bug name and args should have been declared as const char *, as they are in
* APR 2.0
*/ */
apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *name, apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *name,
char *args); char *args);

View File

@ -196,7 +196,8 @@ APR_DECLARE(void) apr_pool_terminate(void);
APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool, APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool,
apr_pool_t *parent, apr_pool_t *parent,
apr_abortfunc_t abort_fn, apr_abortfunc_t abort_fn,
apr_allocator_t *allocator); apr_allocator_t *allocator)
__attribute__((nonnull(1)));
/** /**
* Create a new pool. * Create a new pool.
@ -220,7 +221,8 @@ APR_DECLARE(apr_status_t) apr_pool_create_core_ex(apr_pool_t **newpool,
*/ */
APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex(apr_pool_t **newpool, APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex(apr_pool_t **newpool,
apr_abortfunc_t abort_fn, apr_abortfunc_t abort_fn,
apr_allocator_t *allocator); apr_allocator_t *allocator)
__attribute__((nonnull(1)));
/** /**
* Debug version of apr_pool_create_ex. * Debug version of apr_pool_create_ex.
@ -242,7 +244,8 @@ APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool,
apr_pool_t *parent, apr_pool_t *parent,
apr_abortfunc_t abort_fn, apr_abortfunc_t abort_fn,
apr_allocator_t *allocator, apr_allocator_t *allocator,
const char *file_line); const char *file_line)
__attribute__((nonnull(1)));
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
#define apr_pool_create_ex(newpool, parent, abort_fn, allocator) \ #define apr_pool_create_ex(newpool, parent, abort_fn, allocator) \
@ -277,7 +280,8 @@ APR_DECLARE(apr_status_t) apr_pool_create_core_ex_debug(apr_pool_t **newpool,
APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex_debug(apr_pool_t **newpool, APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex_debug(apr_pool_t **newpool,
apr_abortfunc_t abort_fn, apr_abortfunc_t abort_fn,
apr_allocator_t *allocator, apr_allocator_t *allocator,
const char *file_line); const char *file_line)
__attribute__((nonnull(1)));
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
#define apr_pool_create_core_ex(newpool, abort_fn, allocator) \ #define apr_pool_create_core_ex(newpool, abort_fn, allocator) \
@ -343,7 +347,8 @@ APR_DECLARE(apr_status_t) apr_pool_create_unmanaged(apr_pool_t **newpool);
* Find the pool's allocator * Find the pool's allocator
* @param pool The pool to get the allocator from. * @param pool The pool to get the allocator from.
*/ */
APR_DECLARE(apr_allocator_t *) apr_pool_allocator_get(apr_pool_t *pool); APR_DECLARE(apr_allocator_t *) apr_pool_allocator_get(apr_pool_t *pool)
__attribute__((nonnull(1)));
/** /**
* Clear all memory in the pool and run all the cleanups. This also destroys all * Clear all memory in the pool and run all the cleanups. This also destroys all
@ -353,7 +358,7 @@ APR_DECLARE(apr_allocator_t *) apr_pool_allocator_get(apr_pool_t *pool);
* to re-use this memory for the next allocation. * to re-use this memory for the next allocation.
* @see apr_pool_destroy() * @see apr_pool_destroy()
*/ */
APR_DECLARE(void) apr_pool_clear(apr_pool_t *p); APR_DECLARE(void) apr_pool_clear(apr_pool_t *p) __attribute__((nonnull(1)));
/** /**
* Debug version of apr_pool_clear. * Debug version of apr_pool_clear.
@ -369,7 +374,8 @@ APR_DECLARE(void) apr_pool_clear(apr_pool_t *p);
* and don't call apr_pool_destroy_clear directly. * and don't call apr_pool_destroy_clear directly.
*/ */
APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *p, APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *p,
const char *file_line); const char *file_line)
__attribute__((nonnull(1)));
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
#define apr_pool_clear(p) \ #define apr_pool_clear(p) \
@ -382,7 +388,7 @@ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *p,
* @param p The pool to destroy * @param p The pool to destroy
* @remark This will actually free the memory * @remark This will actually free the memory
*/ */
APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p); APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p) __attribute__((nonnull(1)));
/** /**
* Debug version of apr_pool_destroy. * Debug version of apr_pool_destroy.
@ -398,7 +404,8 @@ APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p);
* and don't call apr_pool_destroy_debug directly. * and don't call apr_pool_destroy_debug directly.
*/ */
APR_DECLARE(void) apr_pool_destroy_debug(apr_pool_t *p, APR_DECLARE(void) apr_pool_destroy_debug(apr_pool_t *p,
const char *file_line); const char *file_line)
__attribute__((nonnull(1)));
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
#define apr_pool_destroy(p) \ #define apr_pool_destroy(p) \
@ -416,7 +423,11 @@ APR_DECLARE(void) apr_pool_destroy_debug(apr_pool_t *p,
* @param size The amount of memory to allocate * @param size The amount of memory to allocate
* @return The allocated memory * @return The allocated memory
*/ */
APR_DECLARE(void *) apr_palloc(apr_pool_t *p, apr_size_t size); APR_DECLARE(void *) apr_palloc(apr_pool_t *p, apr_size_t size)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
__attribute__((alloc_size(2)))
#endif
__attribute__((nonnull(1)));
/** /**
* Debug version of apr_palloc * Debug version of apr_palloc
@ -427,7 +438,11 @@ APR_DECLARE(void *) apr_palloc(apr_pool_t *p, apr_size_t size);
* @return See: apr_palloc * @return See: apr_palloc
*/ */
APR_DECLARE(void *) apr_palloc_debug(apr_pool_t *p, apr_size_t size, APR_DECLARE(void *) apr_palloc_debug(apr_pool_t *p, apr_size_t size,
const char *file_line); const char *file_line)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
__attribute__((alloc_size(2)))
#endif
__attribute__((nonnull(1)));
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
#define apr_palloc(p, size) \ #define apr_palloc(p, size) \
@ -455,7 +470,8 @@ APR_DECLARE(void *) apr_pcalloc(apr_pool_t *p, apr_size_t size);
* @return See: apr_pcalloc * @return See: apr_pcalloc
*/ */
APR_DECLARE(void *) apr_pcalloc_debug(apr_pool_t *p, apr_size_t size, APR_DECLARE(void *) apr_pcalloc_debug(apr_pool_t *p, apr_size_t size,
const char *file_line); const char *file_line)
__attribute__((nonnull(1)));
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
#define apr_pcalloc(p, size) \ #define apr_pcalloc(p, size) \
@ -476,21 +492,24 @@ APR_DECLARE(void *) apr_pcalloc_debug(apr_pool_t *p, apr_size_t size,
* deal with the error accordingly. * deal with the error accordingly.
*/ */
APR_DECLARE(void) apr_pool_abort_set(apr_abortfunc_t abortfunc, APR_DECLARE(void) apr_pool_abort_set(apr_abortfunc_t abortfunc,
apr_pool_t *pool); apr_pool_t *pool)
__attribute__((nonnull(2)));
/** /**
* Get the abort function associated with the specified pool. * Get the abort function associated with the specified pool.
* @param pool The pool for retrieving the abort function. * @param pool The pool for retrieving the abort function.
* @return The abort function for the given pool. * @return The abort function for the given pool.
*/ */
APR_DECLARE(apr_abortfunc_t) apr_pool_abort_get(apr_pool_t *pool); APR_DECLARE(apr_abortfunc_t) apr_pool_abort_get(apr_pool_t *pool)
__attribute__((nonnull(1)));
/** /**
* Get the parent pool of the specified pool. * Get the parent pool of the specified pool.
* @param pool The pool for retrieving the parent pool. * @param pool The pool for retrieving the parent pool.
* @return The parent of the given pool. * @return The parent of the given pool.
*/ */
APR_DECLARE(apr_pool_t *) apr_pool_parent_get(apr_pool_t *pool); APR_DECLARE(apr_pool_t *) apr_pool_parent_get(apr_pool_t *pool)
__attribute__((nonnull(1)));
/** /**
* Determine if pool a is an ancestor of pool b. * Determine if pool a is an ancestor of pool b.
@ -510,7 +529,8 @@ APR_DECLARE(int) apr_pool_is_ancestor(apr_pool_t *a, apr_pool_t *b);
* @param pool The pool to tag * @param pool The pool to tag
* @param tag The tag * @param tag The tag
*/ */
APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag); APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag)
__attribute__((nonnull(1)));
/* /*
@ -536,11 +556,11 @@ APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag);
* key names is a typical way to help ensure this uniqueness. * key names is a typical way to help ensure this uniqueness.
* *
*/ */
APR_DECLARE(apr_status_t) apr_pool_userdata_set( APR_DECLARE(apr_status_t) apr_pool_userdata_set(const void *data,
const void *data,
const char *key, const char *key,
apr_status_t (*cleanup)(void *), apr_status_t (*cleanup)(void *),
apr_pool_t *pool); apr_pool_t *pool)
__attribute__((nonnull(2,4)));
/** /**
* Set the data associated with the current pool * Set the data associated with the current pool
@ -562,10 +582,10 @@ APR_DECLARE(apr_status_t) apr_pool_userdata_set(
* *
*/ */
APR_DECLARE(apr_status_t) apr_pool_userdata_setn( APR_DECLARE(apr_status_t) apr_pool_userdata_setn(
const void *data, const void *data, const char *key,
const char *key,
apr_status_t (*cleanup)(void *), apr_status_t (*cleanup)(void *),
apr_pool_t *pool); apr_pool_t *pool)
__attribute__((nonnull(2,4)));
/** /**
* Return the data associated with the current pool. * Return the data associated with the current pool.
@ -574,7 +594,8 @@ APR_DECLARE(apr_status_t) apr_pool_userdata_setn(
* @param pool The current pool. * @param pool The current pool.
*/ */
APR_DECLARE(apr_status_t) apr_pool_userdata_get(void **data, const char *key, APR_DECLARE(apr_status_t) apr_pool_userdata_get(void **data, const char *key,
apr_pool_t *pool); apr_pool_t *pool)
__attribute__((nonnull(1,2,3)));
/** /**
@ -601,10 +622,10 @@ APR_DECLARE(apr_status_t) apr_pool_userdata_get(void **data, const char *key,
* to exec - this function is called in the child, obviously! * to exec - this function is called in the child, obviously!
*/ */
APR_DECLARE(void) apr_pool_cleanup_register( APR_DECLARE(void) apr_pool_cleanup_register(
apr_pool_t *p, apr_pool_t *p, const void *data,
const void *data,
apr_status_t (*plain_cleanup)(void *), apr_status_t (*plain_cleanup)(void *),
apr_status_t (*child_cleanup)(void *)); apr_status_t (*child_cleanup)(void *))
__attribute__((nonnull(3,4)));
/** /**
* Register a function to be called when a pool is cleared or destroyed. * Register a function to be called when a pool is cleared or destroyed.
@ -619,9 +640,9 @@ APR_DECLARE(void) apr_pool_cleanup_register(
* or destroyed * or destroyed
*/ */
APR_DECLARE(void) apr_pool_pre_cleanup_register( APR_DECLARE(void) apr_pool_pre_cleanup_register(
apr_pool_t *p, apr_pool_t *p, const void *data,
const void *data, apr_status_t (*plain_cleanup)(void *))
apr_status_t (*plain_cleanup)(void *)); __attribute__((nonnull(3)));
/** /**
* Remove a previously registered cleanup function. * Remove a previously registered cleanup function.
@ -636,7 +657,8 @@ APR_DECLARE(void) apr_pool_pre_cleanup_register(
* function * function
*/ */
APR_DECLARE(void) apr_pool_cleanup_kill(apr_pool_t *p, const void *data, APR_DECLARE(void) apr_pool_cleanup_kill(apr_pool_t *p, const void *data,
apr_status_t (*cleanup)(void *)); apr_status_t (*cleanup)(void *))
__attribute__((nonnull(3)));
/** /**
* Replace the child cleanup function of a previously registered cleanup. * Replace the child cleanup function of a previously registered cleanup.
@ -651,10 +673,10 @@ APR_DECLARE(void) apr_pool_cleanup_kill(apr_pool_t *p, const void *data,
* @param child_cleanup The function to register as the child cleanup * @param child_cleanup The function to register as the child cleanup
*/ */
APR_DECLARE(void) apr_pool_child_cleanup_set( APR_DECLARE(void) apr_pool_child_cleanup_set(
apr_pool_t *p, apr_pool_t *p, const void *data,
const void *data,
apr_status_t (*plain_cleanup)(void *), apr_status_t (*plain_cleanup)(void *),
apr_status_t (*child_cleanup)(void *)); apr_status_t (*child_cleanup)(void *))
__attribute__((nonnull(3,4)));
/** /**
* Run the specified cleanup function immediately and unregister it. * Run the specified cleanup function immediately and unregister it.
@ -667,10 +689,9 @@ APR_DECLARE(void) apr_pool_child_cleanup_set(
* @param data The data to remove from cleanup * @param data The data to remove from cleanup
* @param cleanup The function to remove from cleanup * @param cleanup The function to remove from cleanup
*/ */
APR_DECLARE(apr_status_t) apr_pool_cleanup_run( APR_DECLARE(apr_status_t) apr_pool_cleanup_run(apr_pool_t *p, void *data,
apr_pool_t *p, apr_status_t (*cleanup)(void *))
void *data, __attribute__((nonnull(3)));
apr_status_t (*cleanup)(void *));
/** /**
* An empty cleanup function. * An empty cleanup function.
@ -739,7 +760,8 @@ APR_DECLARE(void) apr_pool_cleanup_for_exec(void);
* @param p The parent pool * @param p The parent pool
* @param sub The subpool * @param sub The subpool
*/ */
APR_DECLARE(void) apr_pool_join(apr_pool_t *p, apr_pool_t *sub); APR_DECLARE(void) apr_pool_join(apr_pool_t *p, apr_pool_t *sub)
__attribute__((nonnull(2)));
/** /**
* Find a pool from something allocated in it. * Find a pool from something allocated in it.
@ -754,7 +776,8 @@ APR_DECLARE(apr_pool_t *) apr_pool_find(const void *mem);
* @param recurse Recurse/include the subpools' sizes * @param recurse Recurse/include the subpools' sizes
* @return The number of bytes * @return The number of bytes
*/ */
APR_DECLARE(apr_size_t) apr_pool_num_bytes(apr_pool_t *p, int recurse); APR_DECLARE(apr_size_t) apr_pool_num_bytes(apr_pool_t *p, int recurse)
__attribute__((nonnull(1)));
/** /**
* Lock a pool * Lock a pool

View File

@ -106,7 +106,11 @@ APR_DECLARE(char *) apr_pstrdup(apr_pool_t *p, const char *s);
* has 'n' or more characters. If the string might contain * has 'n' or more characters. If the string might contain
* fewer characters, use apr_pstrndup. * fewer characters, use apr_pstrndup.
*/ */
APR_DECLARE(char *) apr_pstrmemdup(apr_pool_t *p, const char *s, apr_size_t n); APR_DECLARE(char *) apr_pstrmemdup(apr_pool_t *p, const char *s, apr_size_t n)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
__attribute__((alloc_size(3)))
#endif
;
/** /**
* Duplicate at most n characters of a string into memory allocated * Duplicate at most n characters of a string into memory allocated
@ -128,7 +132,11 @@ APR_DECLARE(char *) apr_pstrndup(apr_pool_t *p, const char *s, apr_size_t n);
* @param n The number of bytes to duplicate * @param n The number of bytes to duplicate
* @return The new block of memory * @return The new block of memory
*/ */
APR_DECLARE(void *) apr_pmemdup(apr_pool_t *p, const void *m, apr_size_t n); APR_DECLARE(void *) apr_pmemdup(apr_pool_t *p, const void *m, apr_size_t n)
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
__attribute__((alloc_size(3)))
#endif
;
/** /**
* Concatenate multiple strings, allocating memory out a pool * Concatenate multiple strings, allocating memory out a pool

View File

@ -315,7 +315,7 @@ APR_DECLARE(apr_status_t) apr_thread_once(apr_thread_once_t *control,
APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd); APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd);
/** /**
* Return the pool associated with the current thread. * Return user data associated with the current thread.
* @param data The user data associated with the thread. * @param data The user data associated with the thread.
* @param key The key to associate with the data * @param key The key to associate with the data
* @param thread The currently open thread. * @param thread The currently open thread.
@ -324,7 +324,7 @@ APR_DECLARE(apr_status_t) apr_thread_data_get(void **data, const char *key,
apr_thread_t *thread); apr_thread_t *thread);
/** /**
* Return the pool associated with the current thread. * Set user data associated with the current thread.
* @param data The user data to associate with the thread. * @param data The user data to associate with the thread.
* @param key The key to use for associating the data with the thread * @param key The key to use for associating the data with the thread
* @param cleanup The cleanup routine to use when the thread is destroyed. * @param cleanup The cleanup routine to use when the thread is destroyed.

View File

@ -38,6 +38,9 @@
*/ */
#define APR_COPYRIGHT "Copyright (c) 2013 The Apache Software " \
"Foundation or its licensors, as applicable."
/* The numeric compile-time version constants. These constants are the /* The numeric compile-time version constants. These constants are the
* authoritative version numbers for APR. * authoritative version numbers for APR.
*/ */
@ -59,7 +62,7 @@
* The Patch Level never includes API changes, simply bug fixes. * The Patch Level never includes API changes, simply bug fixes.
* Reset to 0 when upgrading APR_MINOR_VERSION * Reset to 0 when upgrading APR_MINOR_VERSION
*/ */
#define APR_PATCH_VERSION 6 #define APR_PATCH_VERSION 8
/** /**
* The symbol APR_IS_DEV_VERSION is only defined for internal, * The symbol APR_IS_DEV_VERSION is only defined for internal,
@ -87,7 +90,9 @@
#if defined(APR_IS_DEV_VERSION) || defined(DOXYGEN) #if defined(APR_IS_DEV_VERSION) || defined(DOXYGEN)
/** Internal: string form of the "is dev" flag */ /** Internal: string form of the "is dev" flag */
#ifndef APR_IS_DEV_STRING
#define APR_IS_DEV_STRING "-dev" #define APR_IS_DEV_STRING "-dev"
#endif
#else #else
#define APR_IS_DEV_STRING "" #define APR_IS_DEV_STRING ""
#endif #endif

View File

@ -1,8 +1,5 @@
#include "apr_version.h" #include "apr_version.h"
#define APR_COPYRIGHT "Copyright (c) 2011 The Apache Software " \
"Foundation or its licensors, as applicable."
#define APR_LICENSE \ #define APR_LICENSE \
"Licensed to the Apache Software Foundation (ASF) under one or more " \ "Licensed to the Apache Software Foundation (ASF) under one or more " \
"contributor license agreements. See the NOTICE file distributed with " \ "contributor license agreements. See the NOTICE file distributed with " \

View File

@ -193,36 +193,39 @@ static apr_status_t do_mcast(int type, apr_socket_t *sock,
return rv; return rv;
} }
/* Set the IP_MULTICAST_TTL or IP_MULTICAST_LOOP option, or IPv6
* equivalents, for the socket, to the given value. Note that this
* function *only works* for those particular option types. */
static apr_status_t do_mcast_opt(int type, apr_socket_t *sock, static apr_status_t do_mcast_opt(int type, apr_socket_t *sock,
apr_byte_t value) apr_byte_t value)
{ {
apr_status_t rv = APR_SUCCESS; apr_status_t rv = APR_SUCCESS;
if (sock_is_ipv4(sock)) { if (sock_is_ipv4(sock)) {
/* For the IP_MULTICAST_* options, this must be a (char *)
* pointer. */
if (setsockopt(sock->socketdes, IPPROTO_IP, type, if (setsockopt(sock->socketdes, IPPROTO_IP, type,
(const void *) &value, sizeof(value)) == -1) { (const void *) &value, sizeof(value)) == -1) {
rv = errno; rv = errno;
} }
} }
#if APR_HAVE_IPV6 #if APR_HAVE_IPV6
else if (sock_is_ipv6(sock) && type == IP_MULTICAST_LOOP) {
unsigned int loopopt = value;
type = IPV6_MULTICAST_LOOP;
if (setsockopt(sock->socketdes, IPPROTO_IPV6, type,
(const void *) &loopopt, sizeof(loopopt)) == -1) {
rv = errno;
}
}
else if (sock_is_ipv6(sock)) { else if (sock_is_ipv6(sock)) {
/* For the IPV6_* options, an (int *) pointer must be used. */
int ivalue = value;
if (type == IP_MULTICAST_TTL) { if (type == IP_MULTICAST_TTL) {
type = IPV6_MULTICAST_HOPS; type = IPV6_MULTICAST_HOPS;
} }
else if (type == IP_MULTICAST_LOOP) {
type = IPV6_MULTICAST_LOOP;
}
else { else {
return APR_ENOTIMPL; return APR_ENOTIMPL;
} }
if (setsockopt(sock->socketdes, IPPROTO_IPV6, type, if (setsockopt(sock->socketdes, IPPROTO_IPV6, type,
&value, sizeof(value)) == -1) { (const void *) &ivalue, sizeof(ivalue)) == -1) {
rv = errno; rv = errno;
} }
} }

View File

@ -174,7 +174,14 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock,
return errno; return errno;
} }
apr_sockaddr_vars_set(from, from->sa.sin.sin_family, ntohs(from->sa.sin.sin_port)); /*
* Check if we have a valid address. recvfrom() with MSG_PEEK may return
* success without filling in the address.
*/
if (from->salen > APR_OFFSETOF(struct sockaddr_in, sin_port)) {
apr_sockaddr_vars_set(from, from->sa.sin.sin_family,
ntohs(from->sa.sin.sin_port));
}
(*len) = rv; (*len) = rv;
if (rv == 0 && sock->type == SOCK_STREAM) { if (rv == 0 && sock->type == SOCK_STREAM) {
@ -245,7 +252,7 @@ do_select:
/* Define a structure to pass in when we have a NULL header value */ /* Define a structure to pass in when we have a NULL header value */
static apr_hdtr_t no_hdtr; static apr_hdtr_t no_hdtr;
#if defined(__linux__) && defined(HAVE_WRITEV) #if (defined(__linux__) || defined(__GNU__)) && defined(HAVE_WRITEV)
apr_status_t apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, apr_status_t apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file,
apr_hdtr_t *hdtr, apr_off_t *offset, apr_hdtr_t *hdtr, apr_off_t *offset,
@ -285,9 +292,6 @@ apr_status_t apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file,
hdtr = &no_hdtr; hdtr = &no_hdtr;
} }
/* Ignore flags for now. */
flags = 0;
if (hdtr->numheaders > 0) { if (hdtr->numheaders > 0) {
apr_size_t hdrbytes; apr_size_t hdrbytes;

View File

@ -356,9 +356,27 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
} }
error = getaddrinfo(hostname, servname, &hints, &ai_list); error = getaddrinfo(hostname, servname, &hints, &ai_list);
#ifdef HAVE_GAI_ADDRCONFIG #ifdef HAVE_GAI_ADDRCONFIG
if (error == EAI_BADFLAGS && family == APR_UNSPEC) { /*
/* Retry with no flags if AI_ADDRCONFIG was rejected. */ * Using AI_ADDRCONFIG involves some unfortunate guesswork because it
hints.ai_flags = 0; * does not consider loopback addresses when trying to determine if
* IPv4 or IPv6 is configured on a system (see RFC 3493).
* This is a problem if one actually wants to listen on or connect to
* the loopback address of a protocol family that is not otherwise
* configured on the system. See PR 52709.
* To work around some of the problems, retry without AI_ADDRCONFIG
* in case of EAI_ADDRFAMILY.
* XXX: apr_sockaddr_info_get() should really accept a flag to determine
* XXX: if AI_ADDRCONFIG's guesswork is wanted and if the address is
* XXX: to be used for listen() or connect().
*
* In case of EAI_BADFLAGS, AI_ADDRCONFIG is not supported.
*/
if ((family == APR_UNSPEC) && (error == EAI_BADFLAGS
#ifdef EAI_ADDRFAMILY
|| error == EAI_ADDRFAMILY
#endif
)) {
hints.ai_flags &= ~AI_ADDRCONFIG;
error = getaddrinfo(hostname, servname, &hints, &ai_list); error = getaddrinfo(hostname, servname, &hints, &ai_list);
} }
#endif #endif
@ -367,7 +385,7 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
return apr_get_netos_error(); return apr_get_netos_error();
#else #else
if (error == EAI_SYSTEM) { if (error == EAI_SYSTEM) {
return errno; return errno ? errno : APR_EGENERAL;
} }
else else
{ {
@ -422,6 +440,15 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
ai = ai->ai_next; ai = ai->ai_next;
} }
freeaddrinfo(ai_list); freeaddrinfo(ai_list);
if (prev_sa == NULL) {
/*
* getaddrinfo returned only useless entries and *sa is still empty.
* This should be treated as an error.
*/
return APR_EGENERAL;
}
return APR_SUCCESS; return APR_SUCCESS;
} }
@ -555,6 +582,11 @@ static apr_status_t find_addresses(apr_sockaddr_t **sa,
++curaddr; ++curaddr;
} }
if (prev_sa == NULL) {
/* this should not happen but no result should be treated as error */
return APR_EGENERAL;
}
return APR_SUCCESS; return APR_SUCCESS;
} }
@ -1010,7 +1042,7 @@ APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa)
/* XXX This line will segv on Win32 build with APR_HAVE_IPV6, /* XXX This line will segv on Win32 build with APR_HAVE_IPV6,
* but without the IPV6 drivers installed. * but without the IPV6 drivers installed.
*/ */
if (sa->sa.sin.sin_family == AF_INET) { if (sa->family == AF_INET) {
if (ipsub->family == AF_INET && if (ipsub->family == AF_INET &&
((sa->sa.sin.sin_addr.s_addr & ipsub->mask[0]) == ipsub->sub[0])) { ((sa->sa.sin.sin_addr.s_addr & ipsub->mask[0]) == ipsub->sub[0])) {
return 1; return 1;
@ -1022,7 +1054,7 @@ APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa)
return 1; return 1;
} }
} }
else { else if (sa->family == AF_INET6 && ipsub->family == AF_INET6) {
apr_uint32_t *addr = (apr_uint32_t *)sa->ipaddr_ptr; apr_uint32_t *addr = (apr_uint32_t *)sa->ipaddr_ptr;
if ((addr[0] & ipsub->mask[0]) == ipsub->sub[0] && if ((addr[0] & ipsub->mask[0]) == ipsub->sub[0] &&

View File

@ -381,12 +381,33 @@ apr_status_t apr_gethostname(char *buf, apr_int32_t len, apr_pool_t *cont)
} }
#if APR_HAS_SO_ACCEPTFILTER #if APR_HAS_SO_ACCEPTFILTER
apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *name, apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *nonconst_name,
char *args) char *nonconst_args)
{ {
/* these should have been const; act like they are */
const char *name = nonconst_name;
const char *args = nonconst_args;
struct accept_filter_arg af; struct accept_filter_arg af;
strncpy(af.af_name, name, 16); socklen_t optlen = sizeof(af);
strncpy(af.af_arg, args, 256 - 16);
/* FreeBSD returns an error if the filter is already set; ignore
* this call if we previously set it to the same value.
*/
if ((getsockopt(sock->socketdes, SOL_SOCKET, SO_ACCEPTFILTER,
&af, &optlen)) == 0) {
if (!strcmp(name, af.af_name) && !strcmp(args, af.af_arg)) {
return APR_SUCCESS;
}
}
/* Uhh, at least in FreeBSD 9 the fields are declared as arrays of
* these lengths; did sizeof not work in some ancient release?
*
* FreeBSD kernel sets the last byte to a '\0'.
*/
apr_cpystrn(af.af_name, name, 16);
apr_cpystrn(af.af_arg, args, 256 - 16);
if ((setsockopt(sock->socketdes, SOL_SOCKET, SO_ACCEPTFILTER, if ((setsockopt(sock->socketdes, SOL_SOCKET, SO_ACCEPTFILTER,
&af, sizeof(af))) < 0) { &af, sizeof(af))) < 0) {

View File

@ -52,8 +52,6 @@ typedef apr_uint64_t sha2_word64; /* Exactly 8 bytes */
/*** SHA-256/384/512 Various Length Definitions ***********************/ /*** SHA-256/384/512 Various Length Definitions ***********************/
/* NOTE: Most of these are in sha2.h */ /* NOTE: Most of these are in sha2.h */
#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8) #define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8)
#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16)
#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16)
/*** ENDIAN REVERSAL MACROS *******************************************/ /*** ENDIAN REVERSAL MACROS *******************************************/
@ -150,9 +148,7 @@ typedef apr_uint64_t sha2_word64; /* Exactly 8 bytes */
* library -- they are intended for private internal visibility/use * library -- they are intended for private internal visibility/use
* only. * only.
*/ */
void apr__SHA512_Last(SHA512_CTX*);
void apr__SHA256_Transform(SHA256_CTX*, const sha2_word32*); void apr__SHA256_Transform(SHA256_CTX*, const sha2_word32*);
void apr__SHA512_Transform(SHA512_CTX*, const sha2_word64*);
/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ /*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
@ -188,74 +184,6 @@ static const sha2_word32 sha256_initial_hash_value[8] = {
0x5be0cd19UL 0x5be0cd19UL
}; };
/* Hash constant words K for SHA-384 and SHA-512: */
static const sha2_word64 K512[80] = {
APR_UINT64_C(0x428a2f98d728ae22), APR_UINT64_C(0x7137449123ef65cd),
APR_UINT64_C(0xb5c0fbcfec4d3b2f), APR_UINT64_C(0xe9b5dba58189dbbc),
APR_UINT64_C(0x3956c25bf348b538), APR_UINT64_C(0x59f111f1b605d019),
APR_UINT64_C(0x923f82a4af194f9b), APR_UINT64_C(0xab1c5ed5da6d8118),
APR_UINT64_C(0xd807aa98a3030242), APR_UINT64_C(0x12835b0145706fbe),
APR_UINT64_C(0x243185be4ee4b28c), APR_UINT64_C(0x550c7dc3d5ffb4e2),
APR_UINT64_C(0x72be5d74f27b896f), APR_UINT64_C(0x80deb1fe3b1696b1),
APR_UINT64_C(0x9bdc06a725c71235), APR_UINT64_C(0xc19bf174cf692694),
APR_UINT64_C(0xe49b69c19ef14ad2), APR_UINT64_C(0xefbe4786384f25e3),
APR_UINT64_C(0x0fc19dc68b8cd5b5), APR_UINT64_C(0x240ca1cc77ac9c65),
APR_UINT64_C(0x2de92c6f592b0275), APR_UINT64_C(0x4a7484aa6ea6e483),
APR_UINT64_C(0x5cb0a9dcbd41fbd4), APR_UINT64_C(0x76f988da831153b5),
APR_UINT64_C(0x983e5152ee66dfab), APR_UINT64_C(0xa831c66d2db43210),
APR_UINT64_C(0xb00327c898fb213f), APR_UINT64_C(0xbf597fc7beef0ee4),
APR_UINT64_C(0xc6e00bf33da88fc2), APR_UINT64_C(0xd5a79147930aa725),
APR_UINT64_C(0x06ca6351e003826f), APR_UINT64_C(0x142929670a0e6e70),
APR_UINT64_C(0x27b70a8546d22ffc), APR_UINT64_C(0x2e1b21385c26c926),
APR_UINT64_C(0x4d2c6dfc5ac42aed), APR_UINT64_C(0x53380d139d95b3df),
APR_UINT64_C(0x650a73548baf63de), APR_UINT64_C(0x766a0abb3c77b2a8),
APR_UINT64_C(0x81c2c92e47edaee6), APR_UINT64_C(0x92722c851482353b),
APR_UINT64_C(0xa2bfe8a14cf10364), APR_UINT64_C(0xa81a664bbc423001),
APR_UINT64_C(0xc24b8b70d0f89791), APR_UINT64_C(0xc76c51a30654be30),
APR_UINT64_C(0xd192e819d6ef5218), APR_UINT64_C(0xd69906245565a910),
APR_UINT64_C(0xf40e35855771202a), APR_UINT64_C(0x106aa07032bbd1b8),
APR_UINT64_C(0x19a4c116b8d2d0c8), APR_UINT64_C(0x1e376c085141ab53),
APR_UINT64_C(0x2748774cdf8eeb99), APR_UINT64_C(0x34b0bcb5e19b48a8),
APR_UINT64_C(0x391c0cb3c5c95a63), APR_UINT64_C(0x4ed8aa4ae3418acb),
APR_UINT64_C(0x5b9cca4f7763e373), APR_UINT64_C(0x682e6ff3d6b2b8a3),
APR_UINT64_C(0x748f82ee5defb2fc), APR_UINT64_C(0x78a5636f43172f60),
APR_UINT64_C(0x84c87814a1f0ab72), APR_UINT64_C(0x8cc702081a6439ec),
APR_UINT64_C(0x90befffa23631e28), APR_UINT64_C(0xa4506cebde82bde9),
APR_UINT64_C(0xbef9a3f7b2c67915), APR_UINT64_C(0xc67178f2e372532b),
APR_UINT64_C(0xca273eceea26619c), APR_UINT64_C(0xd186b8c721c0c207),
APR_UINT64_C(0xeada7dd6cde0eb1e), APR_UINT64_C(0xf57d4f7fee6ed178),
APR_UINT64_C(0x06f067aa72176fba), APR_UINT64_C(0x0a637dc5a2c898a6),
APR_UINT64_C(0x113f9804bef90dae), APR_UINT64_C(0x1b710b35131c471b),
APR_UINT64_C(0x28db77f523047d84), APR_UINT64_C(0x32caab7b40c72493),
APR_UINT64_C(0x3c9ebe0a15c9bebc), APR_UINT64_C(0x431d67c49c100d4c),
APR_UINT64_C(0x4cc5d4becb3e42b6), APR_UINT64_C(0x597f299cfc657e2a),
APR_UINT64_C(0x5fcb6fab3ad6faec), APR_UINT64_C(0x6c44198c4a475817)
};
/* Initial hash value H for SHA-384 */
static const sha2_word64 sha384_initial_hash_value[8] = {
APR_UINT64_C(0xcbbb9d5dc1059ed8),
APR_UINT64_C(0x629a292a367cd507),
APR_UINT64_C(0x9159015a3070dd17),
APR_UINT64_C(0x152fecd8f70e5939),
APR_UINT64_C(0x67332667ffc00b31),
APR_UINT64_C(0x8eb44a8768581511),
APR_UINT64_C(0xdb0c2e0d64f98fa7),
APR_UINT64_C(0x47b5481dbefa4fa4)
};
/* Initial hash value H for SHA-512 */
static const sha2_word64 sha512_initial_hash_value[8] = {
APR_UINT64_C(0x6a09e667f3bcc908),
APR_UINT64_C(0xbb67ae8584caa73b),
APR_UINT64_C(0x3c6ef372fe94f82b),
APR_UINT64_C(0xa54ff53a5f1d36f1),
APR_UINT64_C(0x510e527fade682d1),
APR_UINT64_C(0x9b05688c2b3e6c1f),
APR_UINT64_C(0x1f83d9abfb41bd6b),
APR_UINT64_C(0x5be0cd19137e2179)
};
/* /*
* Constant used by SHA256/384/512_End() functions for converting the * Constant used by SHA256/384/512_End() functions for converting the
* digest to a readable hexadecimal character string: * digest to a readable hexadecimal character string:
@ -537,7 +465,14 @@ void apr__SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
*context->buffer = 0x80; *context->buffer = 0x80;
} }
/* Set the bit count: */ /* Set the bit count: */
*(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount; {
union dummy {
apr_uint64_t bitcount;
apr_byte_t bytes[8];
} bitcount;
bitcount.bitcount = context->bitcount;
MEMCPY_BCOPY(&context->buffer[SHA256_SHORT_BLOCK_LENGTH], bitcount.bytes, 8);
}
/* Final transform: */ /* Final transform: */
apr__SHA256_Transform(context, (sha2_word32*)context->buffer); apr__SHA256_Transform(context, (sha2_word32*)context->buffer);
@ -591,410 +526,3 @@ char* apr__SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIG
apr__SHA256_Update(&context, data, len); apr__SHA256_Update(&context, data, len);
return apr__SHA256_End(&context, digest); return apr__SHA256_End(&context, digest);
} }
/*** SHA-512: *********************************************************/
void apr__SHA512_Init(SHA512_CTX* context) {
if (context == (SHA512_CTX*)0) {
return;
}
MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH);
MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH);
context->bitcount[0] = context->bitcount[1] = 0;
}
#ifdef SHA2_UNROLL_TRANSFORM
/* Unrolled SHA-512 round macros: */
#if !APR_IS_BIGENDIAN
#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
REVERSE64(*data++, W512[j]); \
T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
K512[j] + W512[j]; \
(d) += T1, \
(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
j++
#else /* APR_IS_BIGENDIAN */
#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
K512[j] + (W512[j] = *data++); \
(d) += T1; \
(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
j++
#endif /* APR_IS_BIGENDIAN */
#define ROUND512(a,b,c,d,e,f,g,h) \
s0 = W512[(j+1)&0x0f]; \
s0 = sigma0_512(s0); \
s1 = W512[(j+14)&0x0f]; \
s1 = sigma1_512(s1); \
T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
(W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
(d) += T1; \
(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
j++
void apr__SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
sha2_word64 T1, *W512 = (sha2_word64*)context->buffer;
int j;
/* Initialize registers with the prev. intermediate value */
a = context->state[0];
b = context->state[1];
c = context->state[2];
d = context->state[3];
e = context->state[4];
f = context->state[5];
g = context->state[6];
h = context->state[7];
j = 0;
do {
ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
} while (j < 16);
/* Now for the remaining rounds up to 79: */
do {
ROUND512(a,b,c,d,e,f,g,h);
ROUND512(h,a,b,c,d,e,f,g);
ROUND512(g,h,a,b,c,d,e,f);
ROUND512(f,g,h,a,b,c,d,e);
ROUND512(e,f,g,h,a,b,c,d);
ROUND512(d,e,f,g,h,a,b,c);
ROUND512(c,d,e,f,g,h,a,b);
ROUND512(b,c,d,e,f,g,h,a);
} while (j < 80);
/* Compute the current intermediate hash value */
context->state[0] += a;
context->state[1] += b;
context->state[2] += c;
context->state[3] += d;
context->state[4] += e;
context->state[5] += f;
context->state[6] += g;
context->state[7] += h;
/* Clean up */
a = b = c = d = e = f = g = h = T1 = 0;
}
#else /* SHA2_UNROLL_TRANSFORM */
void apr__SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer;
int j;
/* Initialize registers with the prev. intermediate value */
a = context->state[0];
b = context->state[1];
c = context->state[2];
d = context->state[3];
e = context->state[4];
f = context->state[5];
g = context->state[6];
h = context->state[7];
j = 0;
do {
#if !APR_IS_BIGENDIAN
/* Convert TO host byte order */
REVERSE64(*data++, W512[j]);
/* Apply the SHA-512 compression function to update a..h */
T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
#else /* APR_IS_BIGENDIAN */
/* Apply the SHA-512 compression function to update a..h with copy */
T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);
#endif /* APR_IS_BIGENDIAN */
T2 = Sigma0_512(a) + Maj(a, b, c);
h = g;
g = f;
f = e;
e = d + T1;
d = c;
c = b;
b = a;
a = T1 + T2;
j++;
} while (j < 16);
do {
/* Part of the message block expansion: */
s0 = W512[(j+1)&0x0f];
s0 = sigma0_512(s0);
s1 = W512[(j+14)&0x0f];
s1 = sigma1_512(s1);
/* Apply the SHA-512 compression function to update a..h */
T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
(W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
T2 = Sigma0_512(a) + Maj(a, b, c);
h = g;
g = f;
f = e;
e = d + T1;
d = c;
c = b;
b = a;
a = T1 + T2;
j++;
} while (j < 80);
/* Compute the current intermediate hash value */
context->state[0] += a;
context->state[1] += b;
context->state[2] += c;
context->state[3] += d;
context->state[4] += e;
context->state[5] += f;
context->state[6] += g;
context->state[7] += h;
/* Clean up */
a = b = c = d = e = f = g = h = T1 = T2 = 0;
}
#endif /* SHA2_UNROLL_TRANSFORM */
void apr__SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {
unsigned int freespace, usedspace;
if (len == 0) {
/* Calling with no data is valid - we do nothing */
return;
}
/* Sanity check: */
assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0);
usedspace = (unsigned int)((context->bitcount[0] >> 3)
% SHA512_BLOCK_LENGTH);
if (usedspace > 0) {
/* Calculate how much free space is available in the buffer */
freespace = SHA512_BLOCK_LENGTH - usedspace;
if (len >= freespace) {
/* Fill the buffer completely and process it */
MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
ADDINC128(context->bitcount, freespace << 3);
len -= freespace;
data += freespace;
apr__SHA512_Transform(context, (sha2_word64*)context->buffer);
} else {
/* The buffer is not yet full */
MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
ADDINC128(context->bitcount, len << 3);
/* Clean up: */
usedspace = freespace = 0;
return;
}
}
while (len >= SHA512_BLOCK_LENGTH) {
/* Process as many complete blocks as we can */
apr__SHA512_Transform(context, (sha2_word64*)data);
ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
len -= SHA512_BLOCK_LENGTH;
data += SHA512_BLOCK_LENGTH;
}
if (len > 0) {
/* There's left-overs, so save 'em */
MEMCPY_BCOPY(context->buffer, data, len);
ADDINC128(context->bitcount, len << 3);
}
/* Clean up: */
usedspace = freespace = 0;
}
void apr__SHA512_Last(SHA512_CTX* context) {
unsigned int usedspace;
usedspace = (unsigned int)((context->bitcount[0] >> 3)
% SHA512_BLOCK_LENGTH);
#if !APR_IS_BIGENDIAN
/* Convert FROM host byte order */
REVERSE64(context->bitcount[0],context->bitcount[0]);
REVERSE64(context->bitcount[1],context->bitcount[1]);
#endif
if (usedspace > 0) {
/* Begin padding with a 1 bit: */
context->buffer[usedspace++] = 0x80;
if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) {
/* Set-up for the last transform: */
MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace);
} else {
if (usedspace < SHA512_BLOCK_LENGTH) {
MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace);
}
/* Do second-to-last transform: */
apr__SHA512_Transform(context, (sha2_word64*)context->buffer);
/* And set-up for the last transform: */
MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2);
}
} else {
/* Prepare for final transform: */
MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH);
/* Begin padding with a 1 bit: */
*context->buffer = 0x80;
}
/* Store the length of input data (in bits): */
*(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1];
*(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0];
/* Final transform: */
apr__SHA512_Transform(context, (sha2_word64*)context->buffer);
}
void apr__SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
sha2_word64 *d = (sha2_word64*)digest;
/* Sanity check: */
assert(context != (SHA512_CTX*)0);
/* If no digest buffer is passed, we don't bother doing this: */
if (digest != (sha2_byte*)0) {
apr__SHA512_Last(context);
/* Save the hash data for output: */
#if !APR_IS_BIGENDIAN
{
/* Convert TO host byte order */
int j;
for (j = 0; j < 8; j++) {
REVERSE64(context->state[j],context->state[j]);
*d++ = context->state[j];
}
}
#else /* APR_IS_BIGENDIAN */
MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH);
#endif /* APR_IS_BIGENDIAN */
}
/* Zero out state data */
MEMSET_BZERO(context, sizeof(*context));
}
char *apr__SHA512_End(SHA512_CTX* context, char buffer[]) {
sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest;
int i;
/* Sanity check: */
assert(context != (SHA512_CTX*)0);
if (buffer != (char*)0) {
apr__SHA512_Final(digest, context);
for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
*buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
*buffer++ = sha2_hex_digits[*d & 0x0f];
d++;
}
*buffer = (char)0;
} else {
MEMSET_BZERO(context, sizeof(*context));
}
MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH);
return buffer;
}
char* apr__SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) {
SHA512_CTX context;
apr__SHA512_Init(&context);
apr__SHA512_Update(&context, data, len);
return apr__SHA512_End(&context, digest);
}
/*** SHA-384: *********************************************************/
void apr__SHA384_Init(SHA384_CTX* context) {
if (context == (SHA384_CTX*)0) {
return;
}
MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH);
MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH);
context->bitcount[0] = context->bitcount[1] = 0;
}
void apr__SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {
apr__SHA512_Update((SHA512_CTX*)context, data, len);
}
void apr__SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
sha2_word64 *d = (sha2_word64*)digest;
/* Sanity check: */
assert(context != (SHA384_CTX*)0);
/* If no digest buffer is passed, we don't bother doing this: */
if (digest != (sha2_byte*)0) {
apr__SHA512_Last((SHA512_CTX*)context);
/* Save the hash data for output: */
#if !APR_IS_BIGENDIAN
{
/* Convert TO host byte order */
int j;
for (j = 0; j < 6; j++) {
REVERSE64(context->state[j],context->state[j]);
*d++ = context->state[j];
}
}
#else /* APR_IS_BIGENDIAN */
MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH);
#endif /* APR_IS_BIGENDIAN */
}
/* Zero out state data */
MEMSET_BZERO(context, sizeof(*context));
}
char *apr__SHA384_End(SHA384_CTX* context, char buffer[]) {
sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest;
int i;
/* Sanity check: */
assert(context != (SHA384_CTX*)0);
if (buffer != (char*)0) {
apr__SHA384_Final(digest, context);
for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
*buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
*buffer++ = sha2_hex_digits[*d & 0x0f];
d++;
}
*buffer = (char)0;
} else {
MEMSET_BZERO(context, sizeof(*context));
}
MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH);
return buffer;
}
char* apr__SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) {
SHA384_CTX context;
apr__SHA384_Init(&context);
apr__SHA384_Update(&context, data, len);
return apr__SHA384_End(&context, digest);
}

View File

@ -29,16 +29,10 @@ extern "C" {
#include "apr.h" #include "apr.h"
/*** SHA-256/384/512 Various Length Definitions ***********************/ /*** SHA-256 Various Length Definitions ***********************/
#define SHA256_BLOCK_LENGTH 64 #define SHA256_BLOCK_LENGTH 64
#define SHA256_DIGEST_LENGTH 32 #define SHA256_DIGEST_LENGTH 32
#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) #define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
#define SHA384_BLOCK_LENGTH 128
#define SHA384_DIGEST_LENGTH 48
#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
#define SHA512_BLOCK_LENGTH 128
#define SHA512_DIGEST_LENGTH 64
#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
/*** SHA-256/384/512 Context Structures *******************************/ /*** SHA-256/384/512 Context Structures *******************************/
@ -47,13 +41,6 @@ typedef struct _SHA256_CTX {
apr_uint64_t bitcount; apr_uint64_t bitcount;
apr_byte_t buffer[SHA256_BLOCK_LENGTH]; apr_byte_t buffer[SHA256_BLOCK_LENGTH];
} SHA256_CTX; } SHA256_CTX;
typedef struct _SHA512_CTX {
apr_uint64_t state[8];
apr_uint64_t bitcount[2];
apr_byte_t buffer[SHA512_BLOCK_LENGTH];
} SHA512_CTX;
typedef SHA512_CTX SHA384_CTX;
/*** SHA-256/384/512 Function Prototypes ******************************/ /*** SHA-256/384/512 Function Prototypes ******************************/
@ -64,20 +51,6 @@ char* apr__SHA256_End(SHA256_CTX *, char [SHA256_DIGEST_STRING_LENGTH]);
char* apr__SHA256_Data(const apr_byte_t *, size_t, char* apr__SHA256_Data(const apr_byte_t *, size_t,
char [SHA256_DIGEST_STRING_LENGTH]); char [SHA256_DIGEST_STRING_LENGTH]);
void apr__SHA384_Init(SHA384_CTX *);
void apr__SHA384_Update(SHA384_CTX *, const apr_byte_t *, size_t);
void apr__SHA384_Final(apr_byte_t [SHA384_DIGEST_LENGTH], SHA384_CTX *);
char* apr__SHA384_End(SHA384_CTX *, char [SHA384_DIGEST_STRING_LENGTH]);
char* apr__SHA384_Data(const apr_byte_t *, size_t,
char [SHA384_DIGEST_STRING_LENGTH]);
void apr__SHA512_Init(SHA512_CTX *);
void apr__SHA512_Update(SHA512_CTX *, const apr_byte_t *, size_t);
void apr__SHA512_Final(apr_byte_t [SHA512_DIGEST_LENGTH], SHA512_CTX *);
char* apr__SHA512_End(SHA512_CTX *, char [SHA512_DIGEST_STRING_LENGTH]);
char* apr__SHA512_Data(const apr_byte_t *, size_t,
char [SHA512_DIGEST_STRING_LENGTH]);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@ -1,3 +1,19 @@
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <apr.h> #include <apr.h>
#include <apr_random.h> #include <apr_random.h>
#include <apr_pools.h> #include <apr_pools.h>

View File

@ -734,11 +734,14 @@ APR_DECLARE(void) apr_table_mergen(apr_table_t *t, const char *key,
#if APR_POOL_DEBUG #if APR_POOL_DEBUG
{ {
if (!apr_pool_is_ancestor(apr_pool_find(key), t->a.pool)) { apr_pool_t *pool;
pool = apr_pool_find(key);
if ((pool != key) && (!apr_pool_is_ancestor(pool, t->a.pool))) {
fprintf(stderr, "apr_table_mergen: key not in ancestor pool of t\n"); fprintf(stderr, "apr_table_mergen: key not in ancestor pool of t\n");
abort(); abort();
} }
if (!apr_pool_is_ancestor(apr_pool_find(val), t->a.pool)) { pool = apr_pool_find(val);
if ((pool != val) && (!apr_pool_is_ancestor(pool, t->a.pool))) {
fprintf(stderr, "apr_table_mergen: val not in ancestor pool of t\n"); fprintf(stderr, "apr_table_mergen: val not in ancestor pool of t\n");
abort(); abort();
} }

View File

@ -96,7 +96,7 @@ APR_DECLARE(apr_status_t) apr_threadattr_detach_get(apr_threadattr_t *attr)
#else #else
pthread_attr_getdetachstate(&attr->attr, &state); pthread_attr_getdetachstate(&attr->attr, &state);
#endif #endif
if (state == 1) if (state == DETACH_ARG(1))
return APR_DETACH; return APR_DETACH;
return APR_NOTDETACH; return APR_NOTDETACH;
} }