[mapguide-commits] r7821 - in sandbox/jng/webtier_upgrade_v2/MgDev/Oem: . httpd httpd/include httpd/lib httpd/lib64 php php/Release_TS php/TSRM php/main php/x64 php/x64/Release_TS

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Aug 30 01:52:25 PDT 2013


Author: jng
Date: 2013-08-30 01:52:25 -0700 (Fri, 30 Aug 2013)
New Revision: 7821

Added:
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/CHANGES.TXT
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/PROVENANCE.TXT
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/ap_config_layout.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_allocator.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_anylock.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_atomic.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_base64.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_buckets.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_crypto.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_date.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbd.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbm.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dso.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_env.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_errno.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_info.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_io.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_fnmatch.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_general.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_getopt.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_global_mutex.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hash.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hooks.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_inherit.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_init.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_option.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_rebind.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_url.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_lib.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md4.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md5.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_memcache.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_mmap.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_network_io.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional_hooks.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_poll.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_pools.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_portable.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_proc_mutex.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_queue.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_random.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_reslist.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ring.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_rmm.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sdbm.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sha1.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_shm.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_signal.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strings.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strmatch.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_support.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_tables.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_cond.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_mutex.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_pool.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_proc.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_rwlock.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_time.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uri.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_user.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uuid.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_version.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_want.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xlate.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xml.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apu.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/os.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/apr-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/aprutil-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapr-1.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapr-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapriconv-1.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapriconv-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libaprutil-1.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libaprutil-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libhttpd.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libhttpd.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/mod_dav.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/mod_dav.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/xml.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/apr-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/aprutil-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapr-1.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapr-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapriconv-1.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapriconv-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libaprutil-1.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libaprutil-1.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libhttpd.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libhttpd.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/mod_dav.exp
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/mod_dav.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/xml.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/CHANGES.TXT
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/PROVENANCE.TXT
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/Release_TS/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/Release_TS/php5ts.lib
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/TSRM/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/TSRM/readdir.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/config.w32.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/win95nt.h
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64/Release_TS/
   sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64/Release_TS/php5ts.lib
Log:
Oem updates:
 - Add php libs and patched headers to Oem\php
 - Add httpd libs and patched/extra headers to Oem\httpd

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/CHANGES.TXT
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/CHANGES.TXT	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/CHANGES.TXT	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,7 @@
+include\apr.h
+
+	Only define uid_t, pid_t and gid_t if ACE hasn't already
+
+include\apr_Want.h
+
+	Only define struct iovec if ACE hasn't already

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/PROVENANCE.TXT
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/PROVENANCE.TXT	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/PROVENANCE.TXT	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,11 @@
+lib
+lib64
+	
+	Extracted from httpd-2.4.6 win32 and win64 binaries from http://www.apachelounge.com/download/
+
+include
+
+	Extracted from httpd-2.4.6 win64 binaries from http://www.apachelounge.com/download/
+
+	apr.h patched for compatibility with ACE
+	apr_Want.h patched for compatibility with ACE

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/ap_config_layout.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/ap_config_layout.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/ap_config_layout.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,31 @@
+/* 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.
+ */
+
+/**
+ * @file win32/win32_config_layout.h
+ * @brief This provides layout definitions for non-autoconf-based Windows
+ * builds, and is copied to include/ap_config_layout.h during the build.
+ */
+
+#ifndef AP_CONFIG_LAYOUT_H
+#define AP_CONFIG_LAYOUT_H
+
+/* Check for definition of DEFAULT_REL_RUNTIMEDIR */
+#ifndef DEFAULT_REL_RUNTIMEDIR
+#define DEFAULT_REL_RUNTIMEDIR "logs"
+#endif
+
+#endif /* AP_CONFIG_LAYOUT_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,647 @@
+/* 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.
+ */
+
+
+#ifndef APR_H
+#define APR_H
+
+/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
+ *
+ * You must modify apr.hw instead.
+ *
+ * And please, make an effort to stub apr.hnw and apr.h.in in the process.
+ *
+ * This is the Win32 specific version of apr.h.  It is copied from
+ * apr.hw by the apr.dsp and libapr.dsp projects. 
+ */
+
+/**
+ * @file apr.h
+ * @brief APR Platform Definitions
+ * @remark This is a generated header generated from include/apr.h.in by
+ * ./configure, or copied from include/apr.hw or include/apr.hnw 
+ * 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)
+
+/* Ignore most warnings (back down to /W3) for poorly constructed headers
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1200
+#pragma warning(push, 3)
+#endif
+
+/* disable or reduce the frequency of...
+ *   C4057: indirection to slightly different base types
+ *   C4075: slight indirection changes (unsigned short* vs short[])
+ *   C4100: unreferenced formal parameter
+ *   C4127: conditional expression is constant
+ *   C4163: '_rotl64' : not available as an intrinsic function
+ *   C4201: nonstandard extension nameless struct/unions
+ *   C4244: int to char/short - precision loss
+ *   C4514: unreferenced inline function removed
+ */
+#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
+
+/* Ignore Microsoft's interpretation of secure development
+ * and the POSIX string handling API
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+#pragma warning(disable: 4996)
+#endif
+
+/* Has windows.h already been included?  If so, our preferences don't matter,
+ * but we will still need the winsock things no matter what was included.
+ * If not, include a restricted set of windows headers to our tastes.
+ */
+#ifndef _WINDOWS_
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#ifndef _WIN32_WINNT
+
+/* Restrict the server to a subset of Windows XP header files by default
+ */
+#define _WIN32_WINNT 0x0600
+#endif
+#ifndef NOUSER
+#define NOUSER
+#endif
+#ifndef NOMCX
+#define NOMCX
+#endif
+#ifndef NOIME
+#define NOIME
+#endif
+#include <windows.h>
+/* 
+ * Add a _very_few_ declarations missing from the restricted set of headers
+ * (If this list becomes extensive, re-enable the required headers above!)
+ * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
+ */
+#define SW_HIDE             0
+#ifndef _WIN32_WCE
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#else
+#include <winsock.h>
+#endif
+#endif /* !_WINDOWS_ */
+
+/**
+ * @defgroup APR Apache Portability Runtime library
+ * @{
+ */
+/**
+ * @defgroup apr_platform Platform Definitions
+ * @{
+ * @warning
+ * <strong><em>The actual values of macros and typedefs on this page<br>
+ * are platform specific and should NOT be relied upon!</em></strong>
+ */
+
+#define APR_INLINE __inline
+#define APR_HAS_INLINE          1
+#if !defined(__GNUC__) && !defined(__attribute__)
+#define __attribute__(__x)
+#endif
+
+#ifndef _WIN32_WCE
+#define APR_HAVE_ARPA_INET_H    0
+#define APR_HAVE_CONIO_H        1
+#define APR_HAVE_CRYPT_H        0
+#define APR_HAVE_CTYPE_H        1
+#define APR_HAVE_DIRENT_H       0
+#define APR_HAVE_ERRNO_H        1
+#define APR_HAVE_FCNTL_H        1
+#define APR_HAVE_IO_H           1
+#define APR_HAVE_LIMITS_H       1
+#define APR_HAVE_NETDB_H        0
+#define APR_HAVE_NETINET_IN_H   0
+#define APR_HAVE_NETINET_SCTP_H 0
+#define APR_HAVE_NETINET_SCTP_UIO_H 0
+#define APR_HAVE_NETINET_TCP_H  0
+#define APR_HAVE_PTHREAD_H      0
+#define APR_HAVE_SEMAPHORE_H    0
+#define APR_HAVE_SIGNAL_H       1
+#define APR_HAVE_STDARG_H       1
+#define APR_HAVE_STDINT_H       0
+#define APR_HAVE_STDIO_H        1
+#define APR_HAVE_STDLIB_H       1
+#define APR_HAVE_STRING_H       1
+#define APR_HAVE_STRINGS_H      0
+#define APR_HAVE_SYS_IOCTL_H    0
+#define APR_HAVE_SYS_SENDFILE_H 0
+#define APR_HAVE_SYS_SIGNAL_H   0
+#define APR_HAVE_SYS_SOCKET_H   0
+#define APR_HAVE_SYS_SOCKIO_H   0
+#define APR_HAVE_SYS_SYSLIMITS_H 0
+#define APR_HAVE_SYS_TIME_H     0
+#define APR_HAVE_SYS_TYPES_H    1
+#define APR_HAVE_SYS_UIO_H      0
+#define APR_HAVE_SYS_UN_H       0
+#define APR_HAVE_SYS_WAIT_H     0
+#define APR_HAVE_TIME_H         1
+#define APR_HAVE_UNISTD_H       0
+#define APR_HAVE_STDDEF_H       1
+#define APR_HAVE_PROCESS_H      1
+#else
+#define APR_HAVE_ARPA_INET_H    0
+#define APR_HAVE_CONIO_H        0
+#define APR_HAVE_CRYPT_H        0
+#define APR_HAVE_CTYPE_H        0
+#define APR_HAVE_DIRENT_H       0
+#define APR_HAVE_ERRNO_H        0
+#define APR_HAVE_FCNTL_H        0
+#define APR_HAVE_IO_H           0
+#define APR_HAVE_LIMITS_H       0
+#define APR_HAVE_NETDB_H        0
+#define APR_HAVE_NETINET_IN_H   0
+#define APR_HAVE_NETINET_SCTP_H 0
+#define APR_HAVE_NETINET_SCTP_UIO_H 0
+#define APR_HAVE_NETINET_TCP_H  0
+#define APR_HAVE_PTHREAD_H      0
+#define APR_HAVE_SEMAPHORE_H    0
+#define APR_HAVE_SIGNAL_H       0
+#define APR_HAVE_STDARG_H       0
+#define APR_HAVE_STDINT_H       0
+#define APR_HAVE_STDIO_H        1
+#define APR_HAVE_STDLIB_H       1
+#define APR_HAVE_STRING_H       1
+#define APR_HAVE_STRINGS_H      0
+#define APR_HAVE_SYS_IOCTL_H    0
+#define APR_HAVE_SYS_SENDFILE_H 0
+#define APR_HAVE_SYS_SIGNAL_H   0
+#define APR_HAVE_SYS_SOCKET_H   0
+#define APR_HAVE_SYS_SOCKIO_H   0
+#define APR_HAVE_SYS_SYSLIMITS_H 0
+#define APR_HAVE_SYS_TIME_H     0
+#define APR_HAVE_SYS_TYPES_H    0
+#define APR_HAVE_SYS_UIO_H      0
+#define APR_HAVE_SYS_UN_H       0
+#define APR_HAVE_SYS_WAIT_H     0
+#define APR_HAVE_TIME_H         0
+#define APR_HAVE_UNISTD_H       0
+#define APR_HAVE_STDDEF_H       0
+#define APR_HAVE_PROCESS_H      0
+#endif
+
+/** @} */
+/** @} */
+
+/* We don't include our conditional headers within the doxyblocks 
+ * or the extern "C" namespace 
+ */
+
+#if APR_HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if APR_HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#if APR_HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if APR_HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+#if APR_HAVE_TIME_H
+#include <time.h>
+#endif
+#if APR_HAVE_PROCESS_H
+#include <process.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup apr_platform
+ * @ingroup APR 
+ * @{
+ */
+
+#define APR_HAVE_SHMEM_MMAP_TMP     0
+#define APR_HAVE_SHMEM_MMAP_SHM     0
+#define APR_HAVE_SHMEM_MMAP_ZERO    0
+#define APR_HAVE_SHMEM_SHMGET_ANON  0
+#define APR_HAVE_SHMEM_SHMGET       0
+#define APR_HAVE_SHMEM_MMAP_ANON    0
+#define APR_HAVE_SHMEM_BEOS         0
+
+#define APR_USE_SHMEM_MMAP_TMP     0
+#define APR_USE_SHMEM_MMAP_SHM     0
+#define APR_USE_SHMEM_MMAP_ZERO    0
+#define APR_USE_SHMEM_SHMGET_ANON  0
+#define APR_USE_SHMEM_SHMGET       0
+#define APR_USE_SHMEM_MMAP_ANON    0
+#define APR_USE_SHMEM_BEOS         0
+
+#define APR_USE_FLOCK_SERIALIZE           0 
+#define APR_USE_POSIXSEM_SERIALIZE        0
+#define APR_USE_SYSVSEM_SERIALIZE         0
+#define APR_USE_FCNTL_SERIALIZE           0
+#define APR_USE_PROC_PTHREAD_SERIALIZE    0 
+#define APR_USE_PTHREAD_SERIALIZE         0 
+
+#define APR_HAS_FLOCK_SERIALIZE           0
+#define APR_HAS_SYSVSEM_SERIALIZE         0
+#define APR_HAS_POSIXSEM_SERIALIZE        0
+#define APR_HAS_FCNTL_SERIALIZE           0
+#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
+
+#define APR_PROCESS_LOCK_IS_GLOBAL        0
+
+#define APR_HAVE_CORKABLE_TCP   0
+#define APR_HAVE_GETRLIMIT      0
+#define APR_HAVE_ICONV          0
+#define APR_HAVE_IN_ADDR        1
+#define APR_HAVE_INET_ADDR      1
+#define APR_HAVE_INET_NETWORK   0
+#define APR_HAVE_IPV6           1
+#define APR_HAVE_MEMMOVE        1
+#define APR_HAVE_SETRLIMIT      0
+#define APR_HAVE_SIGACTION      0
+#define APR_HAVE_SIGSUSPEND     0
+#define APR_HAVE_SIGWAIT        0
+#define APR_HAVE_SA_STORAGE     0
+#define APR_HAVE_STRCASECMP     0
+#define APR_HAVE_STRDUP         1
+#define APR_HAVE_STRNCASECMP    0
+#define APR_HAVE_STRSTR         1
+#define APR_HAVE_MEMCHR         1
+#define APR_HAVE_STRUCT_RLIMIT  0
+#define APR_HAVE_UNION_SEMUN    0
+#define APR_HAVE_SCTP           0
+#define APR_HAVE_IOVEC          0
+
+#ifndef _WIN32_WCE
+#define APR_HAVE_STRICMP        1
+#define APR_HAVE_STRNICMP       1
+#else
+#define APR_HAVE_STRICMP        0
+#define APR_HAVE_STRNICMP       0
+#endif
+
+/*  APR Feature Macros */
+#define APR_HAS_SHARED_MEMORY     1
+#define APR_HAS_THREADS           1
+#define APR_HAS_MMAP              1
+#define APR_HAS_FORK              0
+#define APR_HAS_RANDOM            1
+#define APR_HAS_OTHER_CHILD       1
+#define APR_HAS_DSO               1
+#define APR_HAS_SO_ACCEPTFILTER   0
+#define APR_HAS_UNICODE_FS        1
+#define APR_HAS_PROC_INVOKED      1
+#define APR_HAS_OS_UUID           1
+
+#ifndef _WIN32_WCE
+#define APR_HAS_SENDFILE          1
+#define APR_HAS_USER              1
+#define APR_HAS_LARGE_FILES       1
+#define APR_HAS_XTHREAD_FILES     1
+#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 1
+#else
+#define APR_HAS_SENDFILE          0
+#define APR_HAS_USER              0
+#define APR_HAS_LARGE_FILES       0
+#define APR_HAS_XTHREAD_FILES     0
+#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
+#endif
+
+/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
+ * to poll on files/pipes.
+ */
+#define APR_FILES_AS_SOCKETS      0
+
+/* This macro indicates whether or not EBCDIC is the native character set.
+ */
+#define APR_CHARSET_EBCDIC        0
+
+/* If we have a TCP implementation that can be "corked", what flag
+ * do we use?
+ */
+#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
+
+/* Is the TCP_NODELAY socket option inherited from listening sockets?
+ */
+#define APR_TCP_NODELAY_INHERITED 1
+
+/* Is the O_NONBLOCK flag inherited from listening sockets?
+ */
+#define APR_O_NONBLOCK_INHERITED  1
+
+/* Typedefs that APR needs. */
+
+typedef  unsigned char     apr_byte_t;
+
+typedef  short             apr_int16_t;
+typedef  unsigned short    apr_uint16_t;
+
+typedef  int               apr_int32_t;
+typedef  unsigned int      apr_uint32_t;
+
+typedef  __int64           apr_int64_t;
+typedef  unsigned __int64  apr_uint64_t;
+
+typedef  size_t      apr_size_t;
+#if APR_HAVE_STDDEF_H
+typedef  ptrdiff_t   apr_ssize_t;
+#else
+typedef  int         apr_ssize_t;
+#endif
+#if APR_HAS_LARGE_FILES
+typedef  __int64     apr_off_t;
+#else
+typedef  int         apr_off_t;
+#endif
+typedef  int         apr_socklen_t;
+typedef  apr_uint64_t      apr_ino_t;
+
+#ifdef _WIN64
+#define APR_SIZEOF_VOIDP   8
+#else
+#define APR_SIZEOF_VOIDP   4
+#endif
+
+#if APR_SIZEOF_VOIDP == 8
+typedef  apr_uint64_t            apr_uintptr_t;
+#else
+typedef  apr_uint32_t            apr_uintptr_t;
+#endif
+
+/* Are we big endian? */
+/* XXX: Fatal assumption on Alpha platforms */
+#define APR_IS_BIGENDIAN	0
+
+/* Mechanisms to properly type numeric literals */
+
+#ifndef __GNUC__
+#define APR_INT64_C(val) (val##i64)
+#define APR_UINT64_C(val) (val##Ui64)
+#else
+#define APR_INT64_C(val) (val##LL)
+#define APR_UINT64_C(val) (val##ULL)
+#endif
+
+#ifdef INT16_MIN
+#define APR_INT16_MIN   INT16_MIN
+#else
+#define APR_INT16_MIN   (-0x7fff - 1)
+#endif
+
+#ifdef INT16_MAX
+#define APR_INT16_MAX  INT16_MAX
+#else
+#define APR_INT16_MAX   (0x7fff)
+#endif
+
+#ifdef UINT16_MAX
+#define APR_UINT16_MAX  UINT16_MAX
+#else
+#define APR_UINT16_MAX  (0xffff)
+#endif
+
+#ifdef INT32_MIN
+#define APR_INT32_MIN   INT32_MIN
+#else
+#define APR_INT32_MIN   (-0x7fffffff - 1)
+#endif
+
+#ifdef INT32_MAX
+#define APR_INT32_MAX  INT32_MAX
+#else
+#define APR_INT32_MAX  0x7fffffff
+#endif
+
+#ifdef UINT32_MAX
+#define APR_UINT32_MAX  UINT32_MAX
+#else
+#define APR_UINT32_MAX  (0xffffffffU)
+#endif
+
+#ifdef INT64_MIN
+#define APR_INT64_MIN   INT64_MIN
+#else
+#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
+#endif
+
+#ifdef INT64_MAX
+#define APR_INT64_MAX   INT64_MAX
+#else
+#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
+#endif
+
+#ifdef UINT64_MAX
+#define APR_UINT64_MAX  UINT64_MAX
+#else
+#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
+#endif
+
+#define APR_SIZE_MAX    (~((apr_size_t)0))
+
+/* Definitions that APR programs need to work properly. */
+
+/**
+ * APR public API wrap for C++ compilers.
+ */
+#ifdef __cplusplus
+#define APR_BEGIN_DECLS     extern "C" {
+#define APR_END_DECLS       }
+#else
+#define APR_BEGIN_DECLS
+#define APR_END_DECLS
+#endif
+
+/** 
+ * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
+ * so that they follow the platform's calling convention.
+ * <PRE>
+ *
+ * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
+ *
+ * </PRE>
+ */
+#define APR_THREAD_FUNC  __stdcall
+
+
+#if defined(DOXYGEN) || !defined(WIN32)
+
+/**
+ * The public APR functions are declared with APR_DECLARE(), so they may
+ * use the most appropriate calling convention.  Public APR functions with 
+ * variable arguments must use APR_DECLARE_NONSTD().
+ *
+ * @remark Both the declaration and implementations must use the same macro.
+ *
+ * <PRE>
+ * APR_DECLARE(rettype) apr_func(args)
+ * </PRE>
+ * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
+ * @remark Note that when APR compiles the library itself, it passes the 
+ * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
+ * to export public symbols from the dynamic library build.\n
+ * The user must define the APR_DECLARE_STATIC when compiling to target
+ * the static APR library on some platforms (e.g. Win32.)  The public symbols 
+ * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
+ * By default, compiling an application and including the APR public
+ * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
+ * linked to the dynamic library.
+ */
+#define APR_DECLARE(type)            type 
+
+/**
+ * The public APR functions using variable arguments are declared with 
+ * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
+ * @see APR_DECLARE @see APR_DECLARE_DATA
+ * @remark Both the declaration and implementations must use the same macro.
+ * <PRE>
+ *
+ * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
+ *
+ * </PRE>
+ */
+#define APR_DECLARE_NONSTD(type)     type
+
+/**
+ * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
+ * This assures the appropriate indirection is invoked at compile time.
+ * @see APR_DECLARE @see APR_DECLARE_NONSTD
+ * @remark Note that the declaration and implementations use different forms,
+ * but both must include the macro.
+ * 
+ * <PRE>
+ *
+ * extern APR_DECLARE_DATA type apr_variable;\n
+ * APR_DECLARE_DATA type apr_variable = value;
+ *
+ * </PRE>
+ */
+#define APR_DECLARE_DATA
+
+#elif defined(APR_DECLARE_STATIC)
+#define APR_DECLARE(type)            type __stdcall
+#define APR_DECLARE_NONSTD(type)     type __cdecl
+#define APR_DECLARE_DATA
+#elif defined(APR_DECLARE_EXPORT)
+#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
+#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
+#define APR_DECLARE_DATA             __declspec(dllexport)
+#else
+#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
+#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
+#define APR_DECLARE_DATA             __declspec(dllimport)
+#endif
+
+#ifdef _WIN64
+#define APR_SSIZE_T_FMT          "I64d"
+#define APR_SIZE_T_FMT           "I64u"
+#else
+#define APR_SSIZE_T_FMT          "d"
+#define APR_SIZE_T_FMT           "u"
+#endif
+
+#if APR_HAS_LARGE_FILES
+#define APR_OFF_T_FMT            "I64d"
+#else
+#define APR_OFF_T_FMT            "d"
+#endif
+
+#define APR_PID_T_FMT            "d"
+
+#define APR_INT64_T_FMT          "I64d"
+#define APR_UINT64_T_FMT         "I64u"
+#define APR_UINT64_T_HEX_FMT     "I64x"
+
+/* No difference between PROC and GLOBAL mutex */
+#define APR_PROC_MUTEX_IS_GLOBAL      1
+
+/* Local machine definition for console and log output. */
+#define APR_EOL_STR              "\r\n"
+
+typedef int apr_wait_t;
+
+#if APR_HAS_UNICODE_FS
+/* An arbitrary size that is digestable. True max is a bit less than 32000 */
+#define APR_PATH_MAX 8192
+#else /* !APR_HAS_UNICODE_FS */
+#define APR_PATH_MAX MAX_PATH
+#endif
+
+#define APR_DSOPATH "PATH"
+
+/** @} */
+
+/* Definitions that only Win32 programs need to compile properly. */
+
+/* XXX These simply don't belong here, perhaps in apr_portable.h
+ * based on some APR_HAVE_PID/GID/UID?
+ */
+/* Change for MapGuide: Only define if ACE hasn't already */
+#if !defined (ACE_OS_INCLUDE_SYS_OS_UIO_H)
+#ifndef __GNUC__
+typedef  int         pid_t;
+#endif
+typedef  int         uid_t;
+typedef  int         gid_t;
+#endif /* ACE_OS_INCLUDE_SYS_OS_UIO_H */
+
+/* Win32 .h ommissions we really need */
+#define STDIN_FILENO  0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+#if APR_HAVE_IPV6
+
+/* Appears in later flavors, not the originals. */
+#ifndef in_addr6
+#define  in6_addr    in_addr6
+#endif
+
+#ifndef WS2TCPIP_INLINE
+#define IN6_IS_ADDR_V4MAPPED(a) \
+    (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
+     && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
+#endif
+
+#endif /* APR_HAS_IPV6 */
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Done with badly written headers
+ */
+#if defined(_MSC_VER) && _MSC_VER >= 1200
+#pragma warning(pop)
+#pragma warning(disable: 4996)
+#endif
+
+#endif /* WIN32 */
+
+#endif /* APR_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_allocator.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_allocator.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_allocator.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,169 @@
+/* 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.
+ */
+
+#ifndef APR_ALLOCATOR_H
+#define APR_ALLOCATOR_H
+
+/**
+ * @file apr_allocator.h
+ * @brief APR Internal Memory Allocation
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+#define APR_WANT_MEMFUNC /**< For no good reason? */
+#include "apr_want.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup apr_allocator Internal Memory Allocation
+ * @ingroup APR 
+ * @{
+ */
+
+/** the allocator structure */
+typedef struct apr_allocator_t apr_allocator_t;
+/** the structure which holds information about the allocation */
+typedef struct apr_memnode_t apr_memnode_t;
+
+/** basic memory node structure
+ * @note The next, ref and first_avail fields are available for use by the
+ *       caller of apr_allocator_alloc(), the remaining fields are read-only.
+ *       The next field has to be used with caution and sensibly set when the
+ *       memnode is passed back to apr_allocator_free().  See apr_allocator_free()
+ *       for details.  
+ *       The ref and first_avail fields will be properly restored by
+ *       apr_allocator_free().
+ */
+struct apr_memnode_t {
+    apr_memnode_t *next;            /**< next memnode */
+    apr_memnode_t **ref;            /**< reference to self */
+    apr_uint32_t   index;           /**< size */
+    apr_uint32_t   free_index;      /**< how much free */
+    char          *first_avail;     /**< pointer to first free memory */
+    char          *endp;            /**< pointer to end of free memory */
+};
+
+/** The base size of a memory node - aligned.  */
+#define APR_MEMNODE_T_SIZE APR_ALIGN_DEFAULT(sizeof(apr_memnode_t))
+
+/** Symbolic constants */
+#define APR_ALLOCATOR_MAX_FREE_UNLIMITED 0
+
+/**
+ * Create a new allocator
+ * @param allocator The allocator we have just created.
+ *
+ */
+APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator)
+                          __attribute__((nonnull(1)));
+
+/**
+ * Destroy an allocator
+ * @param allocator The allocator to be destroyed
+ * @remark Any memnodes not given back to the allocator prior to destroying
+ *         will _not_ be free()d.
+ */
+APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator)
+                  __attribute__((nonnull(1)));
+
+/**
+ * Allocate a block of mem from the allocator
+ * @param allocator The allocator to allocate from
+ * @param size The size of the mem to allocate (excluding the
+ *        memnode structure)
+ */
+APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator,
+                                                 apr_size_t size)
+                             __attribute__((nonnull(1)));
+
+/**
+ * Free a list of blocks of mem, giving them back to the allocator.
+ * The list is typically terminated by a memnode with its next field
+ * set to NULL.
+ * @param allocator The allocator to give the mem back to
+ * @param memnode The memory node to return
+ */
+APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator,
+                                     apr_memnode_t *memnode)
+                  __attribute__((nonnull(1,2)));
+
+#include "apr_pools.h"
+
+/**
+ * Set the owner of the allocator
+ * @param allocator The allocator to set the owner for
+ * @param pool The pool that is to own the allocator
+ * @remark Typically pool is the highest level pool using the allocator
+ */
+/*
+ * XXX: see if we can come up with something a bit better.  Currently
+ * you can make a pool an owner, but if the pool doesn't use the allocator
+ * the allocator will never be destroyed.
+ */
+APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator,
+                                          apr_pool_t *pool)
+                  __attribute__((nonnull(1)));
+
+/**
+ * Get the current owner of the allocator
+ * @param allocator The allocator to get the owner from
+ */
+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
+ * giving blocks back to the system.
+ * @param allocator The allocator the set the threshold on
+ * @param size The threshold.  0 == unlimited.
+ */
+APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator,
+                                             apr_size_t size)
+                  __attribute__((nonnull(1)));
+
+#include "apr_thread_mutex.h"
+
+#if APR_HAS_THREADS
+/**
+ * Set a mutex for the allocator to use
+ * @param allocator The allocator to set the mutex for
+ * @param mutex The mutex
+ */
+APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator,
+                                          apr_thread_mutex_t *mutex)
+                  __attribute__((nonnull(1)));
+
+/**
+ * Get the mutex currently set for the allocator
+ * @param allocator The allocator
+ */
+APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get(
+                                          apr_allocator_t *allocator)
+                                  __attribute__((nonnull(1)));
+
+#endif /* APR_HAS_THREADS */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_ALLOCATOR_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_anylock.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_anylock.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_anylock.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,128 @@
+/* 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.
+ */
+
+/**
+ * @file apr_anylock.h
+ * @brief APR-Util transparent any lock flavor wrapper
+ */
+#ifndef APR_ANYLOCK_H
+#define APR_ANYLOCK_H
+
+#include "apr_proc_mutex.h"
+#include "apr_thread_mutex.h"
+#include "apr_thread_rwlock.h"
+
+/** Structure that may contain any APR lock type */
+typedef struct apr_anylock_t {
+    /** Indicates what type of lock is in lock */
+    enum tm_lock {
+        apr_anylock_none,           /**< None */
+        apr_anylock_procmutex,      /**< Process-based */
+        apr_anylock_threadmutex,    /**< Thread-based */
+        apr_anylock_readlock,       /**< Read lock */
+        apr_anylock_writelock       /**< Write lock */
+    } type;
+    /** Union of all possible APR locks */
+    union apr_anylock_u_t {
+        apr_proc_mutex_t *pm;       /**< Process mutex */
+#if APR_HAS_THREADS
+        apr_thread_mutex_t *tm;     /**< Thread mutex */
+        apr_thread_rwlock_t *rw;    /**< Read-write lock */
+#endif
+    } lock;
+} apr_anylock_t;
+
+#if APR_HAS_THREADS
+
+/** Lock an apr_anylock_t structure */
+#define APR_ANYLOCK_LOCK(lck)                \
+    (((lck)->type == apr_anylock_none)         \
+      ? APR_SUCCESS                              \
+      : (((lck)->type == apr_anylock_threadmutex)  \
+          ? apr_thread_mutex_lock((lck)->lock.tm)    \
+          : (((lck)->type == apr_anylock_procmutex)    \
+              ? apr_proc_mutex_lock((lck)->lock.pm)      \
+              : (((lck)->type == apr_anylock_readlock)     \
+                  ? apr_thread_rwlock_rdlock((lck)->lock.rw) \
+                  : (((lck)->type == apr_anylock_writelock)    \
+                      ? apr_thread_rwlock_wrlock((lck)->lock.rw) \
+                      : APR_EINVAL)))))
+
+#else /* APR_HAS_THREADS */
+
+#define APR_ANYLOCK_LOCK(lck)                \
+    (((lck)->type == apr_anylock_none)         \
+      ? APR_SUCCESS                              \
+          : (((lck)->type == apr_anylock_procmutex)    \
+              ? apr_proc_mutex_lock((lck)->lock.pm)      \
+                      : APR_EINVAL))
+
+#endif /* APR_HAS_THREADS */
+
+#if APR_HAS_THREADS
+
+/** Try to lock an apr_anylock_t structure */
+#define APR_ANYLOCK_TRYLOCK(lck)                \
+    (((lck)->type == apr_anylock_none)            \
+      ? APR_SUCCESS                                 \
+      : (((lck)->type == apr_anylock_threadmutex)     \
+          ? apr_thread_mutex_trylock((lck)->lock.tm)    \
+          : (((lck)->type == apr_anylock_procmutex)       \
+              ? apr_proc_mutex_trylock((lck)->lock.pm)      \
+              : (((lck)->type == apr_anylock_readlock)        \
+                  ? apr_thread_rwlock_tryrdlock((lck)->lock.rw) \
+                  : (((lck)->type == apr_anylock_writelock)       \
+                      ? apr_thread_rwlock_trywrlock((lck)->lock.rw) \
+                          : APR_EINVAL)))))
+
+#else /* APR_HAS_THREADS */
+
+#define APR_ANYLOCK_TRYLOCK(lck)                \
+    (((lck)->type == apr_anylock_none)            \
+      ? APR_SUCCESS                                 \
+          : (((lck)->type == apr_anylock_procmutex)       \
+              ? apr_proc_mutex_trylock((lck)->lock.pm)      \
+                          : APR_EINVAL))
+
+#endif /* APR_HAS_THREADS */
+
+#if APR_HAS_THREADS
+
+/** Unlock an apr_anylock_t structure */
+#define APR_ANYLOCK_UNLOCK(lck)              \
+    (((lck)->type == apr_anylock_none)         \
+      ? APR_SUCCESS                              \
+      : (((lck)->type == apr_anylock_threadmutex)  \
+          ? apr_thread_mutex_unlock((lck)->lock.tm)  \
+          : (((lck)->type == apr_anylock_procmutex)    \
+              ? apr_proc_mutex_unlock((lck)->lock.pm)    \
+              : ((((lck)->type == apr_anylock_readlock) || \
+                  ((lck)->type == apr_anylock_writelock))    \
+                  ? apr_thread_rwlock_unlock((lck)->lock.rw)   \
+                      : APR_EINVAL))))
+
+#else /* APR_HAS_THREADS */
+
+#define APR_ANYLOCK_UNLOCK(lck)              \
+    (((lck)->type == apr_anylock_none)         \
+      ? APR_SUCCESS                              \
+          : (((lck)->type == apr_anylock_procmutex)    \
+              ? apr_proc_mutex_unlock((lck)->lock.pm)    \
+                      : APR_EINVAL))
+
+#endif /* APR_HAS_THREADS */
+
+#endif /* !APR_ANYLOCK_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_atomic.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_atomic.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_atomic.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,140 @@
+/* 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.
+ */
+
+#ifndef APR_ATOMIC_H
+#define APR_ATOMIC_H
+
+/**
+ * @file apr_atomic.h
+ * @brief APR Atomic Operations
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup apr_atomic Atomic Operations
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * this function is required on some platforms to initialize the
+ * atomic operation's internal structures
+ * @param p pool
+ * @return APR_SUCCESS on successful completion
+ * @remark Programs do NOT need to call this directly. APR will call this
+ *         automatically from apr_initialize.
+ * @internal
+ */
+APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p);
+
+/*
+ * Atomic operations on 32-bit values
+ * Note: Each of these functions internally implements a memory barrier
+ * on platforms that require it
+ */
+
+/**
+ * atomically read an apr_uint32_t from memory
+ * @param mem the pointer
+ */
+APR_DECLARE(apr_uint32_t) apr_atomic_read32(volatile apr_uint32_t *mem);
+
+/**
+ * atomically set an apr_uint32_t in memory
+ * @param mem pointer to the object
+ * @param val value that the object will assume
+ */
+APR_DECLARE(void) apr_atomic_set32(volatile apr_uint32_t *mem, apr_uint32_t val);
+
+/**
+ * atomically add 'val' to an apr_uint32_t
+ * @param mem pointer to the object
+ * @param val amount to add
+ * @return old value pointed to by mem
+ */
+APR_DECLARE(apr_uint32_t) apr_atomic_add32(volatile apr_uint32_t *mem, apr_uint32_t val);
+
+/**
+ * atomically subtract 'val' from an apr_uint32_t
+ * @param mem pointer to the object
+ * @param val amount to subtract
+ */
+APR_DECLARE(void) apr_atomic_sub32(volatile apr_uint32_t *mem, apr_uint32_t val);
+
+/**
+ * atomically increment an apr_uint32_t by 1
+ * @param mem pointer to the object
+ * @return old value pointed to by mem
+ */
+APR_DECLARE(apr_uint32_t) apr_atomic_inc32(volatile apr_uint32_t *mem);
+
+/**
+ * atomically decrement an apr_uint32_t by 1
+ * @param mem pointer to the atomic value
+ * @return zero if the value becomes zero on decrement, otherwise non-zero
+ */
+APR_DECLARE(int) apr_atomic_dec32(volatile apr_uint32_t *mem);
+
+/**
+ * compare an apr_uint32_t's value with 'cmp'.
+ * If they are the same swap the value with 'with'
+ * @param mem pointer to the value
+ * @param with what to swap it with
+ * @param cmp the value to compare it to
+ * @return the old value of *mem
+ */
+APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint32_t with,
+                              apr_uint32_t cmp);
+
+/**
+ * exchange an apr_uint32_t's value with 'val'.
+ * @param mem pointer to the value
+ * @param val what to swap it with
+ * @return the old value of *mem
+ */
+APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val);
+
+/**
+ * compare the pointer's value with cmp.
+ * If they are the same swap the value with 'with'
+ * @param mem pointer to the pointer
+ * @param with what to swap it with
+ * @param cmp the value to compare it to
+ * @return the old value of the pointer
+ */
+APR_DECLARE(void*) apr_atomic_casptr(volatile void **mem, void *with, const void *cmp);
+
+/**
+ * exchange a pair of pointer values
+ * @param mem pointer to the pointer
+ * @param with what to swap it with
+ * @return the old value of the pointer
+ */
+APR_DECLARE(void*) apr_atomic_xchgptr(volatile void **mem, void *with);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* !APR_ATOMIC_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_base64.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_base64.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_base64.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,113 @@
+/* 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.
+ * The apr_vsnprintf/apr_snprintf functions are based on, and used with the
+ * permission of, the  SIO stdio-replacement strx_* functions by Panos
+ * Tsirigotis <panos at alumni.cs.colorado.edu> for xinetd.
+ */
+
+/**
+ * @file apr_base64.h
+ * @brief APR-UTIL Base64 Encoding
+ */
+#ifndef APR_BASE64_H
+#define APR_BASE64_H
+
+#include "apu.h"
+#include "apr_general.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup APR_Util_Base64 Base64 Encoding
+ * @ingroup APR_Util
+ * @{
+ */
+
+/* Simple BASE64 encode/decode functions.
+ * 
+ * As we might encode binary strings, hence we require the length of
+ * the incoming plain source. And return the length of what we decoded.
+ *
+ * The decoding function takes any non valid char (i.e. whitespace, \0
+ * or anything non A-Z,0-9 etc as terminal.
+ * 
+ * plain strings/binary sequences are not assumed '\0' terminated. Encoded
+ * strings are neither. But probably should.
+ *
+ */
+
+/**
+ * Given the length of an un-encoded string, get the length of the
+ * encoded string.
+ * @param len the length of an unencoded string.
+ * @return the length of the string after it is encoded, including the
+ * trailing \0
+ */ 
+APU_DECLARE(int) apr_base64_encode_len(int len);
+
+/**
+ * Encode a text string using base64encoding.
+ * @param coded_dst The destination string for the encoded string.
+ * @param plain_src The original string in plain text
+ * @param len_plain_src The length of the plain text string
+ * @return the length of the encoded string
+ */ 
+APU_DECLARE(int) apr_base64_encode(char * coded_dst, const char *plain_src, 
+                                 int len_plain_src);
+
+/**
+ * Encode an EBCDIC string using base64encoding.
+ * @param coded_dst The destination string for the encoded string.
+ * @param plain_src The original string in plain text
+ * @param len_plain_src The length of the plain text string
+ * @return the length of the encoded string
+ */ 
+APU_DECLARE(int) apr_base64_encode_binary(char * coded_dst, 
+                                        const unsigned char *plain_src,
+                                        int len_plain_src);
+
+/**
+ * Determine the maximum buffer length required to decode the plain text
+ * string given the encoded string.
+ * @param coded_src The encoded string
+ * @return the maximum required buffer length for the plain text string
+ */ 
+APU_DECLARE(int) apr_base64_decode_len(const char * coded_src);
+
+/**
+ * Decode a string to plain text
+ * @param plain_dst The destination string for the plain text
+ * @param coded_src The encoded string 
+ * @return the length of the plain text string
+ */ 
+APU_DECLARE(int) apr_base64_decode(char * plain_dst, const char *coded_src);
+
+/**
+ * Decode an EBCDIC string to plain text
+ * @param plain_dst The destination string for the plain text
+ * @param coded_src The encoded string 
+ * @return the length of the plain text string
+ */ 
+APU_DECLARE(int) apr_base64_decode_binary(unsigned char * plain_dst, 
+                                        const char *coded_src);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* !APR_BASE64_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_buckets.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_buckets.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_buckets.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,1571 @@
+/* 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.
+ */
+/**
+ * @file apr_buckets.h
+ * @brief APR-UTIL Buckets/Bucket Brigades
+ */
+
+#ifndef APR_BUCKETS_H
+#define APR_BUCKETS_H
+
+#if defined(APR_BUCKET_DEBUG) && !defined(APR_RING_DEBUG)
+#define APR_RING_DEBUG
+#endif
+
+#include "apu.h"
+#include "apr_network_io.h"
+#include "apr_file_io.h"
+#include "apr_general.h"
+#include "apr_mmap.h"
+#include "apr_errno.h"
+#include "apr_ring.h"
+#include "apr.h"
+#if APR_HAVE_SYS_UIO_H
+#include <sys/uio.h>	/* for struct iovec */
+#endif
+#if APR_HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup APR_Util_Bucket_Brigades Bucket Brigades
+ * @ingroup APR_Util
+ * @{ 
+ */
+
+/** default bucket buffer size - 8KB minus room for memory allocator headers */
+#define APR_BUCKET_BUFF_SIZE 8000
+
+/** Determines how a bucket or brigade should be read */
+typedef enum {
+    APR_BLOCK_READ,   /**< block until data becomes available */
+    APR_NONBLOCK_READ /**< return immediately if no data is available */
+} apr_read_type_e;
+
+/**
+ * The one-sentence buzzword-laden overview: Bucket brigades represent
+ * a complex data stream that can be passed through a layered IO
+ * system without unnecessary copying. A longer overview follows...
+ *
+ * A bucket brigade is a doubly linked list (ring) of buckets, so we
+ * aren't limited to inserting at the front and removing at the end.
+ * Buckets are only passed around as members of a brigade, although
+ * singleton buckets can occur for short periods of time.
+ *
+ * Buckets are data stores of various types. They can refer to data in
+ * memory, or part of a file or mmap area, or the output of a process,
+ * etc. Buckets also have some type-dependent accessor functions:
+ * read, split, copy, setaside, and destroy.
+ *
+ * read returns the address and size of the data in the bucket. If the
+ * data isn't in memory then it is read in and the bucket changes type
+ * so that it can refer to the new location of the data. If all the
+ * data doesn't fit in the bucket then a new bucket is inserted into
+ * the brigade to hold the rest of it.
+ *
+ * split divides the data in a bucket into two regions. After a split
+ * the original bucket refers to the first part of the data and a new
+ * bucket inserted into the brigade after the original bucket refers
+ * to the second part of the data. Reference counts are maintained as
+ * necessary.
+ *
+ * setaside ensures that the data in the bucket has a long enough
+ * lifetime. Sometimes it is convenient to create a bucket referring
+ * to data on the stack in the expectation that it will be consumed
+ * (output to the network) before the stack is unwound. If that
+ * expectation turns out not to be valid, the setaside function is
+ * called to move the data somewhere safer.
+ *
+ * copy makes a duplicate of the bucket structure as long as it's
+ * possible to have multiple references to a single copy of the
+ * data itself.  Not all bucket types can be copied.
+ *
+ * destroy maintains the reference counts on the resources used by a
+ * bucket and frees them if necessary.
+ *
+ * Note: all of the above functions have wrapper macros (apr_bucket_read(),
+ * apr_bucket_destroy(), etc), and those macros should be used rather
+ * than using the function pointers directly.
+ *
+ * To write a bucket brigade, they are first made into an iovec, so that we
+ * don't write too little data at one time.  Currently we ignore compacting the
+ * buckets into as few buckets as possible, but if we really want good
+ * performance, then we need to compact the buckets before we convert to an
+ * iovec, or possibly while we are converting to an iovec.
+ */
+
+/*
+ * Forward declaration of the main types.
+ */
+
+/** @see apr_bucket_brigade */
+typedef struct apr_bucket_brigade apr_bucket_brigade;
+/** @see apr_bucket */
+typedef struct apr_bucket apr_bucket;
+/** @see apr_bucket_alloc_t */
+typedef struct apr_bucket_alloc_t apr_bucket_alloc_t;
+
+/** @see apr_bucket_type_t */
+typedef struct apr_bucket_type_t apr_bucket_type_t;
+
+/**
+ * Basic bucket type
+ */
+struct apr_bucket_type_t {
+    /**
+     * The name of the bucket type
+     */
+    const char *name;
+    /** 
+     * The number of functions this bucket understands.  Can not be less than
+     * five.
+     */
+    int num_func;
+    /**
+     * Whether the bucket contains metadata (ie, information that
+     * describes the regular contents of the brigade).  The metadata
+     * is not returned by apr_bucket_read() and is not indicated by
+     * the ->length of the apr_bucket itself.  In other words, an
+     * empty bucket is safe to arbitrarily remove if and only if it
+     * contains no metadata.  In this sense, "data" is just raw bytes
+     * that are the "content" of the brigade and "metadata" describes
+     * that data but is not a proper part of it.
+     */
+    enum {
+        /** This bucket type represents actual data to send to the client. */
+        APR_BUCKET_DATA = 0,
+        /** This bucket type represents metadata. */
+        APR_BUCKET_METADATA = 1
+    } is_metadata;
+    /**
+     * Free the private data and any resources used by the bucket (if they
+     *  aren't shared with another bucket).  This function is required to be
+     *  implemented for all bucket types, though it might be a no-op on some
+     *  of them (namely ones that never allocate any private data structures).
+     * @param data The private data pointer from the bucket to be destroyed
+     */
+    void (*destroy)(void *data);
+
+    /**
+     * Read the data from the bucket. This is required to be implemented
+     *  for all bucket types.
+     * @param b The bucket to read from
+     * @param str A place to store the data read.  Allocation should only be
+     *            done if absolutely necessary. 
+     * @param len The amount of data read.
+     * @param block Should this read function block if there is more data that
+     *              cannot be read immediately.
+     */
+    apr_status_t (*read)(apr_bucket *b, const char **str, apr_size_t *len, 
+                         apr_read_type_e block);
+    
+    /**
+     * Make it possible to set aside the data for at least as long as the
+     *  given pool. Buckets containing data that could potentially die before
+     *  this pool (e.g. the data resides on the stack, in a child pool of
+     *  the given pool, or in a disjoint pool) must somehow copy, shift, or
+     *  transform the data to have the proper lifetime.
+     * @param e The bucket to convert
+     * @remark Some bucket types contain data that will always outlive the
+     *         bucket itself. For example no data (EOS and FLUSH), or the data
+     *         resides in global, constant memory (IMMORTAL), or the data is on
+     *      the heap (HEAP). For these buckets, apr_bucket_setaside_noop can
+     *      be used.
+     */
+    apr_status_t (*setaside)(apr_bucket *e, apr_pool_t *pool);
+
+    /**
+     * Split one bucket in two at the specified position by duplicating
+     *  the bucket structure (not the data) and modifying any necessary
+     *  start/end/offset information.  If it's not possible to do this
+     *  for the bucket type (perhaps the length of the data is indeterminate,
+     *  as with pipe and socket buckets), then APR_ENOTIMPL is returned.
+     * @param e The bucket to split
+     * @param point The offset of the first byte in the new bucket
+     */
+    apr_status_t (*split)(apr_bucket *e, apr_size_t point);
+
+    /**
+     * Copy the bucket structure (not the data), assuming that this is
+     *  possible for the bucket type. If it's not, APR_ENOTIMPL is returned.
+     * @param e The bucket to copy
+     * @param c Returns a pointer to the new bucket
+     */
+    apr_status_t (*copy)(apr_bucket *e, apr_bucket **c);
+
+};
+
+/**
+ * apr_bucket structures are allocated on the malloc() heap and
+ * their lifetime is controlled by the parent apr_bucket_brigade
+ * structure. Buckets can move from one brigade to another e.g. by
+ * calling APR_BRIGADE_CONCAT(). In general the data in a bucket has
+ * the same lifetime as the bucket and is freed when the bucket is
+ * destroyed; if the data is shared by more than one bucket (e.g.
+ * after a split) the data is freed when the last bucket goes away.
+ */
+struct apr_bucket {
+    /** Links to the rest of the brigade */
+    APR_RING_ENTRY(apr_bucket) link;
+    /** The type of bucket.  */
+    const apr_bucket_type_t *type;
+    /** The length of the data in the bucket.  This could have been implemented
+     *  with a function, but this is an optimization, because the most
+     *  common thing to do will be to get the length.  If the length is unknown,
+     *  the value of this field will be (apr_size_t)(-1).
+     */
+    apr_size_t length;
+    /** The start of the data in the bucket relative to the private base
+     *  pointer.  The vast majority of bucket types allow a fixed block of
+     *  data to be referenced by multiple buckets, each bucket pointing to
+     *  a different segment of the data.  That segment starts at base+start
+     *  and ends at base+start+length.  
+     *  If the length == (apr_size_t)(-1), then start == -1.
+     */
+    apr_off_t start;
+    /** type-dependent data hangs off this pointer */
+    void *data;	
+    /**
+     * Pointer to function used to free the bucket. This function should
+     * always be defined and it should be consistent with the memory
+     * function used to allocate the bucket. For example, if malloc() is 
+     * used to allocate the bucket, this pointer should point to free().
+     * @param e Pointer to the bucket being freed
+     */
+    void (*free)(void *e);
+    /** The freelist from which this bucket was allocated */
+    apr_bucket_alloc_t *list;
+};
+
+/** A list of buckets */
+struct apr_bucket_brigade {
+    /** The pool to associate the brigade with.  The data is not allocated out
+     *  of the pool, but a cleanup is registered with this pool.  If the 
+     *  brigade is destroyed by some mechanism other than pool destruction,
+     *  the destroying function is responsible for killing the cleanup.
+     */
+    apr_pool_t *p;
+    /** The buckets in the brigade are on this list. */
+    /*
+     * The apr_bucket_list structure doesn't actually need a name tag
+     * because it has no existence independent of struct apr_bucket_brigade;
+     * the ring macros are designed so that you can leave the name tag
+     * argument empty in this situation but apparently the Windows compiler
+     * doesn't like that.
+     */
+    APR_RING_HEAD(apr_bucket_list, apr_bucket) list;
+    /** The freelist from which this bucket was allocated */
+    apr_bucket_alloc_t *bucket_alloc;
+};
+
+
+/**
+ * Function called when a brigade should be flushed
+ */
+typedef apr_status_t (*apr_brigade_flush)(apr_bucket_brigade *bb, void *ctx);
+
+/*
+ * define APR_BUCKET_DEBUG if you want your brigades to be checked for
+ * validity at every possible instant.  this will slow your code down
+ * substantially but is a very useful debugging tool.
+ */
+#ifdef APR_BUCKET_DEBUG
+
+#define APR_BRIGADE_CHECK_CONSISTENCY(b)				\
+        APR_RING_CHECK_CONSISTENCY(&(b)->list, apr_bucket, link)
+
+#define APR_BUCKET_CHECK_CONSISTENCY(e)					\
+        APR_RING_CHECK_ELEM_CONSISTENCY((e), apr_bucket, link)
+
+#else
+/**
+ * checks the ring pointers in a bucket brigade for consistency.  an
+ * abort() will be triggered if any inconsistencies are found.
+ *   note: this is a no-op unless APR_BUCKET_DEBUG is defined.
+ * @param b The brigade
+ */
+#define APR_BRIGADE_CHECK_CONSISTENCY(b)
+/**
+ * checks the brigade a bucket is in for ring consistency.  an
+ * abort() will be triggered if any inconsistencies are found.
+ *   note: this is a no-op unless APR_BUCKET_DEBUG is defined.
+ * @param e The bucket
+ */
+#define APR_BUCKET_CHECK_CONSISTENCY(e)
+#endif
+
+
+/**
+ * Wrappers around the RING macros to reduce the verbosity of the code
+ * that handles bucket brigades.
+ */
+/**
+ * The magic pointer value that indicates the head of the brigade
+ * @remark This is used to find the beginning and end of the brigade, eg:
+ * <pre>
+ *      while (e != APR_BRIGADE_SENTINEL(b)) {
+ *          ...
+ *          e = APR_BUCKET_NEXT(e);
+ *      }
+ * </pre>
+ * @param  b The brigade
+ * @return The magic pointer value
+ */
+#define APR_BRIGADE_SENTINEL(b)	APR_RING_SENTINEL(&(b)->list, apr_bucket, link)
+
+/**
+ * Determine if the bucket brigade is empty
+ * @param b The brigade to check
+ * @return true or false
+ */
+#define APR_BRIGADE_EMPTY(b)	APR_RING_EMPTY(&(b)->list, apr_bucket, link)
+
+/**
+ * Return the first bucket in a brigade
+ * @param b The brigade to query
+ * @return The first bucket in the brigade
+ */
+#define APR_BRIGADE_FIRST(b)	APR_RING_FIRST(&(b)->list)
+/**
+ * Return the last bucket in a brigade
+ * @param b The brigade to query
+ * @return The last bucket in the brigade
+ */
+#define APR_BRIGADE_LAST(b)	APR_RING_LAST(&(b)->list)
+
+/**
+ * Insert a list of buckets at the front of a brigade
+ * @param b The brigade to add to
+ * @param e The first bucket in a list of buckets to insert
+ */
+#define APR_BRIGADE_INSERT_HEAD(b, e) do {				\
+	apr_bucket *ap__b = (e);                                        \
+	APR_RING_INSERT_HEAD(&(b)->list, ap__b, apr_bucket, link);	\
+        APR_BRIGADE_CHECK_CONSISTENCY((b));				\
+    } while (0)
+
+/**
+ * Insert a list of buckets at the end of a brigade
+ * @param b The brigade to add to
+ * @param e The first bucket in a list of buckets to insert
+ */
+#define APR_BRIGADE_INSERT_TAIL(b, e) do {				\
+	apr_bucket *ap__b = (e);					\
+	APR_RING_INSERT_TAIL(&(b)->list, ap__b, apr_bucket, link);	\
+        APR_BRIGADE_CHECK_CONSISTENCY((b));				\
+    } while (0)
+
+/**
+ * Concatenate brigade b onto the end of brigade a, leaving brigade b empty
+ * @param a The first brigade
+ * @param b The second brigade
+ */
+#define APR_BRIGADE_CONCAT(a, b) do {					\
+        APR_RING_CONCAT(&(a)->list, &(b)->list, apr_bucket, link);	\
+        APR_BRIGADE_CHECK_CONSISTENCY((a));				\
+    } while (0)
+
+/**
+ * Prepend brigade b onto the beginning of brigade a, leaving brigade b empty
+ * @param a The first brigade
+ * @param b The second brigade
+ */
+#define APR_BRIGADE_PREPEND(a, b) do {					\
+        APR_RING_PREPEND(&(a)->list, &(b)->list, apr_bucket, link);	\
+        APR_BRIGADE_CHECK_CONSISTENCY((a));				\
+    } while (0)
+
+/**
+ * Insert a list of buckets before a specified bucket
+ * @param a The bucket to insert before
+ * @param b The buckets to insert
+ */
+#define APR_BUCKET_INSERT_BEFORE(a, b) do {				\
+	apr_bucket *ap__a = (a), *ap__b = (b);				\
+	APR_RING_INSERT_BEFORE(ap__a, ap__b, link);			\
+        APR_BUCKET_CHECK_CONSISTENCY(ap__a);				\
+    } while (0)
+
+/**
+ * Insert a list of buckets after a specified bucket
+ * @param a The bucket to insert after
+ * @param b The buckets to insert
+ */
+#define APR_BUCKET_INSERT_AFTER(a, b) do {				\
+	apr_bucket *ap__a = (a), *ap__b = (b);				\
+	APR_RING_INSERT_AFTER(ap__a, ap__b, link);			\
+        APR_BUCKET_CHECK_CONSISTENCY(ap__a);				\
+    } while (0)
+
+/**
+ * Get the next bucket in the list
+ * @param e The current bucket
+ * @return The next bucket
+ */
+#define APR_BUCKET_NEXT(e)	APR_RING_NEXT((e), link)
+/**
+ * Get the previous bucket in the list
+ * @param e The current bucket
+ * @return The previous bucket
+ */
+#define APR_BUCKET_PREV(e)	APR_RING_PREV((e), link)
+
+/**
+ * Remove a bucket from its bucket brigade
+ * @param e The bucket to remove
+ */
+#define APR_BUCKET_REMOVE(e)	APR_RING_REMOVE((e), link)
+
+/**
+ * Initialize a new bucket's prev/next pointers
+ * @param e The bucket to initialize
+ */
+#define APR_BUCKET_INIT(e)	APR_RING_ELEM_INIT((e), link)
+
+/**
+ * Determine if a bucket contains metadata.  An empty bucket is
+ * safe to arbitrarily remove if and only if this is false.
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_METADATA(e)    ((e)->type->is_metadata)
+
+/**
+ * Determine if a bucket is a FLUSH bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_FLUSH(e)       ((e)->type == &apr_bucket_type_flush)
+/**
+ * Determine if a bucket is an EOS bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_EOS(e)         ((e)->type == &apr_bucket_type_eos)
+/**
+ * Determine if a bucket is a FILE bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_FILE(e)        ((e)->type == &apr_bucket_type_file)
+/**
+ * Determine if a bucket is a PIPE bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_PIPE(e)        ((e)->type == &apr_bucket_type_pipe)
+/**
+ * Determine if a bucket is a SOCKET bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_SOCKET(e)      ((e)->type == &apr_bucket_type_socket)
+/**
+ * Determine if a bucket is a HEAP bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_HEAP(e)        ((e)->type == &apr_bucket_type_heap)
+/**
+ * Determine if a bucket is a TRANSIENT bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_TRANSIENT(e)   ((e)->type == &apr_bucket_type_transient)
+/**
+ * Determine if a bucket is a IMMORTAL bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_IMMORTAL(e)    ((e)->type == &apr_bucket_type_immortal)
+#if APR_HAS_MMAP
+/**
+ * Determine if a bucket is a MMAP bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_MMAP(e)        ((e)->type == &apr_bucket_type_mmap)
+#endif
+/**
+ * Determine if a bucket is a POOL bucket
+ * @param e The bucket to inspect
+ * @return true or false
+ */
+#define APR_BUCKET_IS_POOL(e)        ((e)->type == &apr_bucket_type_pool)
+
+/*
+ * General-purpose reference counting for the various bucket types.
+ *
+ * Any bucket type that keeps track of the resources it uses (i.e.
+ * most of them except for IMMORTAL, TRANSIENT, and EOS) needs to
+ * attach a reference count to the resource so that it can be freed
+ * when the last bucket that uses it goes away. Resource-sharing may
+ * occur because of bucket splits or buckets that refer to globally
+ * cached data. */
+
+/** @see apr_bucket_refcount */
+typedef struct apr_bucket_refcount apr_bucket_refcount;
+/**
+ * The structure used to manage the shared resource must start with an
+ * apr_bucket_refcount which is updated by the general-purpose refcount
+ * code. A pointer to the bucket-type-dependent private data structure
+ * can be cast to a pointer to an apr_bucket_refcount and vice versa.
+ */
+struct apr_bucket_refcount {
+    /** The number of references to this bucket */
+    int          refcount;
+};
+
+/*  *****  Reference-counted bucket types  *****  */
+
+/** @see apr_bucket_heap */
+typedef struct apr_bucket_heap apr_bucket_heap;
+/**
+ * A bucket referring to data allocated off the heap.
+ */
+struct apr_bucket_heap {
+    /** Number of buckets using this memory */
+    apr_bucket_refcount  refcount;
+    /** The start of the data actually allocated.  This should never be
+     * modified, it is only used to free the bucket.
+     */
+    char    *base;
+    /** how much memory was allocated */
+    apr_size_t  alloc_len;
+    /** function to use to delete the data */
+    void (*free_func)(void *data);
+};
+
+/** @see apr_bucket_pool */
+typedef struct apr_bucket_pool apr_bucket_pool;
+/**
+ * A bucket referring to data allocated from a pool
+ */
+struct apr_bucket_pool {
+    /** The pool bucket must be able to be easily morphed to a heap
+     * bucket if the pool gets cleaned up before all references are
+     * destroyed.  This apr_bucket_heap structure is populated automatically
+     * when the pool gets cleaned up, and subsequent calls to pool_read()
+     * will result in the apr_bucket in question being morphed into a
+     * regular heap bucket.  (To avoid having to do many extra refcount
+     * manipulations and b->data manipulations, the apr_bucket_pool
+     * struct actually *contains* the apr_bucket_heap struct that it
+     * will become as its first element; the two share their
+     * apr_bucket_refcount members.)
+     */
+    apr_bucket_heap  heap;
+    /** The block of data actually allocated from the pool.
+     * Segments of this block are referenced by adjusting
+     * the start and length of the apr_bucket accordingly.
+     * This will be NULL after the pool gets cleaned up.
+     */
+    const char *base;
+    /** The pool the data was allocated from.  When the pool
+     * is cleaned up, this gets set to NULL as an indicator
+     * to pool_read() that the data is now on the heap and
+     * so it should morph the bucket into a regular heap
+     * bucket before continuing.
+     */
+    apr_pool_t *pool;
+    /** The freelist this structure was allocated from, which is
+     * needed in the cleanup phase in order to allocate space on the heap
+     */
+    apr_bucket_alloc_t *list;
+};
+
+#if APR_HAS_MMAP
+/** @see apr_bucket_mmap */
+typedef struct apr_bucket_mmap apr_bucket_mmap;
+/**
+ * A bucket referring to an mmap()ed file
+ */
+struct apr_bucket_mmap {
+    /** Number of buckets using this memory */
+    apr_bucket_refcount  refcount;
+    /** The mmap this sub_bucket refers to */
+    apr_mmap_t *mmap;
+};
+#endif
+
+/** @see apr_bucket_file */
+typedef struct apr_bucket_file apr_bucket_file;
+/**
+ * A bucket referring to an file
+ */
+struct apr_bucket_file {
+    /** Number of buckets using this memory */
+    apr_bucket_refcount  refcount;
+    /** The file this bucket refers to */
+    apr_file_t *fd;
+    /** The pool into which any needed structures should
+     *  be created while reading from this file bucket */
+    apr_pool_t *readpool;
+#if APR_HAS_MMAP
+    /** Whether this bucket should be memory-mapped if
+     *  a caller tries to read from it */
+    int can_mmap;
+#endif /* APR_HAS_MMAP */
+};
+
+/** @see apr_bucket_structs */
+typedef union apr_bucket_structs apr_bucket_structs;
+/**
+ * A union of all bucket structures so we know what
+ * the max size is.
+ */
+union apr_bucket_structs {
+    apr_bucket      b;      /**< Bucket */
+    apr_bucket_heap heap;   /**< Heap */
+    apr_bucket_pool pool;   /**< Pool */
+#if APR_HAS_MMAP
+    apr_bucket_mmap mmap;   /**< MMap */
+#endif
+    apr_bucket_file file;   /**< File */
+};
+
+/**
+ * The amount that apr_bucket_alloc() should allocate in the common case.
+ * Note: this is twice as big as apr_bucket_structs to allow breathing
+ * room for third-party bucket types.
+ */
+#define APR_BUCKET_ALLOC_SIZE  APR_ALIGN_DEFAULT(2*sizeof(apr_bucket_structs))
+
+/*  *****  Bucket Brigade Functions  *****  */
+/**
+ * Create a new bucket brigade.  The bucket brigade is originally empty.
+ * @param p The pool to associate with the brigade.  Data is not allocated out
+ *          of the pool, but a cleanup is registered.
+ * @param list The bucket allocator to use
+ * @return The empty bucket brigade
+ */
+APU_DECLARE(apr_bucket_brigade *) apr_brigade_create(apr_pool_t *p,
+                                                     apr_bucket_alloc_t *list);
+
+/**
+ * destroy an entire bucket brigade.  This includes destroying all of the
+ * buckets within the bucket brigade's bucket list. 
+ * @param b The bucket brigade to destroy
+ */
+APU_DECLARE(apr_status_t) apr_brigade_destroy(apr_bucket_brigade *b);
+
+/**
+ * empty out an entire bucket brigade.  This includes destroying all of the
+ * buckets within the bucket brigade's bucket list.  This is similar to
+ * apr_brigade_destroy(), except that it does not deregister the brigade's
+ * pool cleanup function.
+ * @param data The bucket brigade to clean up
+ * @remark Generally, you should use apr_brigade_destroy().  This function
+ *         can be useful in situations where you have a single brigade that
+ *         you wish to reuse many times by destroying all of the buckets in
+ *         the brigade and putting new buckets into it later.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_cleanup(void *data);
+
+/**
+ * Move the buckets from the tail end of the existing brigade @a b into
+ * the brigade @a a. If @a a is NULL a new brigade is created. Buckets
+ * from @a e to the last bucket (inclusively) of brigade @a b are moved
+ * from @a b to the returned brigade @a a.
+ *
+ * @param b The brigade to split
+ * @param e The first bucket to move
+ * @param a The brigade which should be used for the result or NULL if
+ *          a new brigade should be created. The brigade @a a will be
+ *          cleared if it is not empty.
+ * @return The brigade supplied in @a a or a new one if @a a was NULL.
+ * @warning Note that this function allocates a new brigade if @a a is
+ * NULL so memory consumption should be carefully considered.
+ */
+APU_DECLARE(apr_bucket_brigade *) apr_brigade_split_ex(apr_bucket_brigade *b,
+                                                       apr_bucket *e,
+                                                       apr_bucket_brigade *a);
+
+/**
+ * Create a new bucket brigade and move the buckets from the tail end
+ * of an existing brigade into the new brigade.  Buckets from 
+ * @a e to the last bucket (inclusively) of brigade @a b
+ * are moved from @a b to the returned brigade.
+ * @param b The brigade to split 
+ * @param e The first bucket to move
+ * @return The new brigade
+ * @warning Note that this function always allocates a new brigade
+ * so memory consumption should be carefully considered.
+ */
+APU_DECLARE(apr_bucket_brigade *) apr_brigade_split(apr_bucket_brigade *b,
+                                                    apr_bucket *e);
+
+/**
+ * Partition a bucket brigade at a given offset (in bytes from the start of
+ * the brigade).  This is useful whenever a filter wants to use known ranges
+ * of bytes from the brigade; the ranges can even overlap.
+ * @param b The brigade to partition
+ * @param point The offset at which to partition the brigade
+ * @param after_point Returns a pointer to the first bucket after the partition
+ * @return APR_SUCCESS on success, APR_INCOMPLETE if the contents of the
+ * brigade were shorter than @a point, or an error code.
+ * @remark if APR_INCOMPLETE is returned, @a after_point will be set to
+ * the brigade sentinel.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b,
+                                                apr_off_t point,
+                                                apr_bucket **after_point);
+
+/**
+ * Return the total length of the brigade.
+ * @param bb The brigade to compute the length of
+ * @param read_all Read unknown-length buckets to force a size
+ * @param length Returns the length of the brigade (up to the end, or up
+ *               to a bucket read error), or -1 if the brigade has buckets
+ *               of indeterminate length and read_all is 0.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_length(apr_bucket_brigade *bb,
+                                             int read_all,
+                                             apr_off_t *length);
+
+/**
+ * Take a bucket brigade and store the data in a flat char*
+ * @param bb The bucket brigade to create the char* from
+ * @param c The char* to write into
+ * @param len The maximum length of the char array. On return, it is the
+ *            actual length of the char array.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_flatten(apr_bucket_brigade *bb,
+                                              char *c,
+                                              apr_size_t *len);
+
+/**
+ * Creates a pool-allocated string representing a flat bucket brigade
+ * @param bb The bucket brigade to create the char array from
+ * @param c On return, the allocated char array
+ * @param len On return, the length of the char array.
+ * @param pool The pool to allocate the string from.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_pflatten(apr_bucket_brigade *bb, 
+                                               char **c,
+                                               apr_size_t *len,
+                                               apr_pool_t *pool);
+
+/**
+ * Split a brigade to represent one LF line.
+ * @param bbOut The bucket brigade that will have the LF line appended to.
+ * @param bbIn The input bucket brigade to search for a LF-line.
+ * @param block The blocking mode to be used to split the line.
+ * @param maxbytes The maximum bytes to read.  If this many bytes are seen
+ *                 without a LF, the brigade will contain a partial line.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_split_line(apr_bucket_brigade *bbOut,
+                                                 apr_bucket_brigade *bbIn,
+                                                 apr_read_type_e block,
+                                                 apr_off_t maxbytes);
+
+/**
+ * Create an iovec of the elements in a bucket_brigade... return number 
+ * of elements used.  This is useful for writing to a file or to the
+ * network efficiently.
+ * @param b The bucket brigade to create the iovec from
+ * @param vec The iovec to create
+ * @param nvec The number of elements in the iovec. On return, it is the
+ *             number of iovec elements actually filled out.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_to_iovec(apr_bucket_brigade *b, 
+                                               struct iovec *vec, int *nvec);
+
+/**
+ * This function writes a list of strings into a bucket brigade. 
+ * @param b The bucket brigade to add to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param va A list of strings to add
+ * @return APR_SUCCESS or error code.
+ */
+APU_DECLARE(apr_status_t) apr_brigade_vputstrs(apr_bucket_brigade *b,
+                                               apr_brigade_flush flush,
+                                               void *ctx,
+                                               va_list va);
+
+/**
+ * This function writes a string into a bucket brigade.
+ *
+ * The apr_brigade_write function attempts to be efficient with the
+ * handling of heap buckets. Regardless of the amount of data stored
+ * inside a heap bucket, heap buckets are a fixed size to promote their
+ * reuse.
+ *
+ * If an attempt is made to write a string to a brigade that already 
+ * ends with a heap bucket, this function will attempt to pack the
+ * string into the remaining space in the previous heap bucket, before
+ * allocating a new heap bucket.
+ *
+ * This function always returns APR_SUCCESS, unless a flush function is
+ * passed, in which case the return value of the flush function will be
+ * returned if used.
+ * @param b The bucket brigade to add to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param str The string to add
+ * @param nbyte The number of bytes to write
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE(apr_status_t) apr_brigade_write(apr_bucket_brigade *b,
+                                            apr_brigade_flush flush, void *ctx,
+                                            const char *str, apr_size_t nbyte);
+
+/**
+ * This function writes multiple strings into a bucket brigade.
+ * @param b The bucket brigade to add to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param vec The strings to add (address plus length for each)
+ * @param nvec The number of entries in iovec
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE(apr_status_t) apr_brigade_writev(apr_bucket_brigade *b,
+                                             apr_brigade_flush flush,
+                                             void *ctx,
+                                             const struct iovec *vec,
+                                             apr_size_t nvec);
+
+/**
+ * This function writes a string into a bucket brigade.
+ * @param bb The bucket brigade to add to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param str The string to add
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE(apr_status_t) apr_brigade_puts(apr_bucket_brigade *bb,
+                                           apr_brigade_flush flush, void *ctx,
+                                           const char *str);
+
+/**
+ * This function writes a character into a bucket brigade.
+ * @param b The bucket brigade to add to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param c The character to add
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE(apr_status_t) apr_brigade_putc(apr_bucket_brigade *b,
+                                           apr_brigade_flush flush, void *ctx,
+                                           const char c);
+
+/**
+ * This function writes an unspecified number of strings into a bucket brigade.
+ * @param b The bucket brigade to add to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param ... The strings to add
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_brigade_putstrs(apr_bucket_brigade *b,
+                                                     apr_brigade_flush flush,
+                                                     void *ctx, ...);
+
+/**
+ * Evaluate a printf and put the resulting string at the end 
+ * of the bucket brigade.
+ * @param b The brigade to write to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param fmt The format of the string to write
+ * @param ... The arguments to fill out the format
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_brigade_printf(apr_bucket_brigade *b, 
+                                                    apr_brigade_flush flush,
+                                                    void *ctx,
+                                                    const char *fmt, ...)
+        __attribute__((format(printf,4,5)));
+
+/**
+ * Evaluate a printf and put the resulting string at the end 
+ * of the bucket brigade.
+ * @param b The brigade to write to
+ * @param flush The flush function to use if the brigade is full
+ * @param ctx The structure to pass to the flush function
+ * @param fmt The format of the string to write
+ * @param va The arguments to fill out the format
+ * @return APR_SUCCESS or error code
+ */
+APU_DECLARE(apr_status_t) apr_brigade_vprintf(apr_bucket_brigade *b, 
+                                              apr_brigade_flush flush,
+                                              void *ctx,
+                                              const char *fmt, va_list va);
+
+/**
+ * Utility function to insert a file (or a segment of a file) onto the
+ * end of the brigade.  The file is split into multiple buckets if it
+ * is larger than the maximum size which can be represented by a
+ * single bucket.
+ * @param bb the brigade to insert into
+ * @param f the file to insert
+ * @param start the offset of the start of the segment
+ * @param len the length of the segment of the file to insert
+ * @param p pool from which file buckets are allocated
+ * @return the last bucket inserted
+ */
+APU_DECLARE(apr_bucket *) apr_brigade_insert_file(apr_bucket_brigade *bb,
+                                                  apr_file_t *f,
+                                                  apr_off_t start,
+                                                  apr_off_t len,
+                                                  apr_pool_t *p);
+
+
+
+/*  *****  Bucket freelist functions *****  */
+/**
+ * Create a bucket allocator.
+ * @param p This pool's underlying apr_allocator_t is used to allocate memory
+ *          for the bucket allocator.  When the pool is destroyed, the bucket
+ *          allocator's cleanup routine will free all memory that has been
+ *          allocated from it.
+ * @remark  The reason the allocator gets its memory from the pool's
+ *          apr_allocator_t rather than from the pool itself is because
+ *          the bucket allocator will free large memory blocks back to the
+ *          allocator when it's done with them, thereby preventing memory
+ *          footprint growth that would occur if we allocated from the pool.
+ * @warning The allocator must never be used by more than one thread at a time.
+ */
+APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create(apr_pool_t *p);
+
+/**
+ * Create a bucket allocator.
+ * @param allocator This apr_allocator_t is used to allocate both the bucket
+ *          allocator and all memory handed out by the bucket allocator.  The
+ *          caller is responsible for destroying the bucket allocator and the
+ *          apr_allocator_t -- no automatic cleanups will happen.
+ * @warning The allocator must never be used by more than one thread at a time.
+ */
+APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create_ex(apr_allocator_t *allocator);
+
+/**
+ * Destroy a bucket allocator.
+ * @param list The allocator to be destroyed
+ */
+APU_DECLARE_NONSTD(void) apr_bucket_alloc_destroy(apr_bucket_alloc_t *list);
+
+/**
+ * Allocate memory for use by the buckets.
+ * @param size The amount to allocate.
+ * @param list The allocator from which to allocate the memory.
+ */
+APU_DECLARE_NONSTD(void *) apr_bucket_alloc(apr_size_t size, apr_bucket_alloc_t *list);
+
+/**
+ * Free memory previously allocated with apr_bucket_alloc().
+ * @param block The block of memory to be freed.
+ */
+APU_DECLARE_NONSTD(void) apr_bucket_free(void *block);
+
+
+/*  *****  Bucket Functions  *****  */
+/**
+ * Free the resources used by a bucket. If multiple buckets refer to
+ * the same resource it is freed when the last one goes away.
+ * @see apr_bucket_delete()
+ * @param e The bucket to destroy
+ */
+#define apr_bucket_destroy(e) do {					\
+        (e)->type->destroy((e)->data);					\
+        (e)->free(e);							\
+    } while (0)
+
+/**
+ * Delete a bucket by removing it from its brigade (if any) and then
+ * destroying it.
+ * @remark This mainly acts as an aid in avoiding code verbosity.  It is
+ * the preferred exact equivalent to:
+ * <pre>
+ *      APR_BUCKET_REMOVE(e);
+ *      apr_bucket_destroy(e);
+ * </pre>
+ * @param e The bucket to delete
+ */
+#define apr_bucket_delete(e) do {					\
+        APR_BUCKET_REMOVE(e);						\
+        apr_bucket_destroy(e);						\
+    } while (0)
+
+/**
+ * Read some data from the bucket.
+ *
+ * The apr_bucket_read function returns a convenient amount of data
+ * from the bucket provided, writing the address and length of the
+ * data to the pointers provided by the caller. The function tries
+ * as hard as possible to avoid a memory copy.
+ *
+ * Buckets are expected to be a member of a brigade at the time they
+ * are read.
+ *
+ * In typical application code, buckets are read in a loop, and after
+ * each bucket is read and processed, it is moved or deleted from the
+ * brigade and the next bucket read.
+ *
+ * The definition of "convenient" depends on the type of bucket that
+ * is being read, and is decided by APR. In the case of memory based
+ * buckets such as heap and immortal buckets, a pointer will be
+ * returned to the location of the buffer containing the complete
+ * contents of the bucket.
+ *
+ * Some buckets, such as the socket bucket, might have no concept
+ * of length. If an attempt is made to read such a bucket, the
+ * apr_bucket_read function will read a convenient amount of data
+ * from the socket. The socket bucket is magically morphed into a
+ * heap bucket containing the just-read data, and a new socket bucket
+ * is inserted just after this heap bucket.
+ *
+ * To understand why apr_bucket_read might do this, consider the loop
+ * described above to read and process buckets. The current bucket
+ * is magically morphed into a heap bucket and returned to the caller.
+ * The caller processes the data, and deletes the heap bucket, moving
+ * onto the next bucket, the new socket bucket. This process repeats,
+ * giving the illusion of a bucket brigade that contains potentially
+ * infinite amounts of data. It is up to the caller to decide at what
+ * point to stop reading buckets.
+ *
+ * Some buckets, such as the file bucket, might have a fixed size,
+ * but be significantly larger than is practical to store in RAM in
+ * one go. As with the socket bucket, if an attempt is made to read
+ * from a file bucket, the file bucket is magically morphed into a
+ * heap bucket containing a convenient amount of data read from the
+ * current offset in the file. During the read, the offset will be
+ * moved forward on the file, and a new file bucket will be inserted
+ * directly after the current bucket representing the remainder of the
+ * file. If the heap bucket was large enough to store the whole
+ * remainder of the file, no more file buckets are inserted, and the
+ * file bucket will disappear completely.
+ *
+ * The pattern for reading buckets described above does create the
+ * illusion that the code is willing to swallow buckets that might be
+ * too large for the system to handle in one go. This however is just
+ * an illusion: APR will always ensure that large (file) or infinite
+ * (socket) buckets are broken into convenient bite sized heap buckets
+ * before data is returned to the caller.
+ *
+ * There is a potential gotcha to watch for: if buckets are read in a
+ * loop, and aren't deleted after being processed, the potentially large
+ * bucket will slowly be converted into RAM resident heap buckets. If
+ * the file is larger than available RAM, an out of memory condition
+ * could be caused if the application is not careful to manage this.
+ *
+ * @param e The bucket to read from
+ * @param str The location to store a pointer to the data in
+ * @param len The location to store the amount of data read
+ * @param block Whether the read function blocks
+ */
+#define apr_bucket_read(e,str,len,block) (e)->type->read(e, str, len, block)
+
+/**
+ * Setaside data so that stack data is not destroyed on returning from
+ * the function
+ * @param e The bucket to setaside
+ * @param p The pool to setaside into
+ */
+#define apr_bucket_setaside(e,p) (e)->type->setaside(e,p)
+
+/**
+ * Split one bucket in two at the point provided.
+ * 
+ * Once split, the original bucket becomes the first of the two new buckets.
+ * 
+ * (It is assumed that the bucket is a member of a brigade when this
+ * function is called).
+ * @param e The bucket to split
+ * @param point The offset to split the bucket at
+ */
+#define apr_bucket_split(e,point) (e)->type->split(e, point)
+
+/**
+ * Copy a bucket.
+ * @param e The bucket to copy
+ * @param c Returns a pointer to the new bucket
+ */
+#define apr_bucket_copy(e,c) (e)->type->copy(e, c)
+
+/* Bucket type handling */
+
+/**
+ * This function simply returns APR_SUCCESS to denote that the bucket does
+ * not require anything to happen for its setaside() function. This is
+ * appropriate for buckets that have "immortal" data -- the data will live
+ * at least as long as the bucket.
+ * @param data The bucket to setaside
+ * @param pool The pool defining the desired lifetime of the bucket data
+ * @return APR_SUCCESS
+ */ 
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_noop(apr_bucket *data,
+                                                          apr_pool_t *pool);
+
+/**
+ * A place holder function that signifies that the setaside function was not
+ * implemented for this bucket
+ * @param data The bucket to setaside
+ * @param pool The pool defining the desired lifetime of the bucket data
+ * @return APR_ENOTIMPL
+ */ 
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_notimpl(apr_bucket *data,
+                                                             apr_pool_t *pool);
+
+/**
+ * A place holder function that signifies that the split function was not
+ * implemented for this bucket
+ * @param data The bucket to split
+ * @param point The location to split the bucket
+ * @return APR_ENOTIMPL
+ */ 
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_split_notimpl(apr_bucket *data,
+                                                          apr_size_t point);
+
+/**
+ * A place holder function that signifies that the copy function was not
+ * implemented for this bucket
+ * @param e The bucket to copy
+ * @param c Returns a pointer to the new bucket
+ * @return APR_ENOTIMPL
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_copy_notimpl(apr_bucket *e,
+                                                         apr_bucket **c);
+
+/**
+ * A place holder function that signifies that this bucket does not need
+ * to do anything special to be destroyed.  That's only the case for buckets
+ * that either have no data (metadata buckets) or buckets whose data pointer
+ * points to something that's not a bucket-type-specific structure, as with
+ * simple buckets where data points to a string and pipe buckets where data
+ * points directly to the apr_file_t.
+ * @param data The bucket data to destroy
+ */ 
+APU_DECLARE_NONSTD(void) apr_bucket_destroy_noop(void *data);
+
+/**
+ * There is no apr_bucket_destroy_notimpl, because destruction is required
+ * to be implemented (it could be a noop, but only if that makes sense for
+ * the bucket type)
+ */
+
+/* There is no apr_bucket_read_notimpl, because it is a required function
+ */
+
+
+/* All of the bucket types implemented by the core */
+/**
+ * The flush bucket type.  This signifies that all data should be flushed to
+ * the next filter.  The flush bucket should be sent with the other buckets.
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_flush;
+/**
+ * The EOS bucket type.  This signifies that there will be no more data, ever.
+ * All filters MUST send all data to the next filter when they receive a
+ * bucket of this type
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_eos;
+/**
+ * The FILE bucket type.  This bucket represents a file on disk
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_file;
+/**
+ * The HEAP bucket type.  This bucket represents a data allocated from the
+ * heap.
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_heap;
+#if APR_HAS_MMAP
+/**
+ * The MMAP bucket type.  This bucket represents an MMAP'ed file
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_mmap;
+#endif
+/**
+ * The POOL bucket type.  This bucket represents a data that was allocated
+ * from a pool.  IF this bucket is still available when the pool is cleared,
+ * the data is copied on to the heap.
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pool;
+/**
+ * The PIPE bucket type.  This bucket represents a pipe to another program.
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pipe;
+/**
+ * The IMMORTAL bucket type.  This bucket represents a segment of data that
+ * the creator is willing to take responsibility for.  The core will do
+ * nothing with the data in an immortal bucket
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_immortal;
+/**
+ * The TRANSIENT bucket type.  This bucket represents a data allocated off
+ * the stack.  When the setaside function is called, this data is copied on
+ * to the heap
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_transient;
+/**
+ * The SOCKET bucket type.  This bucket represents a socket to another machine
+ */
+APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_socket;
+
+
+/*  *****  Simple buckets  *****  */
+
+/**
+ * Split a simple bucket into two at the given point.  Most non-reference
+ * counting buckets that allow multiple references to the same block of
+ * data (eg transient and immortal) will use this as their split function
+ * without any additional type-specific handling.
+ * @param b The bucket to be split
+ * @param point The offset of the first byte in the new bucket
+ * @return APR_EINVAL if the point is not within the bucket;
+ *         APR_ENOMEM if allocation failed;
+ *         or APR_SUCCESS
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_split(apr_bucket *b,
+                                                         apr_size_t point);
+
+/**
+ * Copy a simple bucket.  Most non-reference-counting buckets that allow
+ * multiple references to the same block of data (eg transient and immortal)
+ * will use this as their copy function without any additional type-specific
+ * handling.
+ * @param a The bucket to copy
+ * @param b Returns a pointer to the new bucket
+ * @return APR_ENOMEM if allocation failed;
+ *         or APR_SUCCESS
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_copy(apr_bucket *a,
+                                                        apr_bucket **b);
+
+
+/*  *****  Shared, reference-counted buckets  *****  */
+
+/**
+ * Initialize a bucket containing reference-counted data that may be
+ * shared. The caller must allocate the bucket if necessary and
+ * initialize its type-dependent fields, and allocate and initialize
+ * its own private data structure. This function should only be called
+ * by type-specific bucket creation functions.
+ * @param b The bucket to initialize
+ * @param data A pointer to the private data structure
+ *             with the reference count at the start
+ * @param start The start of the data in the bucket
+ *              relative to the private base pointer
+ * @param length The length of the data in the bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data,
+				                 apr_off_t start, 
+                                                 apr_size_t length);
+
+/**
+ * Decrement the refcount of the data in the bucket. This function
+ * should only be called by type-specific bucket destruction functions.
+ * @param data The private data pointer from the bucket to be destroyed
+ * @return TRUE or FALSE; TRUE if the reference count is now
+ *         zero, indicating that the shared resource itself can
+ *         be destroyed by the caller.
+ */
+APU_DECLARE(int) apr_bucket_shared_destroy(void *data);
+
+/**
+ * Split a bucket into two at the given point, and adjust the refcount
+ * to the underlying data. Most reference-counting bucket types will
+ * be able to use this function as their split function without any
+ * additional type-specific handling.
+ * @param b The bucket to be split
+ * @param point The offset of the first byte in the new bucket
+ * @return APR_EINVAL if the point is not within the bucket;
+ *         APR_ENOMEM if allocation failed;
+ *         or APR_SUCCESS
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *b,
+                                                         apr_size_t point);
+
+/**
+ * Copy a refcounted bucket, incrementing the reference count. Most
+ * reference-counting bucket types will be able to use this function
+ * as their copy function without any additional type-specific handling.
+ * @param a The bucket to copy
+ * @param b Returns a pointer to the new bucket
+ * @return APR_ENOMEM if allocation failed;
+           or APR_SUCCESS
+ */
+APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a,
+                                                        apr_bucket **b);
+
+
+/*  *****  Functions to Create Buckets of varying types  *****  */
+/*
+ * Each bucket type foo has two initialization functions:
+ * apr_bucket_foo_make which sets up some already-allocated memory as a
+ * bucket of type foo; and apr_bucket_foo_create which allocates memory
+ * for the bucket, calls apr_bucket_make_foo, and initializes the
+ * bucket's list pointers. The apr_bucket_foo_make functions are used
+ * inside the bucket code to change the type of buckets in place;
+ * other code should call apr_bucket_foo_create. All the initialization
+ * functions change nothing if they fail.
+ */
+
+/**
+ * Create an End of Stream bucket.  This indicates that there is no more data
+ * coming from down the filter stack.  All filters should flush at this point.
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_eos_create(apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in an EOS bucket.  This indicates that there is no 
+ * more data coming from down the filter stack.  All filters should flush at 
+ * this point.
+ * @param b The bucket to make into an EOS bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_eos_make(apr_bucket *b);
+
+/**
+ * Create a flush  bucket.  This indicates that filters should flush their
+ * data.  There is no guarantee that they will flush it, but this is the
+ * best we can do.
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_flush_create(apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a FLUSH  bucket.  This indicates that filters 
+ * should flush their data.  There is no guarantee that they will flush it, 
+ * but this is the best we can do.
+ * @param b The bucket to make into a FLUSH bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_flush_make(apr_bucket *b);
+
+/**
+ * Create a bucket referring to long-lived data.
+ * @param buf The data to insert into the bucket
+ * @param nbyte The size of the data to insert.
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_immortal_create(const char *buf, 
+                                                     apr_size_t nbyte,
+                                                     apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a bucket refer to long-lived data
+ * @param b The bucket to make into a IMMORTAL bucket
+ * @param buf The data to insert into the bucket
+ * @param nbyte The size of the data to insert.
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_immortal_make(apr_bucket *b, 
+                                                   const char *buf, 
+                                                   apr_size_t nbyte);
+
+/**
+ * Create a bucket referring to data on the stack.
+ * @param buf The data to insert into the bucket
+ * @param nbyte The size of the data to insert.
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_transient_create(const char *buf, 
+                                                      apr_size_t nbyte,
+                                                      apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a bucket refer to stack data
+ * @param b The bucket to make into a TRANSIENT bucket
+ * @param buf The data to insert into the bucket
+ * @param nbyte The size of the data to insert.
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_transient_make(apr_bucket *b, 
+                                                    const char *buf,
+                                                    apr_size_t nbyte);
+
+/**
+ * Create a bucket referring to memory on the heap. If the caller asks
+ * for the data to be copied, this function always allocates 4K of
+ * memory so that more data can be added to the bucket without
+ * requiring another allocation. Therefore not all the data may be put
+ * into the bucket. If copying is not requested then the bucket takes
+ * over responsibility for free()ing the memory.
+ * @param buf The buffer to insert into the bucket
+ * @param nbyte The size of the buffer to insert.
+ * @param free_func Function to use to free the data; NULL indicates that the
+ *                  bucket should make a copy of the data
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_heap_create(const char *buf, 
+                                                 apr_size_t nbyte,
+                                                 void (*free_func)(void *data),
+                                                 apr_bucket_alloc_t *list);
+/**
+ * Make the bucket passed in a bucket refer to heap data
+ * @param b The bucket to make into a HEAP bucket
+ * @param buf The buffer to insert into the bucket
+ * @param nbyte The size of the buffer to insert.
+ * @param free_func Function to use to free the data; NULL indicates that the
+ *                  bucket should make a copy of the data
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_heap_make(apr_bucket *b, const char *buf,
+                                               apr_size_t nbyte,
+                                               void (*free_func)(void *data));
+
+/**
+ * Create a bucket referring to memory allocated from a pool.
+ *
+ * @param buf The buffer to insert into the bucket
+ * @param length The number of bytes referred to by this bucket
+ * @param pool The pool the memory was allocated from
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_pool_create(const char *buf, 
+                                                 apr_size_t length,
+                                                 apr_pool_t *pool,
+                                                 apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a bucket refer to pool data
+ * @param b The bucket to make into a pool bucket
+ * @param buf The buffer to insert into the bucket
+ * @param length The number of bytes referred to by this bucket
+ * @param pool The pool the memory was allocated from
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_pool_make(apr_bucket *b, const char *buf,
+                                               apr_size_t length, 
+                                               apr_pool_t *pool);
+
+#if APR_HAS_MMAP
+/**
+ * Create a bucket referring to mmap()ed memory.
+ * @param mm The mmap to insert into the bucket
+ * @param start The offset of the first byte in the mmap
+ *              that this bucket refers to
+ * @param length The number of bytes referred to by this bucket
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_mmap_create(apr_mmap_t *mm, 
+                                                 apr_off_t start,
+                                                 apr_size_t length,
+                                                 apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a bucket refer to an MMAP'ed file
+ * @param b The bucket to make into a MMAP bucket
+ * @param mm The mmap to insert into the bucket
+ * @param start The offset of the first byte in the mmap
+ *              that this bucket refers to
+ * @param length The number of bytes referred to by this bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_mmap_make(apr_bucket *b, apr_mmap_t *mm,
+                                               apr_off_t start, 
+                                               apr_size_t length);
+#endif
+
+/**
+ * Create a bucket referring to a socket.
+ * @param thissock The socket to put in the bucket
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_socket_create(apr_socket_t *thissock,
+                                                   apr_bucket_alloc_t *list);
+/**
+ * Make the bucket passed in a bucket refer to a socket
+ * @param b The bucket to make into a SOCKET bucket
+ * @param thissock The socket to put in the bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_socket_make(apr_bucket *b, 
+                                                 apr_socket_t *thissock);
+
+/**
+ * Create a bucket referring to a pipe.
+ * @param thispipe The pipe to put in the bucket
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_pipe_create(apr_file_t *thispipe,
+                                                 apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a bucket refer to a pipe
+ * @param b The bucket to make into a PIPE bucket
+ * @param thispipe The pipe to put in the bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_pipe_make(apr_bucket *b, 
+                                               apr_file_t *thispipe);
+
+/**
+ * Create a bucket referring to a file.
+ * @param fd The file to put in the bucket
+ * @param offset The offset where the data of interest begins in the file
+ * @param len The amount of data in the file we are interested in
+ * @param p The pool into which any needed structures should be created
+ *          while reading from this file bucket
+ * @param list The freelist from which this bucket should be allocated
+ * @return The new bucket, or NULL if allocation failed
+ * @remark If the file is truncated such that the segment of the file
+ * referenced by the bucket no longer exists, an attempt to read
+ * from the bucket will fail with APR_EOF. 
+ * @remark apr_brigade_insert_file() should generally be used to
+ * insert files into brigades, since that function can correctly
+ * handle large file issues.
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_file_create(apr_file_t *fd,
+                                                 apr_off_t offset,
+                                                 apr_size_t len, 
+                                                 apr_pool_t *p,
+                                                 apr_bucket_alloc_t *list);
+
+/**
+ * Make the bucket passed in a bucket refer to a file
+ * @param b The bucket to make into a FILE bucket
+ * @param fd The file to put in the bucket
+ * @param offset The offset where the data of interest begins in the file
+ * @param len The amount of data in the file we are interested in
+ * @param p The pool into which any needed structures should be created
+ *          while reading from this file bucket
+ * @return The new bucket, or NULL if allocation failed
+ */
+APU_DECLARE(apr_bucket *) apr_bucket_file_make(apr_bucket *b, apr_file_t *fd,
+                                               apr_off_t offset,
+                                               apr_size_t len, apr_pool_t *p);
+
+/**
+ * Enable or disable memory-mapping for a FILE bucket (default is enabled)
+ * @param b The bucket
+ * @param enabled Whether memory-mapping should be enabled
+ * @return APR_SUCCESS normally, or an error code if the operation fails
+ */
+APU_DECLARE(apr_status_t) apr_bucket_file_enable_mmap(apr_bucket *b,
+                                                      int enabled);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_BUCKETS_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_crypto.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_crypto.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_crypto.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,419 @@
+/* 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.
+ */
+
+#ifndef APR_CRYPTO_H
+#define APR_CRYPTO_H
+
+#include "apu.h"
+#include "apr_pools.h"
+#include "apr_tables.h"
+#include "apr_hash.h"
+#include "apu_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file apr_crypto.h
+ * @brief APR-UTIL Crypto library
+ */
+/**
+ * @defgroup APR_Util_Crypto Crypto routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+#if APU_HAVE_CRYPTO
+
+#ifndef APU_CRYPTO_RECOMMENDED_DRIVER
+#if APU_HAVE_OPENSSL
+#define APU_CRYPTO_RECOMMENDED_DRIVER "openssl"
+#else
+#if APU_HAVE_NSS
+#define APU_CRYPTO_RECOMMENDED_DRIVER "nss"
+#else
+#if APU_HAVE_MSCNG
+#define APU_CRYPTO_RECOMMENDED_DRIVER "mscng"
+#else
+#if APU_HAVE_MSCAPI
+#define APU_CRYPTO_RECOMMENDED_DRIVER "mscapi"
+#else
+#endif
+#endif
+#endif
+#endif
+#endif
+
+/**
+ * Symmetric Key types understood by the library.
+ *
+ * NOTE: It is expected that this list will grow over time.
+ *
+ * Interoperability Matrix:
+ *
+ * The matrix is based on the testcrypto.c unit test, which attempts to
+ * test whether a simple encrypt/decrypt will succeed, as well as testing
+ * whether an encrypted string by one library can be decrypted by the
+ * others.
+ *
+ * Some libraries will successfully encrypt and decrypt their own data,
+ * but won't decrypt data from another library. It is hoped that over
+ * time these anomalies will be found and fixed, but until then it is
+ * recommended that ciphers are chosen that interoperate across platform.
+ *
+ * An X below means the test passes, it does not necessarily mean that
+ * encryption performed is correct or secure. Applications should stick
+ * to ciphers that pass the interoperablity tests on the right hand side
+ * of the table.
+ *
+ * Aligned data is data whose length is a multiple of the block size for
+ * the chosen cipher. Padded data is data that is not aligned by block
+ * size and must be padded by the crypto library.
+ *
+ *                  OpenSSL      NSS      Interop
+ *                 Align Pad  Align Pad  Align Pad
+ * 3DES_192/CBC    X     X    X     X    X     X
+ * 3DES_192/ECB    X     X
+ * AES_256/CBC     X     X    X     X    X     X
+ * AES_256/ECB     X     X    X          X
+ * AES_192/CBC     X     X    X     X
+ * AES_192/ECB     X     X    X
+ * AES_128/CBC     X     X    X     X
+ * AES_128/ECB     X     X    X
+ *
+ * Conclusion: for padded data, use 3DES_192/CBC or AES_256/CBC. For
+ * aligned data, use 3DES_192/CBC, AES_256/CBC or AES_256/ECB.
+ */
+
+typedef enum
+{
+    APR_KEY_NONE, APR_KEY_3DES_192, /** 192 bit (3-Key) 3DES */
+    APR_KEY_AES_128, /** 128 bit AES */
+    APR_KEY_AES_192, /** 192 bit AES */
+    APR_KEY_AES_256
+/** 256 bit AES */
+} apr_crypto_block_key_type_e;
+
+typedef enum
+{
+    APR_MODE_NONE, /** An error condition */
+    APR_MODE_ECB, /** Electronic Code Book */
+    APR_MODE_CBC
+/** Cipher Block Chaining */
+} apr_crypto_block_key_mode_e;
+
+/* These are opaque structs.  Instantiation is up to each backend */
+typedef struct apr_crypto_driver_t apr_crypto_driver_t;
+typedef struct apr_crypto_t apr_crypto_t;
+typedef struct apr_crypto_config_t apr_crypto_config_t;
+typedef struct apr_crypto_key_t apr_crypto_key_t;
+typedef struct apr_crypto_block_t apr_crypto_block_t;
+
+/**
+ * @brief Perform once-only initialisation. Call once only.
+ *
+ * @param pool - pool to register any shutdown cleanups, etc
+ * @return APR_NOTIMPL in case of no crypto support.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_init(apr_pool_t *pool);
+
+/**
+ * @brief Register a cleanup to zero out the buffer provided
+ * when the pool is cleaned up.
+ *
+ * @param pool - pool to register the cleanup
+ * @param buffer - buffer to zero out
+ * @param size - size of the buffer to zero out
+ */
+APU_DECLARE(apr_status_t) apr_crypto_clear(apr_pool_t *pool, void *buffer,
+        apr_size_t size);
+
+/**
+ * @brief Get the driver struct for a name
+ *
+ * @param driver - pointer to driver struct.
+ * @param name - driver name
+ * @param params - array of initialisation parameters
+ * @param result - result and error message on failure
+ * @param pool - (process) pool to register cleanup
+ * @return APR_SUCCESS for success
+ * @return APR_ENOTIMPL for no driver (when DSO not enabled)
+ * @return APR_EDSOOPEN if DSO driver file can't be opened
+ * @return APR_ESYMNOTFOUND if the driver file doesn't contain a driver
+ * @remarks NSS: the params can have "dir", "key3", "cert7" and "secmod"
+ *  keys, each followed by an equal sign and a value. Such key/value pairs can
+ *  be delimited by space or tab. If the value contains a space, surround the
+ *  whole key value pair in quotes: "dir=My Directory".
+ * @remarks OpenSSL: currently no params are supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_get_driver(
+        const apr_crypto_driver_t **driver,
+        const char *name, const char *params, const apu_err_t **result,
+        apr_pool_t *pool);
+
+/**
+ * @brief Return the name of the driver.
+ *
+ * @param driver - The driver in use.
+ * @return The name of the driver.
+ */
+APU_DECLARE(const char *) apr_crypto_driver_name(
+        const apr_crypto_driver_t *driver);
+
+/**
+ * @brief Get the result of the last operation on a context. If the result
+ *        is NULL, the operation was successful.
+ * @param result - the result structure
+ * @param f - context pointer
+ * @return APR_SUCCESS for success
+ */
+APU_DECLARE(apr_status_t) apr_crypto_error(const apu_err_t **result,
+        const apr_crypto_t *f);
+
+/**
+ * @brief Create a context for supporting encryption. Keys, certificates,
+ *        algorithms and other parameters will be set per context. More than
+ *        one context can be created at one time. A cleanup will be automatically
+ *        registered with the given pool to guarantee a graceful shutdown.
+ * @param f - context pointer will be written here
+ * @param driver - driver to use
+ * @param params - array of key parameters
+ * @param pool - process pool
+ * @return APR_ENOENGINE when the engine specified does not exist. APR_EINITENGINE
+ * if the engine cannot be initialised.
+ * @remarks NSS: currently no params are supported.
+ * @remarks OpenSSL: the params can have "engine" as a key, followed by an equal
+ *  sign and a value.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_make(apr_crypto_t **f,
+        const apr_crypto_driver_t *driver, const char *params,
+        apr_pool_t *pool);
+
+/**
+ * @brief Get a hash table of key types, keyed by the name of the type against
+ * an integer pointer constant.
+ *
+ * @param types - hashtable of key types keyed to constants.
+ * @param f - encryption context
+ * @return APR_SUCCESS for success
+ */
+APU_DECLARE(apr_status_t) apr_crypto_get_block_key_types(apr_hash_t **types,
+        const apr_crypto_t *f);
+
+/**
+ * @brief Get a hash table of key modes, keyed by the name of the mode against
+ * an integer pointer constant.
+ *
+ * @param modes - hashtable of key modes keyed to constants.
+ * @param f - encryption context
+ * @return APR_SUCCESS for success
+ */
+APU_DECLARE(apr_status_t) apr_crypto_get_block_key_modes(apr_hash_t **modes,
+        const apr_crypto_t *f);
+
+/**
+ * @brief Create a key from the given passphrase. By default, the PBKDF2
+ *        algorithm is used to generate the key from the passphrase. It is expected
+ *        that the same pass phrase will generate the same key, regardless of the
+ *        backend crypto platform used. The key is cleaned up when the context
+ *        is cleaned, and may be reused with multiple encryption or decryption
+ *        operations.
+ * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If
+ *       *key is not NULL, *key must point at a previously created structure.
+ * @param key The key returned, see note.
+ * @param ivSize The size of the initialisation vector will be returned, based
+ *               on whether an IV is relevant for this type of crypto.
+ * @param pass The passphrase to use.
+ * @param passLen The passphrase length in bytes
+ * @param salt The salt to use.
+ * @param saltLen The salt length in bytes
+ * @param type 3DES_192, AES_128, AES_192, AES_256.
+ * @param mode Electronic Code Book / Cipher Block Chaining.
+ * @param doPad Pad if necessary.
+ * @param iterations Number of iterations to use in algorithm
+ * @param f The context to use.
+ * @param p The pool to use.
+ * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend
+ *         error occurred while generating the key. APR_ENOCIPHER if the type or mode
+ *         is not supported by the particular backend. APR_EKEYTYPE if the key type is
+ *         not known. APR_EPADDING if padding was requested but is not supported.
+ *         APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_passphrase(apr_crypto_key_t **key,
+        apr_size_t *ivSize, const char *pass, apr_size_t passLen,
+        const unsigned char * salt, apr_size_t saltLen,
+        const apr_crypto_block_key_type_e type,
+        const apr_crypto_block_key_mode_e mode, const int doPad,
+        const int iterations, const apr_crypto_t *f, apr_pool_t *p);
+
+/**
+ * @brief Initialise a context for encrypting arbitrary data using the given key.
+ * @note If *ctx is NULL, a apr_crypto_block_t will be created from a pool. If
+ *       *ctx is not NULL, *ctx must point at a previously created structure.
+ * @param ctx The block context returned, see note.
+ * @param iv Optional initialisation vector. If the buffer pointed to is NULL,
+ *           an IV will be created at random, in space allocated from the pool.
+ *           If the buffer pointed to is not NULL, the IV in the buffer will be
+ *           used.
+ * @param key The key structure to use.
+ * @param blockSize The block size of the cipher.
+ * @param p The pool to use.
+ * @return Returns APR_ENOIV if an initialisation vector is required but not specified.
+ *         Returns APR_EINIT if the backend failed to initialise the context. Returns
+ *         APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_encrypt_init(
+        apr_crypto_block_t **ctx, const unsigned char **iv,
+        const apr_crypto_key_t *key, apr_size_t *blockSize, apr_pool_t *p);
+
+/**
+ * @brief Encrypt data provided by in, write it to out.
+ * @note The number of bytes written will be written to outlen. If
+ *       out is NULL, outlen will contain the maximum size of the
+ *       buffer needed to hold the data, including any data
+ *       generated by apr_crypto_block_encrypt_finish below. If *out points
+ *       to NULL, a buffer sufficiently large will be created from
+ *       the pool provided. If *out points to a not-NULL value, this
+ *       value will be used as a buffer instead.
+ * @param out Address of a buffer to which data will be written,
+ *        see note.
+ * @param outlen Length of the output will be written here.
+ * @param in Address of the buffer to read.
+ * @param inlen Length of the buffer to read.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred. Returns APR_ENOTIMPL if
+ *         not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_encrypt(unsigned char **out,
+        apr_size_t *outlen, const unsigned char *in, apr_size_t inlen,
+        apr_crypto_block_t *ctx);
+
+/**
+ * @brief Encrypt final data block, write it to out.
+ * @note If necessary the final block will be written out after being
+ *       padded. Typically the final block will be written to the
+ *       same buffer used by apr_crypto_block_encrypt, offset by the
+ *       number of bytes returned as actually written by the
+ *       apr_crypto_block_encrypt() call. After this call, the context
+ *       is cleaned and can be reused by apr_crypto_block_encrypt_init().
+ * @param out Address of a buffer to which data will be written. This
+ *            buffer must already exist, and is usually the same
+ *            buffer used by apr_evp_crypt(). See note.
+ * @param outlen Length of the output will be written here.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred.
+ * @return APR_EPADDING if padding was enabled and the block was incorrectly
+ *         formatted.
+ * @return APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_encrypt_finish(unsigned char *out,
+        apr_size_t *outlen, apr_crypto_block_t *ctx);
+
+/**
+ * @brief Initialise a context for decrypting arbitrary data using the given key.
+ * @note If *ctx is NULL, a apr_crypto_block_t will be created from a pool. If
+ *       *ctx is not NULL, *ctx must point at a previously created structure.
+ * @param ctx The block context returned, see note.
+ * @param blockSize The block size of the cipher.
+ * @param iv Optional initialisation vector.
+ * @param key The key structure to use.
+ * @param p The pool to use.
+ * @return Returns APR_ENOIV if an initialisation vector is required but not specified.
+ *         Returns APR_EINIT if the backend failed to initialise the context. Returns
+ *         APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_decrypt_init(
+        apr_crypto_block_t **ctx, apr_size_t *blockSize,
+        const unsigned char *iv, const apr_crypto_key_t *key, apr_pool_t *p);
+
+/**
+ * @brief Decrypt data provided by in, write it to out.
+ * @note The number of bytes written will be written to outlen. If
+ *       out is NULL, outlen will contain the maximum size of the
+ *       buffer needed to hold the data, including any data
+ *       generated by apr_crypto_block_decrypt_finish below. If *out points
+ *       to NULL, a buffer sufficiently large will be created from
+ *       the pool provided. If *out points to a not-NULL value, this
+ *       value will be used as a buffer instead.
+ * @param out Address of a buffer to which data will be written,
+ *        see note.
+ * @param outlen Length of the output will be written here.
+ * @param in Address of the buffer to read.
+ * @param inlen Length of the buffer to read.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred. Returns APR_ENOTIMPL if
+ *         not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_decrypt(unsigned char **out,
+        apr_size_t *outlen, const unsigned char *in, apr_size_t inlen,
+        apr_crypto_block_t *ctx);
+
+/**
+ * @brief Decrypt final data block, write it to out.
+ * @note If necessary the final block will be written out after being
+ *       padded. Typically the final block will be written to the
+ *       same buffer used by apr_crypto_block_decrypt, offset by the
+ *       number of bytes returned as actually written by the
+ *       apr_crypto_block_decrypt() call. After this call, the context
+ *       is cleaned and can be reused by apr_crypto_block_decrypt_init().
+ * @param out Address of a buffer to which data will be written. This
+ *            buffer must already exist, and is usually the same
+ *            buffer used by apr_evp_crypt(). See note.
+ * @param outlen Length of the output will be written here.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred.
+ * @return APR_EPADDING if padding was enabled and the block was incorrectly
+ *         formatted.
+ * @return APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_decrypt_finish(unsigned char *out,
+        apr_size_t *outlen, apr_crypto_block_t *ctx);
+
+/**
+ * @brief Clean encryption / decryption context.
+ * @note After cleanup, a context is free to be reused if necessary.
+ * @param ctx The block context to use.
+ * @return Returns APR_ENOTIMPL if not supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_cleanup(apr_crypto_block_t *ctx);
+
+/**
+ * @brief Clean encryption / decryption context.
+ * @note After cleanup, a context is free to be reused if necessary.
+ * @param f The context to use.
+ * @return Returns APR_ENOTIMPL if not supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_cleanup(apr_crypto_t *f);
+
+/**
+ * @brief Shutdown the crypto library.
+ * @note After shutdown, it is expected that the init function can be called again.
+ * @param driver - driver to use
+ * @return Returns APR_ENOTIMPL if not supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_shutdown(
+        const apr_crypto_driver_t *driver);
+
+#endif /* APU_HAVE_CRYPTO */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_date.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_date.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_date.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,106 @@
+/* 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.
+ */
+
+#ifndef APR_DATE_H
+#define APR_DATE_H
+
+/**
+ * @file apr_date.h
+ * @brief APR-UTIL date routines
+ */
+
+/**
+ * @defgroup APR_Util_Date Date routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+/*
+ * apr_date.h: prototypes for date parsing utility routines
+ */
+
+#include "apu.h"
+#include "apr_time.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** A bad date. */
+#define APR_DATE_BAD ((apr_time_t)0)
+
+/**
+ * Compare a string to a mask
+ * @param data The string to compare
+ * @param mask Mask characters (arbitrary maximum is 256 characters):
+ * <PRE>
+ *   '\@' - uppercase letter
+ *   '\$' - lowercase letter
+ *   '\&' - hex digit
+ *   '#' - digit
+ *   '~' - digit or space
+ *   '*' - swallow remaining characters
+ * </PRE>
+ * @remark The mask tests for an exact match for any other character
+ * @return 1 if the string matches, 0 otherwise
+ */
+APU_DECLARE(int) apr_date_checkmask(const char *data, const char *mask);
+
+/**
+ * Parses an HTTP date in one of three standard forms:
+ * <PRE>
+ *     Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
+ *     Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
+ *     Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
+ * </PRE>
+ * @param date The date in one of the three formats above
+ * @return the apr_time_t number of microseconds since 1 Jan 1970 GMT, or
+ *         0 if this would be out of range or if the date is invalid.
+ */
+APU_DECLARE(apr_time_t) apr_date_parse_http(const char *date);
+
+/**
+ * Parses a string resembling an RFC 822 date.  This is meant to be
+ * leinent in its parsing of dates.  Hence, this will parse a wider 
+ * range of dates than apr_date_parse_http.
+ *
+ * The prominent mailer (or poster, if mailer is unknown) that has
+ * been seen in the wild is included for the unknown formats.
+ * <PRE>
+ *     Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
+ *     Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
+ *     Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
+ *     Sun, 6 Nov 1994 08:49:37 GMT   ; RFC 822, updated by RFC 1123
+ *     Sun, 06 Nov 94 08:49:37 GMT    ; RFC 822
+ *     Sun, 6 Nov 94 08:49:37 GMT     ; RFC 822
+ *     Sun, 06 Nov 94 08:49 GMT       ; Unknown [drtr\@ast.cam.ac.uk] 
+ *     Sun, 6 Nov 94 08:49 GMT        ; Unknown [drtr\@ast.cam.ac.uk]
+ *     Sun, 06 Nov 94 8:49:37 GMT     ; Unknown [Elm 70.85]
+ *     Sun, 6 Nov 94 8:49:37 GMT      ; Unknown [Elm 70.85] 
+ * </PRE>
+ *
+ * @param date The date in one of the formats above
+ * @return the apr_time_t number of microseconds since 1 Jan 1970 GMT, or
+ *         0 if this would be out of range or if the date is invalid.
+ */
+APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* !APR_DATE_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbd.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbd.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbd.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,552 @@
+/* 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.
+ */
+
+/* Overview of what this is and does:
+ * http://www.apache.org/~niq/dbd.html
+ */
+
+#ifndef APR_DBD_H
+#define APR_DBD_H
+
+#include "apu.h"
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file apr_dbd.h
+ * @brief APR-UTIL DBD library
+ */
+/**
+ * @defgroup APR_Util_DBD DBD routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+/**
+ * Mapping of C to SQL types, used for prepared statements.
+ * @remarks
+ * For apr_dbd_p[v]query/select functions, in and out parameters are always
+ * const char * (i.e. regular nul terminated strings). LOB types are passed
+ * with four (4) arguments: payload, length, table and column, all as const
+ * char *, where table and column are reserved for future use by Oracle.
+ * @remarks
+ * For apr_dbd_p[v]bquery/select functions, in and out parameters are
+ * described next to each enumeration constant and are generally native binary
+ * types or some APR data type. LOB types are passed with four (4) arguments:
+ * payload (char*), length (apr_size_t*), table (char*) and column (char*).
+ * Table and column are reserved for future use by Oracle.
+ */
+typedef enum {
+    APR_DBD_TYPE_NONE,
+    APR_DBD_TYPE_TINY,       /**< \%hhd : in, out: char* */
+    APR_DBD_TYPE_UTINY,      /**< \%hhu : in, out: unsigned char* */
+    APR_DBD_TYPE_SHORT,      /**< \%hd  : in, out: short* */
+    APR_DBD_TYPE_USHORT,     /**< \%hu  : in, out: unsigned short* */
+    APR_DBD_TYPE_INT,        /**< \%d   : in, out: int* */
+    APR_DBD_TYPE_UINT,       /**< \%u   : in, out: unsigned int* */
+    APR_DBD_TYPE_LONG,       /**< \%ld  : in, out: long* */
+    APR_DBD_TYPE_ULONG,      /**< \%lu  : in, out: unsigned long* */
+    APR_DBD_TYPE_LONGLONG,   /**< \%lld : in, out: apr_int64_t* */
+    APR_DBD_TYPE_ULONGLONG,  /**< \%llu : in, out: apr_uint64_t* */
+    APR_DBD_TYPE_FLOAT,      /**< \%f   : in, out: float* */
+    APR_DBD_TYPE_DOUBLE,     /**< \%lf  : in, out: double* */
+    APR_DBD_TYPE_STRING,     /**< \%s   : in: char*, out: char** */
+    APR_DBD_TYPE_TEXT,       /**< \%pDt : in: char*, out: char** */
+    APR_DBD_TYPE_TIME,       /**< \%pDi : in: char*, out: char** */
+    APR_DBD_TYPE_DATE,       /**< \%pDd : in: char*, out: char** */
+    APR_DBD_TYPE_DATETIME,   /**< \%pDa : in: char*, out: char** */
+    APR_DBD_TYPE_TIMESTAMP,  /**< \%pDs : in: char*, out: char** */
+    APR_DBD_TYPE_ZTIMESTAMP, /**< \%pDz : in: char*, out: char** */
+    APR_DBD_TYPE_BLOB,       /**< \%pDb : in: char* apr_size_t* char* char*, out: apr_bucket_brigade* */
+    APR_DBD_TYPE_CLOB,       /**< \%pDc : in: char* apr_size_t* char* char*, out: apr_bucket_brigade* */
+    APR_DBD_TYPE_NULL        /**< \%pDn : in: void*, out: void** */
+} apr_dbd_type_e;
+
+/* These are opaque structs.  Instantiation is up to each backend */
+typedef struct apr_dbd_driver_t apr_dbd_driver_t;
+typedef struct apr_dbd_t apr_dbd_t;
+typedef struct apr_dbd_transaction_t apr_dbd_transaction_t;
+typedef struct apr_dbd_results_t apr_dbd_results_t;
+typedef struct apr_dbd_row_t apr_dbd_row_t;
+typedef struct apr_dbd_prepared_t apr_dbd_prepared_t;
+
+/** apr_dbd_init: perform once-only initialisation.  Call once only.
+ *
+ *  @param pool - pool to register any shutdown cleanups, etc
+ */
+APU_DECLARE(apr_status_t) apr_dbd_init(apr_pool_t *pool);
+
+/** apr_dbd_get_driver: get the driver struct for a name
+ *
+ *  @param pool - (process) pool to register cleanup
+ *  @param name - driver name
+ *  @param driver - pointer to driver struct.
+ *  @return APR_SUCCESS for success
+ *  @return APR_ENOTIMPL for no driver (when DSO not enabled)
+ *  @return APR_EDSOOPEN if DSO driver file can't be opened
+ *  @return APR_ESYMNOTFOUND if the driver file doesn't contain a driver
+ */
+APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name,
+                                             const apr_dbd_driver_t **driver);
+
+/** apr_dbd_open_ex: open a connection to a backend
+ *
+ *  @param pool - working pool
+ *  @param params - arguments to driver (implementation-dependent)
+ *  @param handle - pointer to handle to return
+ *  @param driver - driver struct.
+ *  @param error - descriptive error.
+ *  @return APR_SUCCESS for success
+ *  @return APR_EGENERAL if driver exists but connection failed
+ *  @remarks PostgreSQL: the params is passed directly to the PQconnectdb()
+ *  function (check PostgreSQL documentation for more details on the syntax).
+ *  @remarks SQLite2: the params is split on a colon, with the first part used
+ *  as the filename and second part converted to an integer and used as file
+ *  mode.
+ *  @remarks SQLite3: the params is passed directly to the sqlite3_open()
+ *  function as a filename to be opened (check SQLite3 documentation for more
+ *  details).
+ *  @remarks Oracle: the params can have "user", "pass", "dbname" and "server"
+ *  keys, each followed by an equal sign and a value. Such key/value pairs can
+ *  be delimited by space, CR, LF, tab, semicolon, vertical bar or comma.
+ *  @remarks MySQL: the params can have "host", "port", "user", "pass",
+ *  "dbname", "sock", "flags" "fldsz", "group" and "reconnect" keys, each
+ *  followed by an equal sign and a value. Such key/value pairs can be
+ *  delimited by space, CR, LF, tab, semicolon, vertical bar or comma. For
+ *  now, "flags" can only recognise CLIENT_FOUND_ROWS (check MySQL manual for
+ *  details). The value associated with "fldsz" determines maximum amount of
+ *  memory (in bytes) for each of the fields in the result set of prepared
+ *  statements. By default, this value is 1 MB. The value associated with
+ *  "group" determines which group from configuration file to use (see
+ *  MYSQL_READ_DEFAULT_GROUP option of mysql_options() in MySQL manual).
+ *  Reconnect is set to 1 by default (i.e. true).
+ *  @remarks FreeTDS: the params can have "username", "password", "appname",
+ *  "dbname", "host", "charset", "lang" and "server" keys, each followed by an
+ *  equal sign and a value.
+ */
+APU_DECLARE(apr_status_t) apr_dbd_open_ex(const apr_dbd_driver_t *driver,
+                                          apr_pool_t *pool, const char *params,
+                                          apr_dbd_t **handle,
+                                          const char **error);
+
+/** apr_dbd_open: open a connection to a backend
+ *
+ *  @param pool - working pool
+ *  @param params - arguments to driver (implementation-dependent)
+ *  @param handle - pointer to handle to return
+ *  @param driver - driver struct.
+ *  @return APR_SUCCESS for success
+ *  @return APR_EGENERAL if driver exists but connection failed
+ *  @see apr_dbd_open_ex
+ */
+APU_DECLARE(apr_status_t) apr_dbd_open(const apr_dbd_driver_t *driver,
+                                       apr_pool_t *pool, const char *params,
+                                       apr_dbd_t **handle);
+
+/** apr_dbd_close: close a connection to a backend
+ *
+ *  @param handle - handle to close
+ *  @param driver - driver struct.
+ *  @return APR_SUCCESS for success or error status
+ */
+APU_DECLARE(apr_status_t) apr_dbd_close(const apr_dbd_driver_t *driver,
+                                        apr_dbd_t *handle);
+
+/* apr-function-shaped versions of things */
+
+/** apr_dbd_name: get the name of the driver
+ *
+ *  @param driver - the driver
+ *  @return - name
+ */
+APU_DECLARE(const char*) apr_dbd_name(const apr_dbd_driver_t *driver);
+
+/** apr_dbd_native_handle: get native database handle of the underlying db
+ *
+ *  @param driver - the driver
+ *  @param handle - apr_dbd handle
+ *  @return - native handle
+ */
+APU_DECLARE(void*) apr_dbd_native_handle(const apr_dbd_driver_t *driver,
+                                         apr_dbd_t *handle);
+
+/** check_conn: check status of a database connection
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection to check
+ *  @return APR_SUCCESS or error
+ */
+APU_DECLARE(int) apr_dbd_check_conn(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                    apr_dbd_t *handle);
+
+/** apr_dbd_set_dbname: select database name.  May be a no-op if not supported.
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param name - the database to select
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_set_dbname(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                    apr_dbd_t *handle, const char *name);
+
+/** apr_dbd_transaction_start: start a transaction.  May be a no-op.
+ *
+ *  @param driver - the driver
+ *  @param pool - a pool to use for error messages (if any).
+ *  @param handle - the db connection
+ *  @param trans - ptr to a transaction.  May be null on entry
+ *  @return 0 for success or error code
+ *  @remarks Note that transaction modes, set by calling
+ *  apr_dbd_transaction_mode_set(), will affect all query/select calls within
+ *  a transaction. By default, any error in query/select during a transaction
+ *  will cause the transaction to inherit the error code and any further
+ *  query/select calls will fail immediately. Put transaction in "ignore
+ *  errors" mode to avoid that. Use "rollback" mode to do explicit rollback.
+ */
+APU_DECLARE(int) apr_dbd_transaction_start(const apr_dbd_driver_t *driver,
+                                           apr_pool_t *pool,
+                                           apr_dbd_t *handle,
+                                           apr_dbd_transaction_t **trans);
+
+/** apr_dbd_transaction_end: end a transaction
+ *  (commit on success, rollback on error).
+ *  May be a no-op.
+ *
+ *  @param driver - the driver
+ *  @param handle - the db connection
+ *  @param trans - the transaction.
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_transaction_end(const apr_dbd_driver_t *driver,
+                                         apr_pool_t *pool,
+                                         apr_dbd_transaction_t *trans);
+
+#define APR_DBD_TRANSACTION_COMMIT        0x00  /**< commit the transaction */
+#define APR_DBD_TRANSACTION_ROLLBACK      0x01  /**< rollback the transaction */
+#define APR_DBD_TRANSACTION_IGNORE_ERRORS 0x02  /**< ignore transaction errors */
+
+/** apr_dbd_transaction_mode_get: get the mode of transaction
+ *
+ *  @param driver - the driver
+ *  @param trans  - the transaction
+ *  @return mode of transaction
+ */
+APU_DECLARE(int) apr_dbd_transaction_mode_get(const apr_dbd_driver_t *driver,
+                                              apr_dbd_transaction_t *trans);
+
+/** apr_dbd_transaction_mode_set: set the mode of transaction
+ *
+ *  @param driver - the driver
+ *  @param trans  - the transaction
+ *  @param mode   - new mode of the transaction
+ *  @return the mode of transaction in force after the call
+ */
+APU_DECLARE(int) apr_dbd_transaction_mode_set(const apr_dbd_driver_t *driver,
+                                              apr_dbd_transaction_t *trans,
+                                              int mode);
+
+/** apr_dbd_query: execute an SQL query that doesn't return a result set
+ *
+ *  @param driver - the driver
+ *  @param handle - the connection
+ *  @param nrows - number of rows affected.
+ *  @param statement - the SQL statement to execute
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_query(const apr_dbd_driver_t *driver, apr_dbd_t *handle,
+                               int *nrows, const char *statement);
+
+/** apr_dbd_select: execute an SQL query that returns a result set
+ *
+ *  @param driver - the driver
+ *  @param pool - pool to allocate the result set
+ *  @param handle - the connection
+ *  @param res - pointer to result set pointer.  May point to NULL on entry
+ *  @param statement - the SQL statement to execute
+ *  @param random - 1 to support random access to results (seek any row);
+ *                  0 to support only looping through results in order
+ *                    (async access - faster)
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_select(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                apr_dbd_t *handle, apr_dbd_results_t **res,
+                                const char *statement, int random);
+
+/** apr_dbd_num_cols: get the number of columns in a results set
+ *
+ *  @param driver - the driver
+ *  @param res - result set.
+ *  @return number of columns
+ */
+APU_DECLARE(int) apr_dbd_num_cols(const apr_dbd_driver_t *driver,
+                                  apr_dbd_results_t *res);
+
+/** apr_dbd_num_tuples: get the number of rows in a results set
+ *  of a synchronous select
+ *
+ *  @param driver - the driver
+ *  @param res - result set.
+ *  @return number of rows, or -1 if the results are asynchronous
+ */
+APU_DECLARE(int) apr_dbd_num_tuples(const apr_dbd_driver_t *driver,
+                                    apr_dbd_results_t *res);
+
+/** apr_dbd_get_row: get a row from a result set
+ *
+ *  @param driver - the driver
+ *  @param pool - pool to allocate the row
+ *  @param res - result set pointer
+ *  @param row - pointer to row pointer.  May point to NULL on entry
+ *  @param rownum - row number (counting from 1), or -1 for "next row".
+ *                  Ignored if random access is not supported.
+ *  @return 0 for success, -1 for rownum out of range or data finished
+ */
+APU_DECLARE(int) apr_dbd_get_row(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                 apr_dbd_results_t *res, apr_dbd_row_t **row,
+                                 int rownum);
+
+/** apr_dbd_get_entry: get an entry from a row
+ *
+ *  @param driver - the driver
+ *  @param row - row pointer
+ *  @param col - entry number
+ *  @return value from the row, or NULL if col is out of bounds.
+ */
+APU_DECLARE(const char*) apr_dbd_get_entry(const apr_dbd_driver_t *driver,
+                                           apr_dbd_row_t *row, int col);
+
+/** apr_dbd_get_name: get an entry name from a result set
+ *
+ *  @param driver - the driver
+ *  @param res - result set pointer
+ *  @param col - entry number
+ *  @return name of the entry, or NULL if col is out of bounds.
+ */
+APU_DECLARE(const char*) apr_dbd_get_name(const apr_dbd_driver_t *driver,
+                                          apr_dbd_results_t *res, int col);
+
+
+/** apr_dbd_error: get current error message (if any)
+ *
+ *  @param driver - the driver
+ *  @param handle - the connection
+ *  @param errnum - error code from operation that returned an error
+ *  @return the database current error message, or message for errnum
+ *          (implementation-dependent whether errnum is ignored)
+ */
+APU_DECLARE(const char*) apr_dbd_error(const apr_dbd_driver_t *driver,
+                                       apr_dbd_t *handle, int errnum);
+
+/** apr_dbd_escape: escape a string so it is safe for use in query/select
+ *
+ *  @param driver - the driver
+ *  @param pool - pool to alloc the result from
+ *  @param string - the string to escape
+ *  @param handle - the connection
+ *  @return the escaped, safe string
+ */
+APU_DECLARE(const char*) apr_dbd_escape(const apr_dbd_driver_t *driver,
+                                        apr_pool_t *pool, const char *string,
+                                        apr_dbd_t *handle);
+
+/** apr_dbd_prepare: prepare a statement
+ *
+ *  @param driver - the driver
+ *  @param pool - pool to alloc the result from
+ *  @param handle - the connection
+ *  @param query - the SQL query
+ *  @param label - A label for the prepared statement.
+ *                 use NULL for temporary prepared statements
+ *                 (eg within a Request in httpd)
+ *  @param statement - statement to prepare.  May point to null on entry.
+ *  @return 0 for success or error code
+ *  @remarks To specify parameters of the prepared query, use \%s, \%d etc.
+ *  (see below for full list) in place of database specific parameter syntax
+ *  (e.g.  for PostgreSQL, this would be $1, $2, for SQLite3 this would be ?
+ *  etc.).  For instance: "SELECT name FROM customers WHERE name=%s" would be
+ *  a query that this function understands.
+ *  @remarks Here is the full list of format specifiers that this function
+ *  understands and what they map to in SQL: \%hhd (TINY INT), \%hhu (UNSIGNED
+ *  TINY INT), \%hd (SHORT), \%hu (UNSIGNED SHORT), \%d (INT), \%u (UNSIGNED
+ *  INT), \%ld (LONG), \%lu (UNSIGNED LONG), \%lld (LONG LONG), \%llu
+ *  (UNSIGNED LONG LONG), \%f (FLOAT, REAL), \%lf (DOUBLE PRECISION), \%s
+ *  (VARCHAR), \%pDt (TEXT), \%pDi (TIME), \%pDd (DATE), \%pDa (DATETIME),
+ *  \%pDs (TIMESTAMP), \%pDz (TIMESTAMP WITH TIME ZONE), \%pDb (BLOB), \%pDc
+ *  (CLOB) and \%pDn (NULL). Not all databases have support for all these
+ *  types, so the underlying driver will attempt the "best match" where
+ *  possible. A \% followed by any letter not in the above list will be
+ *  interpreted as VARCHAR (i.e. \%s).
+ */
+APU_DECLARE(int) apr_dbd_prepare(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                 apr_dbd_t *handle, const char *query,
+                                 const char *label,
+                                 apr_dbd_prepared_t **statement);
+
+
+/** apr_dbd_pquery: query using a prepared statement + args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param nrows - number of rows affected.
+ *  @param statement - the prepared statement to execute
+ *  @param nargs - ignored (for backward compatibility only)
+ *  @param args - args to prepared statement
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_pquery(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                apr_dbd_t *handle, int *nrows,
+                                apr_dbd_prepared_t *statement, int nargs,
+                                const char **args);
+
+/** apr_dbd_pselect: select using a prepared statement + args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param res - pointer to query results.  May point to NULL on entry
+ *  @param statement - the prepared statement to execute
+ *  @param random - Whether to support random-access to results
+ *  @param nargs - ignored (for backward compatibility only)
+ *  @param args - args to prepared statement
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_pselect(const apr_dbd_driver_t *driver, apr_pool_t *pool,
+                                 apr_dbd_t *handle, apr_dbd_results_t **res,
+                                 apr_dbd_prepared_t *statement, int random,
+                                 int nargs, const char **args);
+
+/** apr_dbd_pvquery: query using a prepared statement + args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param nrows - number of rows affected.
+ *  @param statement - the prepared statement to execute
+ *  @param ... - varargs list
+ *  @return 0 for success or error code
+ */
+APU_DECLARE_NONSTD(int) apr_dbd_pvquery(const apr_dbd_driver_t *driver, 
+                                        apr_pool_t *pool,
+                                        apr_dbd_t *handle, int *nrows,
+                                        apr_dbd_prepared_t *statement, ...);
+
+/** apr_dbd_pvselect: select using a prepared statement + args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param res - pointer to query results.  May point to NULL on entry
+ *  @param statement - the prepared statement to execute
+ *  @param random - Whether to support random-access to results
+ *  @param ... - varargs list
+ *  @return 0 for success or error code
+ */
+APU_DECLARE_NONSTD(int) apr_dbd_pvselect(const apr_dbd_driver_t *driver,
+                                         apr_pool_t *pool, apr_dbd_t *handle,
+                                         apr_dbd_results_t **res,
+                                         apr_dbd_prepared_t *statement,
+                                         int random, ...);
+
+/** apr_dbd_pbquery: query using a prepared statement + binary args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param nrows - number of rows affected.
+ *  @param statement - the prepared statement to execute
+ *  @param args - binary args to prepared statement
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_pbquery(const apr_dbd_driver_t *driver,
+                                 apr_pool_t *pool, apr_dbd_t *handle,
+                                 int *nrows, apr_dbd_prepared_t *statement,
+                                 const void **args);
+
+/** apr_dbd_pbselect: select using a prepared statement + binary args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param res - pointer to query results.  May point to NULL on entry
+ *  @param statement - the prepared statement to execute
+ *  @param random - Whether to support random-access to results
+ *  @param args - binary args to prepared statement
+ *  @return 0 for success or error code
+ */
+APU_DECLARE(int) apr_dbd_pbselect(const apr_dbd_driver_t *driver,
+                                  apr_pool_t *pool,
+                                  apr_dbd_t *handle, apr_dbd_results_t **res,
+                                  apr_dbd_prepared_t *statement, int random,
+                                  const void **args);
+
+/** apr_dbd_pvbquery: query using a prepared statement + binary args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param nrows - number of rows affected.
+ *  @param statement - the prepared statement to execute
+ *  @param ... - varargs list of binary args
+ *  @return 0 for success or error code
+ */
+APU_DECLARE_NONSTD(int) apr_dbd_pvbquery(const apr_dbd_driver_t *driver,
+                                         apr_pool_t *pool,
+                                         apr_dbd_t *handle, int *nrows,
+                                         apr_dbd_prepared_t *statement, ...);
+
+/** apr_dbd_pvbselect: select using a prepared statement + binary args
+ *
+ *  @param driver - the driver
+ *  @param pool - working pool
+ *  @param handle - the connection
+ *  @param res - pointer to query results.  May point to NULL on entry
+ *  @param statement - the prepared statement to execute
+ *  @param random - Whether to support random-access to results
+ *  @param ... - varargs list of binary args
+ *  @return 0 for success or error code
+ */
+APU_DECLARE_NONSTD(int) apr_dbd_pvbselect(const apr_dbd_driver_t *driver,
+                                          apr_pool_t *pool, apr_dbd_t *handle,
+                                          apr_dbd_results_t **res,
+                                          apr_dbd_prepared_t *statement,
+                                          int random, ...);
+
+/** apr_dbd_datum_get: get a binary entry from a row
+ *
+ *  @param driver - the driver
+ *  @param row - row pointer
+ *  @param col - entry number
+ *  @param type - type of data to get
+ *  @param data - pointer to data, allocated by the caller
+ *  @return APR_SUCCESS on success, APR_ENOENT if data is NULL or APR_EGENERAL
+ */
+APU_DECLARE(apr_status_t) apr_dbd_datum_get(const apr_dbd_driver_t *driver,
+                                            apr_dbd_row_t *row, int col,
+                                            apr_dbd_type_e type, void *data);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbm.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbm.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dbm.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,227 @@
+/* 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.
+ */
+
+#ifndef APR_DBM_H
+#define APR_DBM_H
+
+#include "apu.h"
+#include "apr.h"
+#include "apr_errno.h"
+#include "apr_pools.h"
+#include "apr_file_info.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file apr_dbm.h
+ * @brief APR-UTIL DBM library
+ */
+/** 
+ * @defgroup APR_Util_DBM DBM routines
+ * @ingroup APR_Util
+ * @{
+ */
+/**
+ * Structure for referencing a dbm
+ */
+typedef struct apr_dbm_t apr_dbm_t;
+
+/**
+ * Structure for referencing the datum record within a dbm
+ */
+typedef struct
+{
+    /** pointer to the 'data' to retrieve/store in the DBM */
+    char *dptr;
+    /** size of the 'data' to retrieve/store in the DBM */
+    apr_size_t dsize;
+} apr_datum_t;
+
+/* modes to open the DB */
+#define APR_DBM_READONLY        1       /**< open for read-only access */
+#define APR_DBM_READWRITE       2       /**< open for read-write access */
+#define APR_DBM_RWCREATE        3       /**< open for r/w, create if needed */
+#define APR_DBM_RWTRUNC         4       /**< open for r/w, truncating an existing
+                                          DB if present */
+/**
+ * Open a dbm file by file name and type of DBM
+ * @param dbm The newly opened database
+ * @param type The type of the DBM (not all may be available at run time)
+ * <pre>
+ *  db   for Berkeley DB files
+ *  gdbm for GDBM files
+ *  ndbm for NDBM files
+ *  sdbm for SDBM files (always available)
+ *  default for the default DBM type
+ *  </pre>
+ * @param name The dbm file name to open
+ * @param mode The flag value
+ * <PRE>
+ *           APR_DBM_READONLY   open for read-only access
+ *           APR_DBM_READWRITE  open for read-write access
+ *           APR_DBM_RWCREATE   open for r/w, create if needed
+ *           APR_DBM_RWTRUNC    open for r/w, truncate if already there
+ * </PRE>
+ * @param perm Permissions to apply to if created
+ * @param cntxt The pool to use when creating the dbm
+ * @remark The dbm name may not be a true file name, as many dbm packages
+ * append suffixes for seperate data and index files.
+ * @bug In apr-util 0.9 and 1.x, the type arg was case insensitive.  This
+ * was highly inefficient, and as of 2.x the dbm name must be provided in
+ * the correct case (lower case for all bundled providers)
+ */
+
+APU_DECLARE(apr_status_t) apr_dbm_open_ex(apr_dbm_t **dbm, const char* type, 
+                                       const char *name, 
+                                       apr_int32_t mode, apr_fileperms_t perm,
+                                       apr_pool_t *cntxt);
+
+
+/**
+ * Open a dbm file by file name
+ * @param dbm The newly opened database
+ * @param name The dbm file name to open
+ * @param mode The flag value
+ * <PRE>
+ *           APR_DBM_READONLY   open for read-only access
+ *           APR_DBM_READWRITE  open for read-write access
+ *           APR_DBM_RWCREATE   open for r/w, create if needed
+ *           APR_DBM_RWTRUNC    open for r/w, truncate if already there
+ * </PRE>
+ * @param perm Permissions to apply to if created
+ * @param cntxt The pool to use when creating the dbm
+ * @remark The dbm name may not be a true file name, as many dbm packages
+ * append suffixes for seperate data and index files.
+ */
+APU_DECLARE(apr_status_t) apr_dbm_open(apr_dbm_t **dbm, const char *name, 
+                                       apr_int32_t mode, apr_fileperms_t perm,
+                                       apr_pool_t *cntxt);
+
+/**
+ * Close a dbm file previously opened by apr_dbm_open
+ * @param dbm The database to close
+ */
+APU_DECLARE(void) apr_dbm_close(apr_dbm_t *dbm);
+
+/**
+ * Fetch a dbm record value by key
+ * @param dbm The database 
+ * @param key The key datum to find this record
+ * @param pvalue The value datum retrieved for this record
+ */
+APU_DECLARE(apr_status_t) apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key,
+                                        apr_datum_t *pvalue);
+/**
+ * Store a dbm record value by key
+ * @param dbm The database 
+ * @param key The key datum to store this record by
+ * @param value The value datum to store in this record
+ */
+APU_DECLARE(apr_status_t) apr_dbm_store(apr_dbm_t *dbm, apr_datum_t key, 
+                                        apr_datum_t value);
+
+/**
+ * Delete a dbm record value by key
+ * @param dbm The database 
+ * @param key The key datum of the record to delete
+ * @remark It is not an error to delete a non-existent record.
+ */
+APU_DECLARE(apr_status_t) apr_dbm_delete(apr_dbm_t *dbm, apr_datum_t key);
+
+/**
+ * Search for a key within the dbm
+ * @param dbm The database 
+ * @param key The datum describing a key to test
+ */
+APU_DECLARE(int) apr_dbm_exists(apr_dbm_t *dbm, apr_datum_t key);
+
+/**
+ * Retrieve the first record key from a dbm
+ * @param dbm The database 
+ * @param pkey The key datum of the first record
+ */
+APU_DECLARE(apr_status_t) apr_dbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey);
+
+/**
+ * Retrieve the next record key from a dbm
+ * @param dbm The database 
+ * @param pkey The key datum of the next record
+ */
+APU_DECLARE(apr_status_t) apr_dbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey);
+
+/**
+ * Proactively toss any memory associated with the apr_datum_t.
+ * @param dbm The database 
+ * @param data The datum to free.
+ */
+APU_DECLARE(void) apr_dbm_freedatum(apr_dbm_t *dbm, apr_datum_t data);
+
+/**
+ * Report more information when an apr_dbm function fails.
+ * @param dbm The database
+ * @param errcode A DBM-specific value for the error (for logging). If this
+ *                isn't needed, it may be NULL.
+ * @param errbuf Location to store the error text
+ * @param errbufsize The size of the provided buffer
+ * @return The errbuf parameter, for convenience.
+ */
+APU_DECLARE(char *) apr_dbm_geterror(apr_dbm_t *dbm, int *errcode,
+                                     char *errbuf, apr_size_t errbufsize);
+/**
+ * If the specified file/path were passed to apr_dbm_open(), return the
+ * actual file/path names which would be (created and) used. At most, two
+ * files may be used; used2 may be NULL if only one file is used.
+ * @param pool The pool for allocating used1 and used2.
+ * @param type The type of DBM you require info on @see apr_dbm_open_ex
+ * @param pathname The path name to generate used-names from.
+ * @param used1 The first pathname used by the apr_dbm implementation.
+ * @param used2 The second pathname used by apr_dbm. If only one file is
+ *              used by the specific implementation, this will be set to NULL.
+ * @return An error if the specified type is invalid.
+ * @remark The dbm file(s) don't need to exist. This function only manipulates
+ *      the pathnames.
+ */
+APU_DECLARE(apr_status_t) apr_dbm_get_usednames_ex(apr_pool_t *pool,
+                                                   const char *type,
+                                                   const char *pathname,
+                                                   const char **used1,
+                                                   const char **used2);
+
+/**
+ * If the specified file/path were passed to apr_dbm_open(), return the
+ * actual file/path names which would be (created and) used. At most, two
+ * files may be used; used2 may be NULL if only one file is used.
+ * @param pool The pool for allocating used1 and used2.
+ * @param pathname The path name to generate used-names from.
+ * @param used1 The first pathname used by the apr_dbm implementation.
+ * @param used2 The second pathname used by apr_dbm. If only one file is
+ *              used by the specific implementation, this will be set to NULL.
+ * @remark The dbm file(s) don't need to exist. This function only manipulates
+ *      the pathnames.
+ */
+APU_DECLARE(void) apr_dbm_get_usednames(apr_pool_t *pool,
+                                        const char *pathname,
+                                        const char **used1,
+                                        const char **used2);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* !APR_DBM_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dso.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dso.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_dso.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,94 @@
+/* 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.
+ */
+
+#ifndef APR_DSO_DOT_H
+#define APR_DSO_DOT_H
+
+/**
+ * @file apr_dso.h
+ * @brief APR Dynamic Object Handling Routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup apr_dso Dynamic Object Handling
+ * @ingroup APR 
+ * @{
+ */
+
+#if APR_HAS_DSO || defined(DOXYGEN)
+
+/**
+ * Structure for referencing dynamic objects
+ */
+typedef struct apr_dso_handle_t       apr_dso_handle_t;
+
+/**
+ * Structure for referencing symbols from dynamic objects
+ */
+typedef void *                        apr_dso_handle_sym_t;
+
+/**
+ * Load a DSO library.
+ * @param res_handle Location to store new handle for the DSO.
+ * @param path Path to the DSO library
+ * @param ctx Pool to use.
+ * @bug We aught to provide an alternative to RTLD_GLOBAL, which
+ * is the only supported method of loading DSOs today.
+ */
+APR_DECLARE(apr_status_t) apr_dso_load(apr_dso_handle_t **res_handle, 
+                                       const char *path, apr_pool_t *ctx);
+
+/**
+ * Close a DSO library.
+ * @param handle handle to close.
+ */
+APR_DECLARE(apr_status_t) apr_dso_unload(apr_dso_handle_t *handle);
+
+/**
+ * Load a symbol from a DSO handle.
+ * @param ressym Location to store the loaded symbol
+ * @param handle handle to load the symbol from.
+ * @param symname Name of the symbol to load.
+ */
+APR_DECLARE(apr_status_t) apr_dso_sym(apr_dso_handle_sym_t *ressym, 
+                                      apr_dso_handle_t *handle,
+                                      const char *symname);
+
+/**
+ * Report more information when a DSO function fails.
+ * @param dso The dso handle that has been opened
+ * @param buf Location to store the dso error
+ * @param bufsize The size of the provided buffer
+ */
+APR_DECLARE(const char *) apr_dso_error(apr_dso_handle_t *dso, char *buf, apr_size_t bufsize);
+
+#endif /* APR_HAS_DSO */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_env.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_env.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_env.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,67 @@
+/* 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.
+ */
+
+#ifndef APR_ENV_H
+#define APR_ENV_H
+/**
+ * @file apr_env.h
+ * @brief APR Environment functions
+ */
+#include "apr_errno.h"
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_env Functions for manipulating the environment
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * Get the value of an environment variable
+ * @param value the returned value, allocated from @a pool
+ * @param envvar the name of the environment variable
+ * @param pool where to allocate @a value and any temporary storage from
+ */
+APR_DECLARE(apr_status_t) apr_env_get(char **value, const char *envvar,
+                                      apr_pool_t *pool);
+
+/**
+ * Set the value of an environment variable
+ * @param envvar the name of the environment variable
+ * @param value the value to set
+ * @param pool where to allocate temporary storage from
+ */
+APR_DECLARE(apr_status_t) apr_env_set(const char *envvar, const char *value,
+                                      apr_pool_t *pool);
+
+/**
+ * Delete a variable from the environment
+ * @param envvar the name of the environment variable
+ * @param pool where to allocate temporary storage from
+ */
+APR_DECLARE(apr_status_t) apr_env_delete(const char *envvar, apr_pool_t *pool);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_ENV_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_errno.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_errno.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_errno.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,1315 @@
+/* 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.
+ */
+
+#ifndef APR_ERRNO_H
+#define APR_ERRNO_H
+
+/**
+ * @file apr_errno.h
+ * @brief APR Error Codes
+ */
+
+#include "apr.h"
+
+#if APR_HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_errno Error Codes
+ * @ingroup APR
+ * @{
+ */
+
+/**
+ * Type for specifying an error or status code.
+ */
+typedef int apr_status_t;
+
+/**
+ * Return a human readable string describing the specified error.
+ * @param statcode The error code the get a string for.
+ * @param buf A buffer to hold the error string.
+ * @param bufsize Size of the buffer to hold the string.
+ */
+APR_DECLARE(char *) apr_strerror(apr_status_t statcode, char *buf,
+                                 apr_size_t bufsize);
+
+#if defined(DOXYGEN)
+/**
+ * @def APR_FROM_OS_ERROR(os_err_type syserr)
+ * Fold a platform specific error into an apr_status_t code.
+ * @return apr_status_t
+ * @param e The platform os error code.
+ * @warning  macro implementation; the syserr argument may be evaluated
+ *      multiple times.
+ */
+#define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR)
+
+/**
+ * @def APR_TO_OS_ERROR(apr_status_t statcode)
+ * @return os_err_type
+ * Fold an apr_status_t code back to the native platform defined error.
+ * @param e The apr_status_t folded platform os error code.
+ * @warning  macro implementation; the statcode argument may be evaluated
+ *      multiple times.  If the statcode was not created by apr_get_os_error
+ *      or APR_FROM_OS_ERROR, the results are undefined.
+ */
+#define APR_TO_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR)
+
+/** @def apr_get_os_error()
+ * @return apr_status_t the last platform error, folded into apr_status_t, on most platforms
+ * @remark This retrieves errno, or calls a GetLastError() style function, and
+ *      folds it with APR_FROM_OS_ERROR.  Some platforms (such as OS2) have no
+ *      such mechanism, so this call may be unsupported.  Do NOT use this
+ *      call for socket errors from socket, send, recv etc!
+ */
+
+/** @def apr_set_os_error(e)
+ * Reset the last platform error, unfolded from an apr_status_t, on some platforms
+ * @param e The OS error folded in a prior call to APR_FROM_OS_ERROR()
+ * @warning This is a macro implementation; the statcode argument may be evaluated
+ *      multiple times.  If the statcode was not created by apr_get_os_error
+ *      or APR_FROM_OS_ERROR, the results are undefined.  This macro sets
+ *      errno, or calls a SetLastError() style function, unfolding statcode
+ *      with APR_TO_OS_ERROR.  Some platforms (such as OS2) have no such
+ *      mechanism, so this call may be unsupported.
+ */
+
+/** @def apr_get_netos_error()
+ * Return the last socket error, folded into apr_status_t, on all platforms
+ * @remark This retrieves errno or calls a GetLastSocketError() style function,
+ *      and folds it with APR_FROM_OS_ERROR.
+ */
+
+/** @def apr_set_netos_error(e)
+ * Reset the last socket error, unfolded from an apr_status_t
+ * @param e The socket error folded in a prior call to APR_FROM_OS_ERROR()
+ * @warning This is a macro implementation; the statcode argument may be evaluated
+ *      multiple times.  If the statcode was not created by apr_get_os_error
+ *      or APR_FROM_OS_ERROR, the results are undefined.  This macro sets
+ *      errno, or calls a WSASetLastError() style function, unfolding
+ *      socketcode with APR_TO_OS_ERROR.
+ */
+
+#endif /* defined(DOXYGEN) */
+
+/**
+ * APR_OS_START_ERROR is where the APR specific error values start.
+ */
+#define APR_OS_START_ERROR     20000
+/**
+ * APR_OS_ERRSPACE_SIZE is the maximum number of errors you can fit
+ *    into one of the error/status ranges below -- except for
+ *    APR_OS_START_USERERR, which see.
+ */
+#define APR_OS_ERRSPACE_SIZE 50000
+/**
+ * APR_UTIL_ERRSPACE_SIZE is the size of the space that is reserved for
+ * use within apr-util. This space is reserved above that used by APR
+ * internally.
+ * @note This number MUST be smaller than APR_OS_ERRSPACE_SIZE by a
+ *       large enough amount that APR has sufficient room for it's
+ *       codes.
+ */
+#define APR_UTIL_ERRSPACE_SIZE 20000
+/**
+ * APR_OS_START_STATUS is where the APR specific status codes start.
+ */
+#define APR_OS_START_STATUS    (APR_OS_START_ERROR + APR_OS_ERRSPACE_SIZE)
+/**
+ * APR_UTIL_START_STATUS is where APR-Util starts defining it's
+ * status codes.
+ */
+#define APR_UTIL_START_STATUS   (APR_OS_START_STATUS + \
+                           (APR_OS_ERRSPACE_SIZE - APR_UTIL_ERRSPACE_SIZE))
+/**
+ * APR_OS_START_USERERR are reserved for applications that use APR that
+ *     layer their own error codes along with APR's.  Note that the
+ *     error immediately following this one is set ten times farther
+ *     away than usual, so that users of apr have a lot of room in
+ *     which to declare custom error codes.
+ *
+ * In general applications should try and create unique error codes. To try
+ * and assist in finding suitable ranges of numbers to use, the following
+ * ranges are known to be used by the listed applications. If your
+ * application defines error codes please advise the range of numbers it
+ * uses to dev at apr.apache.org for inclusion in this list.
+ *
+ * Ranges shown are in relation to APR_OS_START_USERERR
+ *
+ * Subversion - Defined ranges, of less than 100, at intervals of 5000
+ *              starting at an offset of 5000, e.g.
+ *               +5000 to 5100,  +10000 to 10100
+ *
+ * Apache HTTPD - +2000 to 2999
+ */
+#define APR_OS_START_USERERR    (APR_OS_START_STATUS + APR_OS_ERRSPACE_SIZE)
+/**
+ * APR_OS_START_USEERR is obsolete, defined for compatibility only.
+ * Use APR_OS_START_USERERR instead.
+ */
+#define APR_OS_START_USEERR     APR_OS_START_USERERR
+/**
+ * APR_OS_START_CANONERR is where APR versions of errno values are defined
+ *     on systems which don't have the corresponding errno.
+ */
+#define APR_OS_START_CANONERR  (APR_OS_START_USERERR \
+                                 + (APR_OS_ERRSPACE_SIZE * 10))
+/**
+ * APR_OS_START_EAIERR folds EAI_ error codes from getaddrinfo() into
+ *     apr_status_t values.
+ */
+#define APR_OS_START_EAIERR    (APR_OS_START_CANONERR + APR_OS_ERRSPACE_SIZE)
+/**
+ * APR_OS_START_SYSERR folds platform-specific system error values into
+ *     apr_status_t values.
+ */
+#define APR_OS_START_SYSERR    (APR_OS_START_EAIERR + APR_OS_ERRSPACE_SIZE)
+
+/**
+ * @defgroup APR_ERROR_map APR Error Space
+ * <PRE>
+ * The following attempts to show the relation of the various constants
+ * used for mapping APR Status codes.
+ *
+ *       0
+ *
+ *  20,000     APR_OS_START_ERROR
+ *
+ *         + APR_OS_ERRSPACE_SIZE (50,000)
+ *
+ *  70,000      APR_OS_START_STATUS
+ *
+ *         + APR_OS_ERRSPACE_SIZE - APR_UTIL_ERRSPACE_SIZE (30,000)
+ *
+ * 100,000      APR_UTIL_START_STATUS
+ *
+ *         + APR_UTIL_ERRSPACE_SIZE (20,000)
+ *
+ * 120,000      APR_OS_START_USERERR
+ *
+ *         + 10 x APR_OS_ERRSPACE_SIZE (50,000 * 10)
+ *
+ * 620,000      APR_OS_START_CANONERR
+ *
+ *         + APR_OS_ERRSPACE_SIZE (50,000)
+ *
+ * 670,000      APR_OS_START_EAIERR
+ *
+ *         + APR_OS_ERRSPACE_SIZE (50,000)
+ *
+ * 720,000      APR_OS_START_SYSERR
+ *
+ * </PRE>
+ */
+
+/** no error. */
+#define APR_SUCCESS 0
+
+/**
+ * @defgroup APR_Error APR Error Values
+ * <PRE>
+ * <b>APR ERROR VALUES</b>
+ * APR_ENOSTAT      APR was unable to perform a stat on the file
+ * APR_ENOPOOL      APR was not provided a pool with which to allocate memory
+ * APR_EBADDATE     APR was given an invalid date
+ * APR_EINVALSOCK   APR was given an invalid socket
+ * APR_ENOPROC      APR was not given a process structure
+ * APR_ENOTIME      APR was not given a time structure
+ * APR_ENODIR       APR was not given a directory structure
+ * APR_ENOLOCK      APR was not given a lock structure
+ * APR_ENOPOLL      APR was not given a poll structure
+ * APR_ENOSOCKET    APR was not given a socket
+ * APR_ENOTHREAD    APR was not given a thread structure
+ * APR_ENOTHDKEY    APR was not given a thread key structure
+ * APR_ENOSHMAVAIL  There is no more shared memory available
+ * APR_EDSOOPEN     APR was unable to open the dso object.  For more
+ *                  information call apr_dso_error().
+ * APR_EGENERAL     General failure (specific information not available)
+ * APR_EBADIP       The specified IP address is invalid
+ * APR_EBADMASK     The specified netmask is invalid
+ * APR_ESYMNOTFOUND Could not find the requested symbol
+ * APR_ENOTENOUGHENTROPY Not enough entropy to continue
+ * </PRE>
+ *
+ * <PRE>
+ * <b>APR STATUS VALUES</b>
+ * APR_INCHILD        Program is currently executing in the child
+ * APR_INPARENT       Program is currently executing in the parent
+ * APR_DETACH         The thread is detached
+ * APR_NOTDETACH      The thread is not detached
+ * APR_CHILD_DONE     The child has finished executing
+ * APR_CHILD_NOTDONE  The child has not finished executing
+ * APR_TIMEUP         The operation did not finish before the timeout
+ * APR_INCOMPLETE     The operation was incomplete although some processing
+ *                    was performed and the results are partially valid
+ * APR_BADCH          Getopt found an option not in the option string
+ * APR_BADARG         Getopt found an option that is missing an argument
+ *                    and an argument was specified in the option string
+ * APR_EOF            APR has encountered the end of the file
+ * APR_NOTFOUND       APR was unable to find the socket in the poll structure
+ * APR_ANONYMOUS      APR is using anonymous shared memory
+ * APR_FILEBASED      APR is using a file name as the key to the shared memory
+ * APR_KEYBASED       APR is using a shared key as the key to the shared memory
+ * APR_EINIT          Ininitalizer value.  If no option has been found, but
+ *                    the status variable requires a value, this should be used
+ * APR_ENOTIMPL       The APR function has not been implemented on this
+ *                    platform, either because nobody has gotten to it yet,
+ *                    or the function is impossible on this platform.
+ * APR_EMISMATCH      Two passwords do not match.
+ * APR_EABSOLUTE      The given path was absolute.
+ * APR_ERELATIVE      The given path was relative.
+ * APR_EINCOMPLETE    The given path was neither relative nor absolute.
+ * APR_EABOVEROOT     The given path was above the root path.
+ * APR_EBUSY          The given lock was busy.
+ * APR_EPROC_UNKNOWN  The given process wasn't recognized by APR
+ * </PRE>
+ * @{
+ */
+/** @see APR_STATUS_IS_ENOSTAT */
+#define APR_ENOSTAT        (APR_OS_START_ERROR + 1)
+/** @see APR_STATUS_IS_ENOPOOL */
+#define APR_ENOPOOL        (APR_OS_START_ERROR + 2)
+/* empty slot: +3 */
+/** @see APR_STATUS_IS_EBADDATE */
+#define APR_EBADDATE       (APR_OS_START_ERROR + 4)
+/** @see APR_STATUS_IS_EINVALSOCK */
+#define APR_EINVALSOCK     (APR_OS_START_ERROR + 5)
+/** @see APR_STATUS_IS_ENOPROC */
+#define APR_ENOPROC        (APR_OS_START_ERROR + 6)
+/** @see APR_STATUS_IS_ENOTIME */
+#define APR_ENOTIME        (APR_OS_START_ERROR + 7)
+/** @see APR_STATUS_IS_ENODIR */
+#define APR_ENODIR         (APR_OS_START_ERROR + 8)
+/** @see APR_STATUS_IS_ENOLOCK */
+#define APR_ENOLOCK        (APR_OS_START_ERROR + 9)
+/** @see APR_STATUS_IS_ENOPOLL */
+#define APR_ENOPOLL        (APR_OS_START_ERROR + 10)
+/** @see APR_STATUS_IS_ENOSOCKET */
+#define APR_ENOSOCKET      (APR_OS_START_ERROR + 11)
+/** @see APR_STATUS_IS_ENOTHREAD */
+#define APR_ENOTHREAD      (APR_OS_START_ERROR + 12)
+/** @see APR_STATUS_IS_ENOTHDKEY */
+#define APR_ENOTHDKEY      (APR_OS_START_ERROR + 13)
+/** @see APR_STATUS_IS_EGENERAL */
+#define APR_EGENERAL       (APR_OS_START_ERROR + 14)
+/** @see APR_STATUS_IS_ENOSHMAVAIL */
+#define APR_ENOSHMAVAIL    (APR_OS_START_ERROR + 15)
+/** @see APR_STATUS_IS_EBADIP */
+#define APR_EBADIP         (APR_OS_START_ERROR + 16)
+/** @see APR_STATUS_IS_EBADMASK */
+#define APR_EBADMASK       (APR_OS_START_ERROR + 17)
+/* empty slot: +18 */
+/** @see APR_STATUS_IS_EDSOPEN */
+#define APR_EDSOOPEN       (APR_OS_START_ERROR + 19)
+/** @see APR_STATUS_IS_EABSOLUTE */
+#define APR_EABSOLUTE      (APR_OS_START_ERROR + 20)
+/** @see APR_STATUS_IS_ERELATIVE */
+#define APR_ERELATIVE      (APR_OS_START_ERROR + 21)
+/** @see APR_STATUS_IS_EINCOMPLETE */
+#define APR_EINCOMPLETE    (APR_OS_START_ERROR + 22)
+/** @see APR_STATUS_IS_EABOVEROOT */
+#define APR_EABOVEROOT     (APR_OS_START_ERROR + 23)
+/** @see APR_STATUS_IS_EBADPATH */
+#define APR_EBADPATH       (APR_OS_START_ERROR + 24)
+/** @see APR_STATUS_IS_EPATHWILD */
+#define APR_EPATHWILD      (APR_OS_START_ERROR + 25)
+/** @see APR_STATUS_IS_ESYMNOTFOUND */
+#define APR_ESYMNOTFOUND   (APR_OS_START_ERROR + 26)
+/** @see APR_STATUS_IS_EPROC_UNKNOWN */
+#define APR_EPROC_UNKNOWN  (APR_OS_START_ERROR + 27)
+/** @see APR_STATUS_IS_ENOTENOUGHENTROPY */
+#define APR_ENOTENOUGHENTROPY (APR_OS_START_ERROR + 28)
+/** @} */
+
+/**
+ * @defgroup APR_STATUS_IS Status Value Tests
+ * @warning For any particular error condition, more than one of these tests
+ *      may match. This is because platform-specific error codes may not
+ *      always match the semantics of the POSIX codes these tests (and the
+ *      corresponding APR error codes) are named after. A notable example
+ *      are the APR_STATUS_IS_ENOENT and APR_STATUS_IS_ENOTDIR tests on
+ *      Win32 platforms. The programmer should always be aware of this and
+ *      adjust the order of the tests accordingly.
+ * @{
+ */
+/**
+ * APR was unable to perform a stat on the file
+ * @warning always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_ENOSTAT(s)        ((s) == APR_ENOSTAT)
+/**
+ * APR was not provided a pool with which to allocate memory
+ * @warning always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_ENOPOOL(s)        ((s) == APR_ENOPOOL)
+/** APR was given an invalid date  */
+#define APR_STATUS_IS_EBADDATE(s)       ((s) == APR_EBADDATE)
+/** APR was given an invalid socket */
+#define APR_STATUS_IS_EINVALSOCK(s)     ((s) == APR_EINVALSOCK)
+/** APR was not given a process structure */
+#define APR_STATUS_IS_ENOPROC(s)        ((s) == APR_ENOPROC)
+/** APR was not given a time structure */
+#define APR_STATUS_IS_ENOTIME(s)        ((s) == APR_ENOTIME)
+/** APR was not given a directory structure */
+#define APR_STATUS_IS_ENODIR(s)         ((s) == APR_ENODIR)
+/** APR was not given a lock structure */
+#define APR_STATUS_IS_ENOLOCK(s)        ((s) == APR_ENOLOCK)
+/** APR was not given a poll structure */
+#define APR_STATUS_IS_ENOPOLL(s)        ((s) == APR_ENOPOLL)
+/** APR was not given a socket */
+#define APR_STATUS_IS_ENOSOCKET(s)      ((s) == APR_ENOSOCKET)
+/** APR was not given a thread structure */
+#define APR_STATUS_IS_ENOTHREAD(s)      ((s) == APR_ENOTHREAD)
+/** APR was not given a thread key structure */
+#define APR_STATUS_IS_ENOTHDKEY(s)      ((s) == APR_ENOTHDKEY)
+/** Generic Error which can not be put into another spot */
+#define APR_STATUS_IS_EGENERAL(s)       ((s) == APR_EGENERAL)
+/** There is no more shared memory available */
+#define APR_STATUS_IS_ENOSHMAVAIL(s)    ((s) == APR_ENOSHMAVAIL)
+/** The specified IP address is invalid */
+#define APR_STATUS_IS_EBADIP(s)         ((s) == APR_EBADIP)
+/** The specified netmask is invalid */
+#define APR_STATUS_IS_EBADMASK(s)       ((s) == APR_EBADMASK)
+/* empty slot: +18 */
+/**
+ * APR was unable to open the dso object.
+ * For more information call apr_dso_error().
+ */
+#if defined(WIN32)
+#define APR_STATUS_IS_EDSOOPEN(s)       ((s) == APR_EDSOOPEN \
+                       || APR_TO_OS_ERROR(s) == ERROR_MOD_NOT_FOUND)
+#else
+#define APR_STATUS_IS_EDSOOPEN(s)       ((s) == APR_EDSOOPEN)
+#endif
+/** The given path was absolute. */
+#define APR_STATUS_IS_EABSOLUTE(s)      ((s) == APR_EABSOLUTE)
+/** The given path was relative. */
+#define APR_STATUS_IS_ERELATIVE(s)      ((s) == APR_ERELATIVE)
+/** The given path was neither relative nor absolute. */
+#define APR_STATUS_IS_EINCOMPLETE(s)    ((s) == APR_EINCOMPLETE)
+/** The given path was above the root path. */
+#define APR_STATUS_IS_EABOVEROOT(s)     ((s) == APR_EABOVEROOT)
+/** The given path was bad. */
+#define APR_STATUS_IS_EBADPATH(s)       ((s) == APR_EBADPATH)
+/** The given path contained wildcards. */
+#define APR_STATUS_IS_EPATHWILD(s)      ((s) == APR_EPATHWILD)
+/** Could not find the requested symbol.
+ * For more information call apr_dso_error().
+ */
+#if defined(WIN32)
+#define APR_STATUS_IS_ESYMNOTFOUND(s)   ((s) == APR_ESYMNOTFOUND \
+                       || APR_TO_OS_ERROR(s) == ERROR_PROC_NOT_FOUND)
+#else
+#define APR_STATUS_IS_ESYMNOTFOUND(s)   ((s) == APR_ESYMNOTFOUND)
+#endif
+/** The given process was not recognized by APR. */
+#define APR_STATUS_IS_EPROC_UNKNOWN(s)  ((s) == APR_EPROC_UNKNOWN)
+/** APR could not gather enough entropy to continue. */
+#define APR_STATUS_IS_ENOTENOUGHENTROPY(s) ((s) == APR_ENOTENOUGHENTROPY)
+
+/** @} */
+
+/**
+ * @addtogroup APR_Error
+ * @{
+ */
+/** @see APR_STATUS_IS_INCHILD */
+#define APR_INCHILD        (APR_OS_START_STATUS + 1)
+/** @see APR_STATUS_IS_INPARENT */
+#define APR_INPARENT       (APR_OS_START_STATUS + 2)
+/** @see APR_STATUS_IS_DETACH */
+#define APR_DETACH         (APR_OS_START_STATUS + 3)
+/** @see APR_STATUS_IS_NOTDETACH */
+#define APR_NOTDETACH      (APR_OS_START_STATUS + 4)
+/** @see APR_STATUS_IS_CHILD_DONE */
+#define APR_CHILD_DONE     (APR_OS_START_STATUS + 5)
+/** @see APR_STATUS_IS_CHILD_NOTDONE */
+#define APR_CHILD_NOTDONE  (APR_OS_START_STATUS + 6)
+/** @see APR_STATUS_IS_TIMEUP */
+#define APR_TIMEUP         (APR_OS_START_STATUS + 7)
+/** @see APR_STATUS_IS_INCOMPLETE */
+#define APR_INCOMPLETE     (APR_OS_START_STATUS + 8)
+/* empty slot: +9 */
+/* empty slot: +10 */
+/* empty slot: +11 */
+/** @see APR_STATUS_IS_BADCH */
+#define APR_BADCH          (APR_OS_START_STATUS + 12)
+/** @see APR_STATUS_IS_BADARG */
+#define APR_BADARG         (APR_OS_START_STATUS + 13)
+/** @see APR_STATUS_IS_EOF */
+#define APR_EOF            (APR_OS_START_STATUS + 14)
+/** @see APR_STATUS_IS_NOTFOUND */
+#define APR_NOTFOUND       (APR_OS_START_STATUS + 15)
+/* empty slot: +16 */
+/* empty slot: +17 */
+/* empty slot: +18 */
+/** @see APR_STATUS_IS_ANONYMOUS */
+#define APR_ANONYMOUS      (APR_OS_START_STATUS + 19)
+/** @see APR_STATUS_IS_FILEBASED */
+#define APR_FILEBASED      (APR_OS_START_STATUS + 20)
+/** @see APR_STATUS_IS_KEYBASED */
+#define APR_KEYBASED       (APR_OS_START_STATUS + 21)
+/** @see APR_STATUS_IS_EINIT */
+#define APR_EINIT          (APR_OS_START_STATUS + 22)
+/** @see APR_STATUS_IS_ENOTIMPL */
+#define APR_ENOTIMPL       (APR_OS_START_STATUS + 23)
+/** @see APR_STATUS_IS_EMISMATCH */
+#define APR_EMISMATCH      (APR_OS_START_STATUS + 24)
+/** @see APR_STATUS_IS_EBUSY */
+#define APR_EBUSY          (APR_OS_START_STATUS + 25)
+/** @} */
+
+/**
+ * @addtogroup APR_STATUS_IS
+ * @{
+ */
+/**
+ * Program is currently executing in the child
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code */
+#define APR_STATUS_IS_INCHILD(s)        ((s) == APR_INCHILD)
+/**
+ * Program is currently executing in the parent
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_INPARENT(s)       ((s) == APR_INPARENT)
+/**
+ * The thread is detached
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_DETACH(s)         ((s) == APR_DETACH)
+/**
+ * The thread is not detached
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_NOTDETACH(s)      ((s) == APR_NOTDETACH)
+/**
+ * The child has finished executing
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_CHILD_DONE(s)     ((s) == APR_CHILD_DONE)
+/**
+ * The child has not finished executing
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_CHILD_NOTDONE(s)  ((s) == APR_CHILD_NOTDONE)
+/**
+ * The operation did not finish before the timeout
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_TIMEUP(s)         ((s) == APR_TIMEUP)
+/**
+ * The operation was incomplete although some processing was performed
+ * and the results are partially valid.
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_INCOMPLETE(s)     ((s) == APR_INCOMPLETE)
+/* empty slot: +9 */
+/* empty slot: +10 */
+/* empty slot: +11 */
+/**
+ * Getopt found an option not in the option string
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_BADCH(s)          ((s) == APR_BADCH)
+/**
+ * Getopt found an option not in the option string and an argument was
+ * specified in the option string
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_BADARG(s)         ((s) == APR_BADARG)
+/**
+ * APR has encountered the end of the file
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_EOF(s)            ((s) == APR_EOF)
+/**
+ * APR was unable to find the socket in the poll structure
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_NOTFOUND(s)       ((s) == APR_NOTFOUND)
+/* empty slot: +16 */
+/* empty slot: +17 */
+/* empty slot: +18 */
+/**
+ * APR is using anonymous shared memory
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_ANONYMOUS(s)      ((s) == APR_ANONYMOUS)
+/**
+ * APR is using a file name as the key to the shared memory
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_FILEBASED(s)      ((s) == APR_FILEBASED)
+/**
+ * APR is using a shared key as the key to the shared memory
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_KEYBASED(s)       ((s) == APR_KEYBASED)
+/**
+ * Ininitalizer value.  If no option has been found, but
+ * the status variable requires a value, this should be used
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_EINIT(s)          ((s) == APR_EINIT)
+/**
+ * The APR function has not been implemented on this
+ * platform, either because nobody has gotten to it yet,
+ * or the function is impossible on this platform.
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_ENOTIMPL(s)       ((s) == APR_ENOTIMPL)
+/**
+ * Two passwords do not match.
+ * @warning
+ * always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_EMISMATCH(s)      ((s) == APR_EMISMATCH)
+/**
+ * The given lock was busy
+ * @warning always use this test, as platform-specific variances may meet this
+ * more than one error code
+ */
+#define APR_STATUS_IS_EBUSY(s)          ((s) == APR_EBUSY)
+
+/** @} */
+
+/**
+ * @addtogroup APR_Error APR Error Values
+ * @{
+ */
+/* APR CANONICAL ERROR VALUES */
+/** @see APR_STATUS_IS_EACCES */
+#ifdef EACCES
+#define APR_EACCES EACCES
+#else
+#define APR_EACCES         (APR_OS_START_CANONERR + 1)
+#endif
+
+/** @see APR_STATUS_IS_EEXIST */
+#ifdef EEXIST
+#define APR_EEXIST EEXIST
+#else
+#define APR_EEXIST         (APR_OS_START_CANONERR + 2)
+#endif
+
+/** @see APR_STATUS_IS_ENAMETOOLONG */
+#ifdef ENAMETOOLONG
+#define APR_ENAMETOOLONG ENAMETOOLONG
+#else
+#define APR_ENAMETOOLONG   (APR_OS_START_CANONERR + 3)
+#endif
+
+/** @see APR_STATUS_IS_ENOENT */
+#ifdef ENOENT
+#define APR_ENOENT ENOENT
+#else
+#define APR_ENOENT         (APR_OS_START_CANONERR + 4)
+#endif
+
+/** @see APR_STATUS_IS_ENOTDIR */
+#ifdef ENOTDIR
+#define APR_ENOTDIR ENOTDIR
+#else
+#define APR_ENOTDIR        (APR_OS_START_CANONERR + 5)
+#endif
+
+/** @see APR_STATUS_IS_ENOSPC */
+#ifdef ENOSPC
+#define APR_ENOSPC ENOSPC
+#else
+#define APR_ENOSPC         (APR_OS_START_CANONERR + 6)
+#endif
+
+/** @see APR_STATUS_IS_ENOMEM */
+#ifdef ENOMEM
+#define APR_ENOMEM ENOMEM
+#else
+#define APR_ENOMEM         (APR_OS_START_CANONERR + 7)
+#endif
+
+/** @see APR_STATUS_IS_EMFILE */
+#ifdef EMFILE
+#define APR_EMFILE EMFILE
+#else
+#define APR_EMFILE         (APR_OS_START_CANONERR + 8)
+#endif
+
+/** @see APR_STATUS_IS_ENFILE */
+#ifdef ENFILE
+#define APR_ENFILE ENFILE
+#else
+#define APR_ENFILE         (APR_OS_START_CANONERR + 9)
+#endif
+
+/** @see APR_STATUS_IS_EBADF */
+#ifdef EBADF
+#define APR_EBADF EBADF
+#else
+#define APR_EBADF          (APR_OS_START_CANONERR + 10)
+#endif
+
+/** @see APR_STATUS_IS_EINVAL */
+#ifdef EINVAL
+#define APR_EINVAL EINVAL
+#else
+#define APR_EINVAL         (APR_OS_START_CANONERR + 11)
+#endif
+
+/** @see APR_STATUS_IS_ESPIPE */
+#ifdef ESPIPE
+#define APR_ESPIPE ESPIPE
+#else
+#define APR_ESPIPE         (APR_OS_START_CANONERR + 12)
+#endif
+
+/**
+ * @see APR_STATUS_IS_EAGAIN
+ * @warning use APR_STATUS_IS_EAGAIN instead of just testing this value
+ */
+#ifdef EAGAIN
+#define APR_EAGAIN EAGAIN
+#elif defined(EWOULDBLOCK)
+#define APR_EAGAIN EWOULDBLOCK
+#else
+#define APR_EAGAIN         (APR_OS_START_CANONERR + 13)
+#endif
+
+/** @see APR_STATUS_IS_EINTR */
+#ifdef EINTR
+#define APR_EINTR EINTR
+#else
+#define APR_EINTR          (APR_OS_START_CANONERR + 14)
+#endif
+
+/** @see APR_STATUS_IS_ENOTSOCK */
+#ifdef ENOTSOCK
+#define APR_ENOTSOCK ENOTSOCK
+#else
+#define APR_ENOTSOCK       (APR_OS_START_CANONERR + 15)
+#endif
+
+/** @see APR_STATUS_IS_ECONNREFUSED */
+#ifdef ECONNREFUSED
+#define APR_ECONNREFUSED ECONNREFUSED
+#else
+#define APR_ECONNREFUSED   (APR_OS_START_CANONERR + 16)
+#endif
+
+/** @see APR_STATUS_IS_EINPROGRESS */
+#ifdef EINPROGRESS
+#define APR_EINPROGRESS EINPROGRESS
+#else
+#define APR_EINPROGRESS    (APR_OS_START_CANONERR + 17)
+#endif
+
+/**
+ * @see APR_STATUS_IS_ECONNABORTED
+ * @warning use APR_STATUS_IS_ECONNABORTED instead of just testing this value
+ */
+
+#ifdef ECONNABORTED
+#define APR_ECONNABORTED ECONNABORTED
+#else
+#define APR_ECONNABORTED   (APR_OS_START_CANONERR + 18)
+#endif
+
+/** @see APR_STATUS_IS_ECONNRESET */
+#ifdef ECONNRESET
+#define APR_ECONNRESET ECONNRESET
+#else
+#define APR_ECONNRESET     (APR_OS_START_CANONERR + 19)
+#endif
+
+/** @see APR_STATUS_IS_ETIMEDOUT
+ *  @deprecated */
+#ifdef ETIMEDOUT
+#define APR_ETIMEDOUT ETIMEDOUT
+#else
+#define APR_ETIMEDOUT      (APR_OS_START_CANONERR + 20)
+#endif
+
+/** @see APR_STATUS_IS_EHOSTUNREACH */
+#ifdef EHOSTUNREACH
+#define APR_EHOSTUNREACH EHOSTUNREACH
+#else
+#define APR_EHOSTUNREACH   (APR_OS_START_CANONERR + 21)
+#endif
+
+/** @see APR_STATUS_IS_ENETUNREACH */
+#ifdef ENETUNREACH
+#define APR_ENETUNREACH ENETUNREACH
+#else
+#define APR_ENETUNREACH    (APR_OS_START_CANONERR + 22)
+#endif
+
+/** @see APR_STATUS_IS_EFTYPE */
+#ifdef EFTYPE
+#define APR_EFTYPE EFTYPE
+#else
+#define APR_EFTYPE        (APR_OS_START_CANONERR + 23)
+#endif
+
+/** @see APR_STATUS_IS_EPIPE */
+#ifdef EPIPE
+#define APR_EPIPE EPIPE
+#else
+#define APR_EPIPE         (APR_OS_START_CANONERR + 24)
+#endif
+
+/** @see APR_STATUS_IS_EXDEV */
+#ifdef EXDEV
+#define APR_EXDEV EXDEV
+#else
+#define APR_EXDEV         (APR_OS_START_CANONERR + 25)
+#endif
+
+/** @see APR_STATUS_IS_ENOTEMPTY */
+#ifdef ENOTEMPTY
+#define APR_ENOTEMPTY ENOTEMPTY
+#else
+#define APR_ENOTEMPTY     (APR_OS_START_CANONERR + 26)
+#endif
+
+/** @see APR_STATUS_IS_EAFNOSUPPORT */
+#ifdef EAFNOSUPPORT
+#define APR_EAFNOSUPPORT EAFNOSUPPORT
+#else
+#define APR_EAFNOSUPPORT  (APR_OS_START_CANONERR + 27)
+#endif
+
+/** @} */
+
+#if defined(OS2) && !defined(DOXYGEN)
+
+#define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR)
+#define APR_TO_OS_ERROR(e)   (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR)
+
+#define INCL_DOSERRORS
+#define INCL_DOS
+
+/* Leave these undefined.
+ * OS2 doesn't rely on the errno concept.
+ * The API calls always return a result codes which
+ * should be filtered through APR_FROM_OS_ERROR().
+ *
+ * #define apr_get_os_error()   (APR_FROM_OS_ERROR(GetLastError()))
+ * #define apr_set_os_error(e)  (SetLastError(APR_TO_OS_ERROR(e)))
+ */
+
+/* A special case, only socket calls require this;
+ */
+#define apr_get_netos_error()   (APR_FROM_OS_ERROR(errno))
+#define apr_set_netos_error(e)  (errno = APR_TO_OS_ERROR(e))
+
+/* And this needs to be greped away for good:
+ */
+#define APR_OS2_STATUS(e) (APR_FROM_OS_ERROR(e))
+
+/* These can't sit in a private header, so in spite of the extra size,
+ * they need to be made available here.
+ */
+#define SOCBASEERR              10000
+#define SOCEPERM                (SOCBASEERR+1)             /* Not owner */
+#define SOCESRCH                (SOCBASEERR+3)             /* No such process */
+#define SOCEINTR                (SOCBASEERR+4)             /* Interrupted system call */
+#define SOCENXIO                (SOCBASEERR+6)             /* No such device or address */
+#define SOCEBADF                (SOCBASEERR+9)             /* Bad file number */
+#define SOCEACCES               (SOCBASEERR+13)            /* Permission denied */
+#define SOCEFAULT               (SOCBASEERR+14)            /* Bad address */
+#define SOCEINVAL               (SOCBASEERR+22)            /* Invalid argument */
+#define SOCEMFILE               (SOCBASEERR+24)            /* Too many open files */
+#define SOCEPIPE                (SOCBASEERR+32)            /* Broken pipe */
+#define SOCEOS2ERR              (SOCBASEERR+100)           /* OS/2 Error */
+#define SOCEWOULDBLOCK          (SOCBASEERR+35)            /* Operation would block */
+#define SOCEINPROGRESS          (SOCBASEERR+36)            /* Operation now in progress */
+#define SOCEALREADY             (SOCBASEERR+37)            /* Operation already in progress */
+#define SOCENOTSOCK             (SOCBASEERR+38)            /* Socket operation on non-socket */
+#define SOCEDESTADDRREQ         (SOCBASEERR+39)            /* Destination address required */
+#define SOCEMSGSIZE             (SOCBASEERR+40)            /* Message too long */
+#define SOCEPROTOTYPE           (SOCBASEERR+41)            /* Protocol wrong type for socket */
+#define SOCENOPROTOOPT          (SOCBASEERR+42)            /* Protocol not available */
+#define SOCEPROTONOSUPPORT      (SOCBASEERR+43)            /* Protocol not supported */
+#define SOCESOCKTNOSUPPORT      (SOCBASEERR+44)            /* Socket type not supported */
+#define SOCEOPNOTSUPP           (SOCBASEERR+45)            /* Operation not supported on socket */
+#define SOCEPFNOSUPPORT         (SOCBASEERR+46)            /* Protocol family not supported */
+#define SOCEAFNOSUPPORT         (SOCBASEERR+47)            /* Address family not supported by protocol family */
+#define SOCEADDRINUSE           (SOCBASEERR+48)            /* Address already in use */
+#define SOCEADDRNOTAVAIL        (SOCBASEERR+49)            /* Can't assign requested address */
+#define SOCENETDOWN             (SOCBASEERR+50)            /* Network is down */
+#define SOCENETUNREACH          (SOCBASEERR+51)            /* Network is unreachable */
+#define SOCENETRESET            (SOCBASEERR+52)            /* Network dropped connection on reset */
+#define SOCECONNABORTED         (SOCBASEERR+53)            /* Software caused connection abort */
+#define SOCECONNRESET           (SOCBASEERR+54)            /* Connection reset by peer */
+#define SOCENOBUFS              (SOCBASEERR+55)            /* No buffer space available */
+#define SOCEISCONN              (SOCBASEERR+56)            /* Socket is already connected */
+#define SOCENOTCONN             (SOCBASEERR+57)            /* Socket is not connected */
+#define SOCESHUTDOWN            (SOCBASEERR+58)            /* Can't send after socket shutdown */
+#define SOCETOOMANYREFS         (SOCBASEERR+59)            /* Too many references: can't splice */
+#define SOCETIMEDOUT            (SOCBASEERR+60)            /* Connection timed out */
+#define SOCECONNREFUSED         (SOCBASEERR+61)            /* Connection refused */
+#define SOCELOOP                (SOCBASEERR+62)            /* Too many levels of symbolic links */
+#define SOCENAMETOOLONG         (SOCBASEERR+63)            /* File name too long */
+#define SOCEHOSTDOWN            (SOCBASEERR+64)            /* Host is down */
+#define SOCEHOSTUNREACH         (SOCBASEERR+65)            /* No route to host */
+#define SOCENOTEMPTY            (SOCBASEERR+66)            /* Directory not empty */
+
+/* APR CANONICAL ERROR TESTS */
+#define APR_STATUS_IS_EACCES(s)         ((s) == APR_EACCES \
+                || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED \
+                || (s) == APR_OS_START_SYSERR + ERROR_SHARING_VIOLATION)
+#define APR_STATUS_IS_EEXIST(s)         ((s) == APR_EEXIST \
+                || (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILE_EXISTS \
+                || (s) == APR_OS_START_SYSERR + ERROR_ALREADY_EXISTS \
+                || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED)
+#define APR_STATUS_IS_ENAMETOOLONG(s)   ((s) == APR_ENAMETOOLONG \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILENAME_EXCED_RANGE \
+                || (s) == APR_OS_START_SYSERR + SOCENAMETOOLONG)
+#define APR_STATUS_IS_ENOENT(s)         ((s) == APR_ENOENT \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILE_NOT_FOUND \
+                || (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \
+                || (s) == APR_OS_START_SYSERR + ERROR_NO_MORE_FILES \
+                || (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED)
+#define APR_STATUS_IS_ENOTDIR(s)        ((s) == APR_ENOTDIR)
+#define APR_STATUS_IS_ENOSPC(s)         ((s) == APR_ENOSPC \
+                || (s) == APR_OS_START_SYSERR + ERROR_DISK_FULL)
+#define APR_STATUS_IS_ENOMEM(s)         ((s) == APR_ENOMEM)
+#define APR_STATUS_IS_EMFILE(s)         ((s) == APR_EMFILE \
+                || (s) == APR_OS_START_SYSERR + ERROR_TOO_MANY_OPEN_FILES)
+#define APR_STATUS_IS_ENFILE(s)         ((s) == APR_ENFILE)
+#define APR_STATUS_IS_EBADF(s)          ((s) == APR_EBADF \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_HANDLE)
+#define APR_STATUS_IS_EINVAL(s)         ((s) == APR_EINVAL \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_PARAMETER \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_FUNCTION)
+#define APR_STATUS_IS_ESPIPE(s)         ((s) == APR_ESPIPE \
+                || (s) == APR_OS_START_SYSERR + ERROR_NEGATIVE_SEEK)
+#define APR_STATUS_IS_EAGAIN(s)         ((s) == APR_EAGAIN \
+                || (s) == APR_OS_START_SYSERR + ERROR_NO_DATA \
+                || (s) == APR_OS_START_SYSERR + SOCEWOULDBLOCK \
+                || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION)
+#define APR_STATUS_IS_EINTR(s)          ((s) == APR_EINTR \
+                || (s) == APR_OS_START_SYSERR + SOCEINTR)
+#define APR_STATUS_IS_ENOTSOCK(s)       ((s) == APR_ENOTSOCK \
+                || (s) == APR_OS_START_SYSERR + SOCENOTSOCK)
+#define APR_STATUS_IS_ECONNREFUSED(s)   ((s) == APR_ECONNREFUSED \
+                || (s) == APR_OS_START_SYSERR + SOCECONNREFUSED)
+#define APR_STATUS_IS_EINPROGRESS(s)    ((s) == APR_EINPROGRESS \
+                || (s) == APR_OS_START_SYSERR + SOCEINPROGRESS)
+#define APR_STATUS_IS_ECONNABORTED(s)   ((s) == APR_ECONNABORTED \
+                || (s) == APR_OS_START_SYSERR + SOCECONNABORTED)
+#define APR_STATUS_IS_ECONNRESET(s)     ((s) == APR_ECONNRESET \
+                || (s) == APR_OS_START_SYSERR + SOCECONNRESET)
+/* XXX deprecated */
+#define APR_STATUS_IS_ETIMEDOUT(s)         ((s) == APR_ETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT)
+#undef APR_STATUS_IS_TIMEUP
+#define APR_STATUS_IS_TIMEUP(s)         ((s) == APR_TIMEUP \
+                || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT)
+#define APR_STATUS_IS_EHOSTUNREACH(s)   ((s) == APR_EHOSTUNREACH \
+                || (s) == APR_OS_START_SYSERR + SOCEHOSTUNREACH)
+#define APR_STATUS_IS_ENETUNREACH(s)    ((s) == APR_ENETUNREACH \
+                || (s) == APR_OS_START_SYSERR + SOCENETUNREACH)
+#define APR_STATUS_IS_EFTYPE(s)         ((s) == APR_EFTYPE)
+#define APR_STATUS_IS_EPIPE(s)          ((s) == APR_EPIPE \
+                || (s) == APR_OS_START_SYSERR + ERROR_BROKEN_PIPE \
+                || (s) == APR_OS_START_SYSERR + SOCEPIPE)
+#define APR_STATUS_IS_EXDEV(s)          ((s) == APR_EXDEV \
+                || (s) == APR_OS_START_SYSERR + ERROR_NOT_SAME_DEVICE)
+#define APR_STATUS_IS_ENOTEMPTY(s)      ((s) == APR_ENOTEMPTY \
+                || (s) == APR_OS_START_SYSERR + ERROR_DIR_NOT_EMPTY \
+                || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED)
+#define APR_STATUS_IS_EAFNOSUPPORT(s)   ((s) == APR_AFNOSUPPORT \
+                || (s) == APR_OS_START_SYSERR + SOCEAFNOSUPPORT)
+
+/*
+    Sorry, too tired to wrap this up for OS2... feel free to
+    fit the following into their best matches.
+
+    { ERROR_NO_SIGNAL_SENT,     ESRCH           },
+    { SOCEALREADY,              EALREADY        },
+    { SOCEDESTADDRREQ,          EDESTADDRREQ    },
+    { SOCEMSGSIZE,              EMSGSIZE        },
+    { SOCEPROTOTYPE,            EPROTOTYPE      },
+    { SOCENOPROTOOPT,           ENOPROTOOPT     },
+    { SOCEPROTONOSUPPORT,       EPROTONOSUPPORT },
+    { SOCESOCKTNOSUPPORT,       ESOCKTNOSUPPORT },
+    { SOCEOPNOTSUPP,            EOPNOTSUPP      },
+    { SOCEPFNOSUPPORT,          EPFNOSUPPORT    },
+    { SOCEADDRINUSE,            EADDRINUSE      },
+    { SOCEADDRNOTAVAIL,         EADDRNOTAVAIL   },
+    { SOCENETDOWN,              ENETDOWN        },
+    { SOCENETRESET,             ENETRESET       },
+    { SOCENOBUFS,               ENOBUFS         },
+    { SOCEISCONN,               EISCONN         },
+    { SOCENOTCONN,              ENOTCONN        },
+    { SOCESHUTDOWN,             ESHUTDOWN       },
+    { SOCETOOMANYREFS,          ETOOMANYREFS    },
+    { SOCELOOP,                 ELOOP           },
+    { SOCEHOSTDOWN,             EHOSTDOWN       },
+    { SOCENOTEMPTY,             ENOTEMPTY       },
+    { SOCEPIPE,                 EPIPE           }
+*/
+
+#elif defined(WIN32) && !defined(DOXYGEN) /* !defined(OS2) */
+
+#define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR)
+#define APR_TO_OS_ERROR(e)   (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR)
+
+#define apr_get_os_error()   (APR_FROM_OS_ERROR(GetLastError()))
+#define apr_set_os_error(e)  (SetLastError(APR_TO_OS_ERROR(e)))
+
+/* A special case, only socket calls require this:
+ */
+#define apr_get_netos_error()   (APR_FROM_OS_ERROR(WSAGetLastError()))
+#define apr_set_netos_error(e)   (WSASetLastError(APR_TO_OS_ERROR(e)))
+
+/* APR CANONICAL ERROR TESTS */
+#define APR_STATUS_IS_EACCES(s)         ((s) == APR_EACCES \
+                || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED \
+                || (s) == APR_OS_START_SYSERR + ERROR_CANNOT_MAKE \
+                || (s) == APR_OS_START_SYSERR + ERROR_CURRENT_DIRECTORY \
+                || (s) == APR_OS_START_SYSERR + ERROR_DRIVE_LOCKED \
+                || (s) == APR_OS_START_SYSERR + ERROR_FAIL_I24 \
+                || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION \
+                || (s) == APR_OS_START_SYSERR + ERROR_LOCK_FAILED \
+                || (s) == APR_OS_START_SYSERR + ERROR_NOT_LOCKED \
+                || (s) == APR_OS_START_SYSERR + ERROR_NETWORK_ACCESS_DENIED \
+                || (s) == APR_OS_START_SYSERR + ERROR_SHARING_VIOLATION)
+#define APR_STATUS_IS_EEXIST(s)         ((s) == APR_EEXIST \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILE_EXISTS \
+                || (s) == APR_OS_START_SYSERR + ERROR_ALREADY_EXISTS)
+#define APR_STATUS_IS_ENAMETOOLONG(s)   ((s) == APR_ENAMETOOLONG \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILENAME_EXCED_RANGE \
+                || (s) == APR_OS_START_SYSERR + WSAENAMETOOLONG)
+#define APR_STATUS_IS_ENOENT(s)         ((s) == APR_ENOENT \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILE_NOT_FOUND \
+                || (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \
+                || (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED \
+                || (s) == APR_OS_START_SYSERR + ERROR_NO_MORE_FILES)
+#define APR_STATUS_IS_ENOTDIR(s)        ((s) == APR_ENOTDIR \
+                || (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \
+                || (s) == APR_OS_START_SYSERR + ERROR_BAD_NETPATH \
+                || (s) == APR_OS_START_SYSERR + ERROR_BAD_NET_NAME \
+                || (s) == APR_OS_START_SYSERR + ERROR_BAD_PATHNAME \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DRIVE \
+                || (s) == APR_OS_START_SYSERR + ERROR_DIRECTORY)
+#define APR_STATUS_IS_ENOSPC(s)         ((s) == APR_ENOSPC \
+                || (s) == APR_OS_START_SYSERR + ERROR_DISK_FULL)
+#define APR_STATUS_IS_ENOMEM(s)         ((s) == APR_ENOMEM \
+                || (s) == APR_OS_START_SYSERR + ERROR_ARENA_TRASHED \
+                || (s) == APR_OS_START_SYSERR + ERROR_NOT_ENOUGH_MEMORY \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_BLOCK \
+                || (s) == APR_OS_START_SYSERR + ERROR_NOT_ENOUGH_QUOTA \
+                || (s) == APR_OS_START_SYSERR + ERROR_OUTOFMEMORY)
+#define APR_STATUS_IS_EMFILE(s)         ((s) == APR_EMFILE \
+                || (s) == APR_OS_START_SYSERR + ERROR_TOO_MANY_OPEN_FILES)
+#define APR_STATUS_IS_ENFILE(s)         ((s) == APR_ENFILE)
+#define APR_STATUS_IS_EBADF(s)          ((s) == APR_EBADF \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_HANDLE \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_TARGET_HANDLE)
+#define APR_STATUS_IS_EINVAL(s)         ((s) == APR_EINVAL \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_ACCESS \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DATA \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_FUNCTION \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_HANDLE \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_PARAMETER \
+                || (s) == APR_OS_START_SYSERR + ERROR_NEGATIVE_SEEK)
+#define APR_STATUS_IS_ESPIPE(s)         ((s) == APR_ESPIPE \
+                || (s) == APR_OS_START_SYSERR + ERROR_SEEK_ON_DEVICE \
+                || (s) == APR_OS_START_SYSERR + ERROR_NEGATIVE_SEEK)
+#define APR_STATUS_IS_EAGAIN(s)         ((s) == APR_EAGAIN \
+                || (s) == APR_OS_START_SYSERR + ERROR_NO_DATA \
+                || (s) == APR_OS_START_SYSERR + ERROR_NO_PROC_SLOTS \
+                || (s) == APR_OS_START_SYSERR + ERROR_NESTING_NOT_ALLOWED \
+                || (s) == APR_OS_START_SYSERR + ERROR_MAX_THRDS_REACHED \
+                || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION \
+                || (s) == APR_OS_START_SYSERR + WSAEWOULDBLOCK)
+#define APR_STATUS_IS_EINTR(s)          ((s) == APR_EINTR \
+                || (s) == APR_OS_START_SYSERR + WSAEINTR)
+#define APR_STATUS_IS_ENOTSOCK(s)       ((s) == APR_ENOTSOCK \
+                || (s) == APR_OS_START_SYSERR + WSAENOTSOCK)
+#define APR_STATUS_IS_ECONNREFUSED(s)   ((s) == APR_ECONNREFUSED \
+                || (s) == APR_OS_START_SYSERR + WSAECONNREFUSED)
+#define APR_STATUS_IS_EINPROGRESS(s)    ((s) == APR_EINPROGRESS \
+                || (s) == APR_OS_START_SYSERR + WSAEINPROGRESS)
+#define APR_STATUS_IS_ECONNABORTED(s)   ((s) == APR_ECONNABORTED \
+                || (s) == APR_OS_START_SYSERR + WSAECONNABORTED)
+#define APR_STATUS_IS_ECONNRESET(s)     ((s) == APR_ECONNRESET \
+                || (s) == APR_OS_START_SYSERR + ERROR_NETNAME_DELETED \
+                || (s) == APR_OS_START_SYSERR + WSAECONNRESET)
+/* XXX deprecated */
+#define APR_STATUS_IS_ETIMEDOUT(s)         ((s) == APR_ETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT)
+#undef APR_STATUS_IS_TIMEUP
+#define APR_STATUS_IS_TIMEUP(s)         ((s) == APR_TIMEUP \
+                || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT)
+#define APR_STATUS_IS_EHOSTUNREACH(s)   ((s) == APR_EHOSTUNREACH \
+                || (s) == APR_OS_START_SYSERR + WSAEHOSTUNREACH)
+#define APR_STATUS_IS_ENETUNREACH(s)    ((s) == APR_ENETUNREACH \
+                || (s) == APR_OS_START_SYSERR + WSAENETUNREACH)
+#define APR_STATUS_IS_EFTYPE(s)         ((s) == APR_EFTYPE \
+                || (s) == APR_OS_START_SYSERR + ERROR_EXE_MACHINE_TYPE_MISMATCH \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DLL \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_MODULETYPE \
+                || (s) == APR_OS_START_SYSERR + ERROR_BAD_EXE_FORMAT \
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_EXE_SIGNATURE \
+                || (s) == APR_OS_START_SYSERR + ERROR_FILE_CORRUPT \
+                || (s) == APR_OS_START_SYSERR + ERROR_BAD_FORMAT)
+#define APR_STATUS_IS_EPIPE(s)          ((s) == APR_EPIPE \
+                || (s) == APR_OS_START_SYSERR + ERROR_BROKEN_PIPE)
+#define APR_STATUS_IS_EXDEV(s)          ((s) == APR_EXDEV \
+                || (s) == APR_OS_START_SYSERR + ERROR_NOT_SAME_DEVICE)
+#define APR_STATUS_IS_ENOTEMPTY(s)      ((s) == APR_ENOTEMPTY \
+                || (s) == APR_OS_START_SYSERR + ERROR_DIR_NOT_EMPTY)
+#define APR_STATUS_IS_EAFNOSUPPORT(s)   ((s) == APR_EAFNOSUPPORT \
+                || (s) == APR_OS_START_SYSERR + WSAEAFNOSUPPORT)
+
+#elif defined(NETWARE) && defined(USE_WINSOCK) && !defined(DOXYGEN) /* !defined(OS2) && !defined(WIN32) */
+
+#define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR)
+#define APR_TO_OS_ERROR(e)   (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR)
+
+#define apr_get_os_error()    (errno)
+#define apr_set_os_error(e)   (errno = (e))
+
+/* A special case, only socket calls require this: */
+#define apr_get_netos_error()   (APR_FROM_OS_ERROR(WSAGetLastError()))
+#define apr_set_netos_error(e)  (WSASetLastError(APR_TO_OS_ERROR(e)))
+
+/* APR CANONICAL ERROR TESTS */
+#define APR_STATUS_IS_EACCES(s)         ((s) == APR_EACCES)
+#define APR_STATUS_IS_EEXIST(s)         ((s) == APR_EEXIST)
+#define APR_STATUS_IS_ENAMETOOLONG(s)   ((s) == APR_ENAMETOOLONG)
+#define APR_STATUS_IS_ENOENT(s)         ((s) == APR_ENOENT)
+#define APR_STATUS_IS_ENOTDIR(s)        ((s) == APR_ENOTDIR)
+#define APR_STATUS_IS_ENOSPC(s)         ((s) == APR_ENOSPC)
+#define APR_STATUS_IS_ENOMEM(s)         ((s) == APR_ENOMEM)
+#define APR_STATUS_IS_EMFILE(s)         ((s) == APR_EMFILE)
+#define APR_STATUS_IS_ENFILE(s)         ((s) == APR_ENFILE)
+#define APR_STATUS_IS_EBADF(s)          ((s) == APR_EBADF)
+#define APR_STATUS_IS_EINVAL(s)         ((s) == APR_EINVAL)
+#define APR_STATUS_IS_ESPIPE(s)         ((s) == APR_ESPIPE)
+
+#define APR_STATUS_IS_EAGAIN(s)         ((s) == APR_EAGAIN \
+                || (s) ==                       EWOULDBLOCK \
+                || (s) == APR_OS_START_SYSERR + WSAEWOULDBLOCK)
+#define APR_STATUS_IS_EINTR(s)          ((s) == APR_EINTR \
+                || (s) == APR_OS_START_SYSERR + WSAEINTR)
+#define APR_STATUS_IS_ENOTSOCK(s)       ((s) == APR_ENOTSOCK \
+                || (s) == APR_OS_START_SYSERR + WSAENOTSOCK)
+#define APR_STATUS_IS_ECONNREFUSED(s)   ((s) == APR_ECONNREFUSED \
+                || (s) == APR_OS_START_SYSERR + WSAECONNREFUSED)
+#define APR_STATUS_IS_EINPROGRESS(s)    ((s) == APR_EINPROGRESS \
+                || (s) == APR_OS_START_SYSERR + WSAEINPROGRESS)
+#define APR_STATUS_IS_ECONNABORTED(s)   ((s) == APR_ECONNABORTED \
+                || (s) == APR_OS_START_SYSERR + WSAECONNABORTED)
+#define APR_STATUS_IS_ECONNRESET(s)     ((s) == APR_ECONNRESET \
+                || (s) == APR_OS_START_SYSERR + WSAECONNRESET)
+/* XXX deprecated */
+#define APR_STATUS_IS_ETIMEDOUT(s)       ((s) == APR_ETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT)
+#undef APR_STATUS_IS_TIMEUP
+#define APR_STATUS_IS_TIMEUP(s)         ((s) == APR_TIMEUP \
+                || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \
+                || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT)
+#define APR_STATUS_IS_EHOSTUNREACH(s)   ((s) == APR_EHOSTUNREACH \
+                || (s) == APR_OS_START_SYSERR + WSAEHOSTUNREACH)
+#define APR_STATUS_IS_ENETUNREACH(s)    ((s) == APR_ENETUNREACH \
+                || (s) == APR_OS_START_SYSERR + WSAENETUNREACH)
+#define APR_STATUS_IS_ENETDOWN(s)       ((s) == APR_OS_START_SYSERR + WSAENETDOWN)
+#define APR_STATUS_IS_EFTYPE(s)         ((s) == APR_EFTYPE)
+#define APR_STATUS_IS_EPIPE(s)          ((s) == APR_EPIPE)
+#define APR_STATUS_IS_EXDEV(s)          ((s) == APR_EXDEV)
+#define APR_STATUS_IS_ENOTEMPTY(s)      ((s) == APR_ENOTEMPTY)
+#define APR_STATUS_IS_EAFNOSUPPORT(s)   ((s) == APR_EAFNOSUPPORT \
+                || (s) == APR_OS_START_SYSERR + WSAEAFNOSUPPORT)
+
+#else /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */
+
+/*
+ *  os error codes are clib error codes
+ */
+#define APR_FROM_OS_ERROR(e)  (e)
+#define APR_TO_OS_ERROR(e)    (e)
+
+#define apr_get_os_error()    (errno)
+#define apr_set_os_error(e)   (errno = (e))
+
+/* A special case, only socket calls require this:
+ */
+#define apr_get_netos_error() (errno)
+#define apr_set_netos_error(e) (errno = (e))
+
+/**
+ * @addtogroup APR_STATUS_IS
+ * @{
+ */
+
+/** permission denied */
+#define APR_STATUS_IS_EACCES(s)         ((s) == APR_EACCES)
+/** file exists */
+#define APR_STATUS_IS_EEXIST(s)         ((s) == APR_EEXIST)
+/** path name is too long */
+#define APR_STATUS_IS_ENAMETOOLONG(s)   ((s) == APR_ENAMETOOLONG)
+/**
+ * no such file or directory
+ * @remark
+ * EMVSCATLG can be returned by the automounter on z/OS for
+ * paths which do not exist.
+ */
+#ifdef EMVSCATLG
+#define APR_STATUS_IS_ENOENT(s)         ((s) == APR_ENOENT \
+                                      || (s) == EMVSCATLG)
+#else
+#define APR_STATUS_IS_ENOENT(s)         ((s) == APR_ENOENT)
+#endif
+/** not a directory */
+#define APR_STATUS_IS_ENOTDIR(s)        ((s) == APR_ENOTDIR)
+/** no space left on device */
+#ifdef EDQUOT
+#define APR_STATUS_IS_ENOSPC(s)         ((s) == APR_ENOSPC \
+                                      || (s) == EDQUOT)
+#else
+#define APR_STATUS_IS_ENOSPC(s)         ((s) == APR_ENOSPC)
+#endif
+/** not enough memory */
+#define APR_STATUS_IS_ENOMEM(s)         ((s) == APR_ENOMEM)
+/** too many open files */
+#define APR_STATUS_IS_EMFILE(s)         ((s) == APR_EMFILE)
+/** file table overflow */
+#define APR_STATUS_IS_ENFILE(s)         ((s) == APR_ENFILE)
+/** bad file # */
+#define APR_STATUS_IS_EBADF(s)          ((s) == APR_EBADF)
+/** invalid argument */
+#define APR_STATUS_IS_EINVAL(s)         ((s) == APR_EINVAL)
+/** illegal seek */
+#define APR_STATUS_IS_ESPIPE(s)         ((s) == APR_ESPIPE)
+
+/** operation would block */
+#if !defined(EWOULDBLOCK) || !defined(EAGAIN)
+#define APR_STATUS_IS_EAGAIN(s)         ((s) == APR_EAGAIN)
+#elif (EWOULDBLOCK == EAGAIN)
+#define APR_STATUS_IS_EAGAIN(s)         ((s) == APR_EAGAIN)
+#else
+#define APR_STATUS_IS_EAGAIN(s)         ((s) == APR_EAGAIN \
+                                      || (s) == EWOULDBLOCK)
+#endif
+
+/** interrupted system call */
+#define APR_STATUS_IS_EINTR(s)          ((s) == APR_EINTR)
+/** socket operation on a non-socket */
+#define APR_STATUS_IS_ENOTSOCK(s)       ((s) == APR_ENOTSOCK)
+/** Connection Refused */
+#define APR_STATUS_IS_ECONNREFUSED(s)   ((s) == APR_ECONNREFUSED)
+/** operation now in progress */
+#define APR_STATUS_IS_EINPROGRESS(s)    ((s) == APR_EINPROGRESS)
+
+/**
+ * Software caused connection abort
+ * @remark
+ * EPROTO on certain older kernels really means ECONNABORTED, so we need to
+ * ignore it for them.  See discussion in new-httpd archives nh.9701 & nh.9603
+ *
+ * There is potentially a bug in Solaris 2.x x<6, and other boxes that
+ * implement tcp sockets in userland (i.e. on top of STREAMS).  On these
+ * systems, EPROTO can actually result in a fatal loop.  See PR#981 for
+ * example.  It's hard to handle both uses of EPROTO.
+ */
+#ifdef EPROTO
+#define APR_STATUS_IS_ECONNABORTED(s)    ((s) == APR_ECONNABORTED \
+                                       || (s) == EPROTO)
+#else
+#define APR_STATUS_IS_ECONNABORTED(s)    ((s) == APR_ECONNABORTED)
+#endif
+
+/** Connection Reset by peer */
+#define APR_STATUS_IS_ECONNRESET(s)      ((s) == APR_ECONNRESET)
+/** Operation timed out
+ *  @deprecated */
+#define APR_STATUS_IS_ETIMEDOUT(s)      ((s) == APR_ETIMEDOUT)
+/** no route to host */
+#define APR_STATUS_IS_EHOSTUNREACH(s)    ((s) == APR_EHOSTUNREACH)
+/** network is unreachable */
+#define APR_STATUS_IS_ENETUNREACH(s)     ((s) == APR_ENETUNREACH)
+/** inappropiate file type or format */
+#define APR_STATUS_IS_EFTYPE(s)          ((s) == APR_EFTYPE)
+/** broken pipe */
+#define APR_STATUS_IS_EPIPE(s)           ((s) == APR_EPIPE)
+/** cross device link */
+#define APR_STATUS_IS_EXDEV(s)           ((s) == APR_EXDEV)
+/** Directory Not Empty */
+#define APR_STATUS_IS_ENOTEMPTY(s)       ((s) == APR_ENOTEMPTY || \
+                                          (s) == APR_EEXIST)
+/** Address Family not supported */
+#define APR_STATUS_IS_EAFNOSUPPORT(s)    ((s) == APR_EAFNOSUPPORT)
+/** @} */
+
+#endif /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_ERRNO_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_info.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_info.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_info.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,428 @@
+/* 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.
+ */
+
+#ifndef APR_FILE_INFO_H
+#define APR_FILE_INFO_H
+
+/**
+ * @file apr_file_info.h
+ * @brief APR File Information
+ */
+
+#include "apr.h"
+#include "apr_user.h"
+#include "apr_pools.h"
+#include "apr_tables.h"
+#include "apr_time.h"
+#include "apr_errno.h"
+
+#if APR_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_file_info File Information
+ * @ingroup APR 
+ * @{
+ */
+
+/* Many applications use the type member to determine the
+ * existance of a file or initialization of the file info,
+ * so the APR_NOFILE value must be distinct from APR_UNKFILE.
+ */
+
+/** apr_filetype_e values for the filetype member of the 
+ * apr_file_info_t structure
+ * @warning: Not all of the filetypes below can be determined.
+ * For example, a given platform might not correctly report 
+ * a socket descriptor as APR_SOCK if that type isn't 
+ * well-identified on that platform.  In such cases where
+ * a filetype exists but cannot be described by the recognized
+ * flags below, the filetype will be APR_UNKFILE.  If the
+ * filetype member is not determined, the type will be APR_NOFILE.
+ */
+
+typedef enum {
+    APR_NOFILE = 0,     /**< no file type determined */
+    APR_REG,            /**< a regular file */
+    APR_DIR,            /**< a directory */
+    APR_CHR,            /**< a character device */
+    APR_BLK,            /**< a block device */
+    APR_PIPE,           /**< a FIFO / pipe */
+    APR_LNK,            /**< a symbolic link */
+    APR_SOCK,           /**< a [unix domain] socket */
+    APR_UNKFILE = 127   /**< a file of some other unknown type */
+} apr_filetype_e; 
+
+/**
+ * @defgroup apr_file_permissions File Permissions flags 
+ * @{
+ */
+
+#define APR_FPROT_USETID      0x8000 /**< Set user id */
+#define APR_FPROT_UREAD       0x0400 /**< Read by user */
+#define APR_FPROT_UWRITE      0x0200 /**< Write by user */
+#define APR_FPROT_UEXECUTE    0x0100 /**< Execute by user */
+
+#define APR_FPROT_GSETID      0x4000 /**< Set group id */
+#define APR_FPROT_GREAD       0x0040 /**< Read by group */
+#define APR_FPROT_GWRITE      0x0020 /**< Write by group */
+#define APR_FPROT_GEXECUTE    0x0010 /**< Execute by group */
+
+#define APR_FPROT_WSTICKY     0x2000 /**< Sticky bit */
+#define APR_FPROT_WREAD       0x0004 /**< Read by others */
+#define APR_FPROT_WWRITE      0x0002 /**< Write by others */
+#define APR_FPROT_WEXECUTE    0x0001 /**< Execute by others */
+
+#define APR_FPROT_OS_DEFAULT  0x0FFF /**< use OS's default permissions */
+
+/* additional permission flags for apr_file_copy  and apr_file_append */
+#define APR_FPROT_FILE_SOURCE_PERMS 0x1000 /**< Copy source file's permissions */
+    
+/* backcompat */
+#define APR_USETID     APR_FPROT_USETID     /**< @deprecated @see APR_FPROT_USETID     */
+#define APR_UREAD      APR_FPROT_UREAD      /**< @deprecated @see APR_FPROT_UREAD      */
+#define APR_UWRITE     APR_FPROT_UWRITE     /**< @deprecated @see APR_FPROT_UWRITE     */
+#define APR_UEXECUTE   APR_FPROT_UEXECUTE   /**< @deprecated @see APR_FPROT_UEXECUTE   */
+#define APR_GSETID     APR_FPROT_GSETID     /**< @deprecated @see APR_FPROT_GSETID     */
+#define APR_GREAD      APR_FPROT_GREAD      /**< @deprecated @see APR_FPROT_GREAD      */
+#define APR_GWRITE     APR_FPROT_GWRITE     /**< @deprecated @see APR_FPROT_GWRITE     */
+#define APR_GEXECUTE   APR_FPROT_GEXECUTE   /**< @deprecated @see APR_FPROT_GEXECUTE   */
+#define APR_WSTICKY    APR_FPROT_WSTICKY    /**< @deprecated @see APR_FPROT_WSTICKY    */
+#define APR_WREAD      APR_FPROT_WREAD      /**< @deprecated @see APR_FPROT_WREAD      */
+#define APR_WWRITE     APR_FPROT_WWRITE     /**< @deprecated @see APR_FPROT_WWRITE     */
+#define APR_WEXECUTE   APR_FPROT_WEXECUTE   /**< @deprecated @see APR_FPROT_WEXECUTE   */
+#define APR_OS_DEFAULT APR_FPROT_OS_DEFAULT /**< @deprecated @see APR_FPROT_OS_DEFAULT */
+#define APR_FILE_SOURCE_PERMS APR_FPROT_FILE_SOURCE_PERMS /**< @deprecated @see APR_FPROT_FILE_SOURCE_PERMS */
+    
+/** @} */
+
+
+/**
+ * Structure for referencing directories.
+ */
+typedef struct apr_dir_t          apr_dir_t;
+/**
+ * Structure for determining file permissions.
+ */
+typedef apr_int32_t               apr_fileperms_t;
+#if (defined WIN32) || (defined NETWARE)
+/**
+ * Structure for determining the device the file is on.
+ */
+typedef apr_uint32_t              apr_dev_t;
+#else
+/**
+ * Structure for determining the device the file is on.
+ */
+typedef dev_t                     apr_dev_t;
+#endif
+
+/**
+ * @defgroup apr_file_stat Stat Functions
+ * @{
+ */
+/** file info structure */
+typedef struct apr_finfo_t        apr_finfo_t;
+
+#define APR_FINFO_LINK   0x00000001 /**< Stat the link not the file itself if it is a link */
+#define APR_FINFO_MTIME  0x00000010 /**< Modification Time */
+#define APR_FINFO_CTIME  0x00000020 /**< Creation or inode-changed time */
+#define APR_FINFO_ATIME  0x00000040 /**< Access Time */
+#define APR_FINFO_SIZE   0x00000100 /**< Size of the file */
+#define APR_FINFO_CSIZE  0x00000200 /**< Storage size consumed by the file */
+#define APR_FINFO_DEV    0x00001000 /**< Device */
+#define APR_FINFO_INODE  0x00002000 /**< Inode */
+#define APR_FINFO_NLINK  0x00004000 /**< Number of links */
+#define APR_FINFO_TYPE   0x00008000 /**< Type */
+#define APR_FINFO_USER   0x00010000 /**< User */
+#define APR_FINFO_GROUP  0x00020000 /**< Group */
+#define APR_FINFO_UPROT  0x00100000 /**< User protection bits */
+#define APR_FINFO_GPROT  0x00200000 /**< Group protection bits */
+#define APR_FINFO_WPROT  0x00400000 /**< World protection bits */
+#define APR_FINFO_ICASE  0x01000000 /**< if dev is case insensitive */
+#define APR_FINFO_NAME   0x02000000 /**< ->name in proper case */
+
+#define APR_FINFO_MIN    0x00008170 /**< type, mtime, ctime, atime, size */
+#define APR_FINFO_IDENT  0x00003000 /**< dev and inode */
+#define APR_FINFO_OWNER  0x00030000 /**< user and group */
+#define APR_FINFO_PROT   0x00700000 /**<  all protections */
+#define APR_FINFO_NORM   0x0073b170 /**<  an atomic unix apr_stat() */
+#define APR_FINFO_DIRENT 0x02000000 /**<  an atomic unix apr_dir_read() */
+
+/**
+ * The file information structure.  This is analogous to the POSIX
+ * stat structure.
+ */
+struct apr_finfo_t {
+    /** Allocates memory and closes lingering handles in the specified pool */
+    apr_pool_t *pool;
+    /** The bitmask describing valid fields of this apr_finfo_t structure 
+     *  including all available 'wanted' fields and potentially more */
+    apr_int32_t valid;
+    /** The access permissions of the file.  Mimics Unix access rights. */
+    apr_fileperms_t protection;
+    /** The type of file.  One of APR_REG, APR_DIR, APR_CHR, APR_BLK, APR_PIPE, 
+     * APR_LNK or APR_SOCK.  If the type is undetermined, the value is APR_NOFILE.
+     * If the type cannot be determined, the value is APR_UNKFILE.
+     */
+    apr_filetype_e filetype;
+    /** The user id that owns the file */
+    apr_uid_t user;
+    /** The group id that owns the file */
+    apr_gid_t group;
+    /** The inode of the file. */
+    apr_ino_t inode;
+    /** The id of the device the file is on. */
+    apr_dev_t device;
+    /** The number of hard links to the file. */
+    apr_int32_t nlink;
+    /** The size of the file */
+    apr_off_t size;
+    /** The storage size consumed by the file */
+    apr_off_t csize;
+    /** The time the file was last accessed */
+    apr_time_t atime;
+    /** The time the file was last modified */
+    apr_time_t mtime;
+    /** The time the file was created, or the inode was last changed */
+    apr_time_t ctime;
+    /** The pathname of the file (possibly unrooted) */
+    const char *fname;
+    /** The file's name (no path) in filesystem case */
+    const char *name;
+    /** The file's handle, if accessed (can be submitted to apr_duphandle) */
+    struct apr_file_t *filehand;
+};
+
+/**
+ * get the specified file's stats.  The file is specified by filename, 
+ * instead of using a pre-opened file.
+ * @param finfo Where to store the information about the file, which is
+ * never touched if the call fails.
+ * @param fname The name of the file to stat.
+ * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_
+                 values 
+ * @param pool the pool to use to allocate the new file. 
+ *
+ * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may
+ *       not be filled in, and you need to check the @c finfo->valid bitmask
+ *       to verify that what you're looking for is there.
+ */ 
+APR_DECLARE(apr_status_t) apr_stat(apr_finfo_t *finfo, const char *fname,
+                                   apr_int32_t wanted, apr_pool_t *pool);
+
+/** @} */
+/**
+ * @defgroup apr_dir Directory Manipulation Functions
+ * @{
+ */
+
+/**
+ * Open the specified directory.
+ * @param new_dir The opened directory descriptor.
+ * @param dirname The full path to the directory (use / on all systems)
+ * @param pool The pool to use.
+ */                        
+APR_DECLARE(apr_status_t) apr_dir_open(apr_dir_t **new_dir, 
+                                       const char *dirname, 
+                                       apr_pool_t *pool);
+
+/**
+ * close the specified directory. 
+ * @param thedir the directory descriptor to close.
+ */                        
+APR_DECLARE(apr_status_t) apr_dir_close(apr_dir_t *thedir);
+
+/**
+ * Read the next entry from the specified directory. 
+ * @param finfo the file info structure and filled in by apr_dir_read
+ * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_
+                 values 
+ * @param thedir the directory descriptor returned from apr_dir_open
+ * @remark No ordering is guaranteed for the entries read.
+ *
+ * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may
+ *       not be filled in, and you need to check the @c finfo->valid bitmask
+ *       to verify that what you're looking for is there. When no more
+ *       entries are available, APR_ENOENT is returned.
+ */                        
+APR_DECLARE(apr_status_t) apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted,
+                                       apr_dir_t *thedir);
+
+/**
+ * Rewind the directory to the first entry.
+ * @param thedir the directory descriptor to rewind.
+ */                        
+APR_DECLARE(apr_status_t) apr_dir_rewind(apr_dir_t *thedir);
+/** @} */
+
+/**
+ * @defgroup apr_filepath Filepath Manipulation Functions
+ * @{
+ */
+
+/** Cause apr_filepath_merge to fail if addpath is above rootpath 
+ * @bug in APR 0.9 and 1.x, this flag's behavior is undefined
+ * if the rootpath is NULL or empty.  In APR 2.0 this should be
+ * changed to imply NOTABSOLUTE if the rootpath is NULL or empty.
+ */
+#define APR_FILEPATH_NOTABOVEROOT   0x01
+
+/** internal: Only meaningful with APR_FILEPATH_NOTABOVEROOT */
+#define APR_FILEPATH_SECUREROOTTEST 0x02
+
+/** Cause apr_filepath_merge to fail if addpath is above rootpath,
+ * even given a rootpath /foo/bar and an addpath ../bar/bash
+ */
+#define APR_FILEPATH_SECUREROOT     0x03
+
+/** Fail apr_filepath_merge if the merged path is relative */
+#define APR_FILEPATH_NOTRELATIVE    0x04
+
+/** Fail apr_filepath_merge if the merged path is absolute */
+#define APR_FILEPATH_NOTABSOLUTE    0x08
+
+/** Return the file system's native path format (e.g. path delimiters
+ * of ':' on MacOS9, '\' on Win32, etc.) */
+#define APR_FILEPATH_NATIVE         0x10
+
+/** Resolve the true case of existing directories and file elements
+ * of addpath, (resolving any aliases on Win32) and append a proper 
+ * trailing slash if a directory
+ */
+#define APR_FILEPATH_TRUENAME       0x20
+
+/**
+ * Extract the rootpath from the given filepath
+ * @param rootpath the root file path returned with APR_SUCCESS or APR_EINCOMPLETE
+ * @param filepath the pathname to parse for its root component
+ * @param flags the desired rules to apply, from
+ * <PRE>
+ *      APR_FILEPATH_NATIVE    Use native path seperators (e.g. '\' on Win32)
+ *      APR_FILEPATH_TRUENAME  Tests that the root exists, and makes it proper
+ * </PRE>
+ * @param p the pool to allocate the new path string from
+ * @remark on return, filepath points to the first non-root character in the
+ * given filepath.  In the simplest example, given a filepath of "/foo", 
+ * returns the rootpath of "/" and filepath points at "foo".  This is far 
+ * more complex on other platforms, which will canonicalize the root form
+ * to a consistant format, given the APR_FILEPATH_TRUENAME flag, and also
+ * test for the validity of that root (e.g., that a drive d:/ or network 
+ * share //machine/foovol/). 
+ * The function returns APR_ERELATIVE if filepath isn't rooted (an
+ * error), APR_EINCOMPLETE if the root path is ambigious (but potentially
+ * legitimate, e.g. "/" on Windows is incomplete because it doesn't specify
+ * the drive letter), or APR_EBADPATH if the root is simply invalid.
+ * APR_SUCCESS is returned if filepath is an absolute path.
+ */
+APR_DECLARE(apr_status_t) apr_filepath_root(const char **rootpath, 
+                                            const char **filepath, 
+                                            apr_int32_t flags,
+                                            apr_pool_t *p);
+
+/**
+ * Merge additional file path onto the previously processed rootpath
+ * @param newpath the merged paths returned
+ * @param rootpath the root file path (NULL uses the current working path)
+ * @param addpath the path to add to the root path
+ * @param flags the desired APR_FILEPATH_ rules to apply when merging
+ * @param p the pool to allocate the new path string from
+ * @remark if the flag APR_FILEPATH_TRUENAME is given, and the addpath 
+ * contains wildcard characters ('*', '?') on platforms that don't support 
+ * such characters within filenames, the paths will be merged, but the 
+ * result code will be APR_EPATHWILD, and all further segments will not
+ * reflect the true filenames including the wildcard and following segments.
+ */                        
+APR_DECLARE(apr_status_t) apr_filepath_merge(char **newpath, 
+                                             const char *rootpath,
+                                             const char *addpath, 
+                                             apr_int32_t flags,
+                                             apr_pool_t *p);
+
+/**
+ * Split a search path into separate components
+ * @param pathelts the returned components of the search path
+ * @param liststr the search path (e.g., <tt>getenv("PATH")</tt>)
+ * @param p the pool to allocate the array and path components from
+ * @remark empty path componenta do not become part of @a pathelts.
+ * @remark the path separator in @a liststr is system specific;
+ * e.g., ':' on Unix, ';' on Windows, etc.
+ */
+APR_DECLARE(apr_status_t) apr_filepath_list_split(apr_array_header_t **pathelts,
+                                                  const char *liststr,
+                                                  apr_pool_t *p);
+
+/**
+ * Merge a list of search path components into a single search path
+ * @param liststr the returned search path; may be NULL if @a pathelts is empty
+ * @param pathelts the components of the search path
+ * @param p the pool to allocate the search path from
+ * @remark emtpy strings in the source array are ignored.
+ * @remark the path separator in @a liststr is system specific;
+ * e.g., ':' on Unix, ';' on Windows, etc.
+ */
+APR_DECLARE(apr_status_t) apr_filepath_list_merge(char **liststr,
+                                                  apr_array_header_t *pathelts,
+                                                  apr_pool_t *p);
+
+/**
+ * Return the default file path (for relative file names)
+ * @param path the default path string returned
+ * @param flags optional flag APR_FILEPATH_NATIVE to retrieve the
+ *              default file path in os-native format.
+ * @param p the pool to allocate the default path string from
+ */
+APR_DECLARE(apr_status_t) apr_filepath_get(char **path, apr_int32_t flags,
+                                           apr_pool_t *p);
+
+/**
+ * Set the default file path (for relative file names)
+ * @param path the default path returned
+ * @param p the pool to allocate any working storage
+ */
+APR_DECLARE(apr_status_t) apr_filepath_set(const char *path, apr_pool_t *p);
+
+/** The FilePath character encoding is unknown */
+#define APR_FILEPATH_ENCODING_UNKNOWN  0
+
+/** The FilePath character encoding is locale-dependent */
+#define APR_FILEPATH_ENCODING_LOCALE   1
+
+/** The FilePath character encoding is UTF-8 */
+#define APR_FILEPATH_ENCODING_UTF8     2
+
+/**
+ * Determine the encoding used internally by the FilePath functions
+ * @param style points to a variable which receives the encoding style flag
+ * @param p the pool to allocate any working storage
+ * @remark Use @c apr_os_locale_encoding and/or @c apr_os_default_encoding
+ * to get the name of the path encoding if it's not UTF-8.
+ */
+APR_DECLARE(apr_status_t) apr_filepath_encoding(int *style, apr_pool_t *p);
+/** @} */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_FILE_INFO_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_io.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_io.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_file_io.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,945 @@
+/* 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.
+ */
+
+#ifndef APR_FILE_IO_H
+#define APR_FILE_IO_H
+
+/**
+ * @file apr_file_io.h
+ * @brief APR File I/O Handling
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_time.h"
+#include "apr_errno.h"
+#include "apr_file_info.h"
+#include "apr_inherit.h"
+
+#define APR_WANT_STDIO          /**< for SEEK_* */
+#define APR_WANT_IOVEC          /**< for apr_file_writev */
+#include "apr_want.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_file_io File I/O Handling Functions
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * @defgroup apr_file_open_flags File Open Flags/Routines
+ * @{
+ */
+
+/* Note to implementors: Values in the range 0x00100000--0x80000000
+   are reserved for platform-specific values. */
+
+#define APR_FOPEN_READ       0x00001  /**< Open the file for reading */
+#define APR_FOPEN_WRITE      0x00002  /**< Open the file for writing */
+#define APR_FOPEN_CREATE     0x00004  /**< Create the file if not there */
+#define APR_FOPEN_APPEND     0x00008  /**< Append to the end of the file */
+#define APR_FOPEN_TRUNCATE   0x00010  /**< Open the file and truncate
+                                         to 0 length */
+#define APR_FOPEN_BINARY     0x00020  /**< Open the file in binary mode */
+#define APR_FOPEN_EXCL       0x00040  /**< Open should fail if APR_CREATE
+                                         and file exists. */
+#define APR_FOPEN_BUFFERED   0x00080  /**< Open the file for buffered I/O */
+#define APR_FOPEN_DELONCLOSE 0x00100  /**< Delete the file after close */
+#define APR_FOPEN_XTHREAD    0x00200  /**< Platform dependent tag to open
+                                         the file for use across multiple
+                                         threads */
+#define APR_FOPEN_SHARELOCK  0x00400  /**< Platform dependent support for
+                                         higher level locked read/write
+                                         access to support writes across
+                                         process/machines */
+#define APR_FOPEN_NOCLEANUP  0x00800  /**< Do not register a cleanup
+                                         when the file is opened */
+#define APR_FOPEN_SENDFILE_ENABLED 0x01000 /**< Advisory flag that this
+                                             file should support
+                                             apr_socket_sendfile operation */
+#define APR_FOPEN_LARGEFILE   0x04000 /**< Platform dependent flag to enable
+                                       * large file support, see WARNING below
+                                       */
+#define APR_FOPEN_SPARSE      0x08000 /**< Platform dependent flag to enable
+                                       * sparse file support, see WARNING below
+                                       */
+
+/* backcompat */
+#define APR_READ             APR_FOPEN_READ       /**< @deprecated @see APR_FOPEN_READ */
+#define APR_WRITE            APR_FOPEN_WRITE      /**< @deprecated @see APR_FOPEN_WRITE */   
+#define APR_CREATE           APR_FOPEN_CREATE     /**< @deprecated @see APR_FOPEN_CREATE */   
+#define APR_APPEND           APR_FOPEN_APPEND     /**< @deprecated @see APR_FOPEN_APPEND */   
+#define APR_TRUNCATE         APR_FOPEN_TRUNCATE   /**< @deprecated @see APR_FOPEN_TRUNCATE */   
+#define APR_BINARY           APR_FOPEN_BINARY     /**< @deprecated @see APR_FOPEN_BINARY */   
+#define APR_EXCL             APR_FOPEN_EXCL       /**< @deprecated @see APR_FOPEN_EXCL */   
+#define APR_BUFFERED         APR_FOPEN_BUFFERED   /**< @deprecated @see APR_FOPEN_BUFFERED */   
+#define APR_DELONCLOSE       APR_FOPEN_DELONCLOSE /**< @deprecated @see APR_FOPEN_DELONCLOSE */   
+#define APR_XTHREAD          APR_FOPEN_XTHREAD    /**< @deprecated @see APR_FOPEN_XTHREAD */   
+#define APR_SHARELOCK        APR_FOPEN_SHARELOCK  /**< @deprecated @see APR_FOPEN_SHARELOCK */   
+#define APR_FILE_NOCLEANUP   APR_FOPEN_NOCLEANUP  /**< @deprecated @see APR_FOPEN_NOCLEANUP */   
+#define APR_SENDFILE_ENABLED APR_FOPEN_SENDFILE_ENABLED /**< @deprecated @see APR_FOPEN_SENDFILE_ENABLED */   
+#define APR_LARGEFILE        APR_FOPEN_LARGEFILE  /**< @deprecated @see APR_FOPEN_LARGEFILE */   
+
+/** @warning APR_FOPEN_LARGEFILE flag only has effect on some
+ * platforms where sizeof(apr_off_t) == 4.  Where implemented, it
+ * allows opening and writing to a file which exceeds the size which
+ * can be represented by apr_off_t (2 gigabytes).  When a file's size
+ * does exceed 2Gb, apr_file_info_get() will fail with an error on the
+ * descriptor, likewise apr_stat()/apr_lstat() will fail on the
+ * filename.  apr_dir_read() will fail with APR_INCOMPLETE on a
+ * directory entry for a large file depending on the particular
+ * APR_FINFO_* flags.  Generally, it is not recommended to use this
+ * flag.
+ *
+ * @warning APR_FOPEN_SPARSE may, depending on platform, convert a
+ * normal file to a sparse file.  Some applications may be unable
+ * to decipher a sparse file, so it's critical that the sparse file
+ * flag should only be used for files accessed only by APR or other
+ * applications known to be able to decipher them.  APR does not
+ * guarantee that it will compress the file into sparse segments
+ * if it was previously created and written without the sparse flag.
+ * On platforms which do not understand, or on file systems which
+ * cannot handle sparse files, the flag is ignored by apr_file_open().
+ */
+
+/** @} */
+
+/**
+ * @defgroup apr_file_seek_flags File Seek Flags
+ * @{
+ */
+
+/* flags for apr_file_seek */
+/** Set the file position */
+#define APR_SET SEEK_SET
+/** Current */
+#define APR_CUR SEEK_CUR
+/** Go to end of file */
+#define APR_END SEEK_END
+/** @} */
+
+/**
+ * @defgroup apr_file_attrs_set_flags File Attribute Flags
+ * @{
+ */
+
+/* flags for apr_file_attrs_set */
+#define APR_FILE_ATTR_READONLY   0x01          /**< File is read-only */
+#define APR_FILE_ATTR_EXECUTABLE 0x02          /**< File is executable */
+#define APR_FILE_ATTR_HIDDEN     0x04          /**< File is hidden */
+/** @} */
+
+/**
+ * @defgroup apr_file_writev{_full} max iovec size
+ * @{
+ */
+#if defined(DOXYGEN)
+#define APR_MAX_IOVEC_SIZE 1024                /**< System dependent maximum 
+                                                    size of an iovec array */
+#elif defined(IOV_MAX)
+#define APR_MAX_IOVEC_SIZE IOV_MAX
+#elif defined(MAX_IOVEC)
+#define APR_MAX_IOVEC_SIZE MAX_IOVEC
+#else
+#define APR_MAX_IOVEC_SIZE 1024
+#endif
+/** @} */
+
+/** File attributes */
+typedef apr_uint32_t apr_fileattrs_t;
+
+/** Type to pass as whence argument to apr_file_seek. */
+typedef int       apr_seek_where_t;
+
+/**
+ * Structure for referencing files.
+ */
+typedef struct apr_file_t         apr_file_t;
+
+/* File lock types/flags */
+/**
+ * @defgroup apr_file_lock_types File Lock Types
+ * @{
+ */
+
+#define APR_FLOCK_SHARED        1       /**< Shared lock. More than one process
+                                           or thread can hold a shared lock
+                                           at any given time. Essentially,
+                                           this is a "read lock", preventing
+                                           writers from establishing an
+                                           exclusive lock. */
+#define APR_FLOCK_EXCLUSIVE     2       /**< Exclusive lock. Only one process
+                                           may hold an exclusive lock at any
+                                           given time. This is analogous to
+                                           a "write lock". */
+
+#define APR_FLOCK_TYPEMASK      0x000F  /**< mask to extract lock type */
+#define APR_FLOCK_NONBLOCK      0x0010  /**< do not block while acquiring the
+                                           file lock */
+/** @} */
+
+/**
+ * Open the specified file.
+ * @param newf The opened file descriptor.
+ * @param fname The full path to the file (using / on all systems)
+ * @param flag Or'ed value of:
+ * <PRE>
+ *         APR_READ              open for reading
+ *         APR_WRITE             open for writing
+ *         APR_CREATE            create the file if not there
+ *         APR_APPEND            file ptr is set to end prior to all writes
+ *         APR_TRUNCATE          set length to zero if file exists
+ *         APR_BINARY            not a text file (This flag is ignored on 
+ *                               UNIX because it has no meaning)
+ *         APR_BUFFERED          buffer the data.  Default is non-buffered
+ *         APR_EXCL              return error if APR_CREATE and file exists
+ *         APR_DELONCLOSE        delete the file after closing.
+ *         APR_XTHREAD           Platform dependent tag to open the file
+ *                               for use across multiple threads
+ *         APR_SHARELOCK         Platform dependent support for higher
+ *                               level locked read/write access to support
+ *                               writes across process/machines
+ *         APR_FILE_NOCLEANUP    Do not register a cleanup with the pool 
+ *                               passed in on the <EM>pool</EM> argument (see below).
+ *                               The apr_os_file_t handle in apr_file_t will not
+ *                               be closed when the pool is destroyed.
+ *         APR_SENDFILE_ENABLED  Open with appropriate platform semantics
+ *                               for sendfile operations.  Advisory only,
+ *                               apr_socket_sendfile does not check this flag.
+ * </PRE>
+ * @param perm Access permissions for file.
+ * @param pool The pool to use.
+ * @remark If perm is APR_OS_DEFAULT and the file is being created,
+ * appropriate default permissions will be used.
+ * @remark By default, the returned file descriptor will not be
+ * inherited by child processes created by apr_proc_create().  This
+ * can be changed using apr_file_inherit_set().
+ */
+APR_DECLARE(apr_status_t) apr_file_open(apr_file_t **newf, const char *fname,
+                                        apr_int32_t flag, apr_fileperms_t perm,
+                                        apr_pool_t *pool);
+
+/**
+ * Close the specified file.
+ * @param file The file descriptor to close.
+ */
+APR_DECLARE(apr_status_t) apr_file_close(apr_file_t *file);
+
+/**
+ * Delete the specified file.
+ * @param path The full path to the file (using / on all systems)
+ * @param pool The pool to use.
+ * @remark If the file is open, it won't be removed until all
+ * instances are closed.
+ */
+APR_DECLARE(apr_status_t) apr_file_remove(const char *path, apr_pool_t *pool);
+
+/**
+ * Rename the specified file.
+ * @param from_path The full path to the original file (using / on all systems)
+ * @param to_path The full path to the new file (using / on all systems)
+ * @param pool The pool to use.
+ * @warning If a file exists at the new location, then it will be
+ * overwritten.  Moving files or directories across devices may not be
+ * possible.
+ */
+APR_DECLARE(apr_status_t) apr_file_rename(const char *from_path, 
+                                          const char *to_path,
+                                          apr_pool_t *pool);
+
+/**
+ * Create a hard link to the specified file.
+ * @param from_path The full path to the original file (using / on all systems)
+ * @param to_path The full path to the new file (using / on all systems)
+ * @remark Both files must reside on the same device.
+ */
+APR_DECLARE(apr_status_t) apr_file_link(const char *from_path, 
+                                          const char *to_path);
+
+/**
+ * Copy the specified file to another file.
+ * @param from_path The full path to the original file (using / on all systems)
+ * @param to_path The full path to the new file (using / on all systems)
+ * @param perms Access permissions for the new file if it is created.
+ *     In place of the usual or'd combination of file permissions, the
+ *     value APR_FILE_SOURCE_PERMS may be given, in which case the source
+ *     file's permissions are copied.
+ * @param pool The pool to use.
+ * @remark The new file does not need to exist, it will be created if required.
+ * @warning If the new file already exists, its contents will be overwritten.
+ */
+APR_DECLARE(apr_status_t) apr_file_copy(const char *from_path, 
+                                        const char *to_path,
+                                        apr_fileperms_t perms,
+                                        apr_pool_t *pool);
+
+/**
+ * Append the specified file to another file.
+ * @param from_path The full path to the source file (use / on all systems)
+ * @param to_path The full path to the destination file (use / on all systems)
+ * @param perms Access permissions for the destination file if it is created.
+ *     In place of the usual or'd combination of file permissions, the
+ *     value APR_FILE_SOURCE_PERMS may be given, in which case the source
+ *     file's permissions are copied.
+ * @param pool The pool to use.
+ * @remark The new file does not need to exist, it will be created if required.
+ */
+APR_DECLARE(apr_status_t) apr_file_append(const char *from_path, 
+                                          const char *to_path,
+                                          apr_fileperms_t perms,
+                                          apr_pool_t *pool);
+
+/**
+ * Are we at the end of the file
+ * @param fptr The apr file we are testing.
+ * @remark Returns APR_EOF if we are at the end of file, APR_SUCCESS otherwise.
+ */
+APR_DECLARE(apr_status_t) apr_file_eof(apr_file_t *fptr);
+
+/**
+ * Open standard error as an apr file pointer.
+ * @param thefile The apr file to use as stderr.
+ * @param pool The pool to allocate the file out of.
+ * 
+ * @remark The only reason that the apr_file_open_std* functions exist
+ * is that you may not always have a stderr/out/in on Windows.  This
+ * is generally a problem with newer versions of Windows and services.
+ * 
+ * @remark The other problem is that the C library functions generally work
+ * differently on Windows and Unix.  So, by using apr_file_open_std*
+ * functions, you can get a handle to an APR struct that works with
+ * the APR functions which are supposed to work identically on all
+ * platforms.
+ */
+APR_DECLARE(apr_status_t) apr_file_open_stderr(apr_file_t **thefile,
+                                               apr_pool_t *pool);
+
+/**
+ * open standard output as an apr file pointer.
+ * @param thefile The apr file to use as stdout.
+ * @param pool The pool to allocate the file out of.
+ * 
+ * @remark See remarks for apr_file_open_stderr.
+ */
+APR_DECLARE(apr_status_t) apr_file_open_stdout(apr_file_t **thefile,
+                                               apr_pool_t *pool);
+
+/**
+ * open standard input as an apr file pointer.
+ * @param thefile The apr file to use as stdin.
+ * @param pool The pool to allocate the file out of.
+ * 
+ * @remark See remarks for apr_file_open_stderr.
+ */
+APR_DECLARE(apr_status_t) apr_file_open_stdin(apr_file_t **thefile,
+                                              apr_pool_t *pool);
+
+/**
+ * open standard error as an apr file pointer, with flags.
+ * @param thefile The apr file to use as stderr.
+ * @param flags The flags to open the file with. Only the APR_EXCL,
+ *              APR_BUFFERED, APR_XTHREAD, APR_SHARELOCK, 
+ *              APR_SENDFILE_ENABLED and APR_LARGEFILE flags should
+ *              be used. The APR_WRITE flag will be set unconditionally.
+ * @param pool The pool to allocate the file out of.
+ * 
+ * @remark See remarks for apr_file_open_stderr.
+ */
+APR_DECLARE(apr_status_t) apr_file_open_flags_stderr(apr_file_t **thefile,
+                                                     apr_int32_t flags,
+                                                     apr_pool_t *pool);
+
+/**
+ * open standard output as an apr file pointer, with flags.
+ * @param thefile The apr file to use as stdout.
+ * @param flags The flags to open the file with. Only the APR_EXCL,
+ *              APR_BUFFERED, APR_XTHREAD, APR_SHARELOCK, 
+ *              APR_SENDFILE_ENABLED and APR_LARGEFILE flags should
+ *              be used. The APR_WRITE flag will be set unconditionally.
+ * @param pool The pool to allocate the file out of.
+ * 
+ * @remark See remarks for apr_file_open_stderr.
+ */
+APR_DECLARE(apr_status_t) apr_file_open_flags_stdout(apr_file_t **thefile,
+                                                     apr_int32_t flags,
+                                                     apr_pool_t *pool);
+
+/**
+ * open standard input as an apr file pointer, with flags.
+ * @param thefile The apr file to use as stdin.
+ * @param flags The flags to open the file with. Only the APR_EXCL,
+ *              APR_BUFFERED, APR_XTHREAD, APR_SHARELOCK, 
+ *              APR_SENDFILE_ENABLED and APR_LARGEFILE flags should
+ *              be used. The APR_READ flag will be set unconditionally.
+ * @param pool The pool to allocate the file out of.
+ * 
+ * @remark See remarks for apr_file_open_stderr.
+ */
+APR_DECLARE(apr_status_t) apr_file_open_flags_stdin(apr_file_t **thefile,
+                                                     apr_int32_t flags,
+                                                     apr_pool_t *pool);
+
+/**
+ * Read data from the specified file.
+ * @param thefile The file descriptor to read from.
+ * @param buf The buffer to store the data to.
+ * @param nbytes On entry, the number of bytes to read; on exit, the number
+ * of bytes read.
+ *
+ * @remark apr_file_read will read up to the specified number of
+ * bytes, but never more.  If there isn't enough data to fill that
+ * number of bytes, all of the available data is read.  The third
+ * argument is modified to reflect the number of bytes read.  If a
+ * char was put back into the stream via ungetc, it will be the first
+ * character returned.
+ *
+ * @remark It is not possible for both bytes to be read and an APR_EOF
+ * or other error to be returned.  APR_EINTR is never returned.
+ */
+APR_DECLARE(apr_status_t) apr_file_read(apr_file_t *thefile, void *buf,
+                                        apr_size_t *nbytes);
+
+/**
+ * Write data to the specified file.
+ * @param thefile The file descriptor to write to.
+ * @param buf The buffer which contains the data.
+ * @param nbytes On entry, the number of bytes to write; on exit, the number 
+ *               of bytes written.
+ *
+ * @remark apr_file_write will write up to the specified number of
+ * bytes, but never more.  If the OS cannot write that many bytes, it
+ * will write as many as it can.  The third argument is modified to
+ * reflect the * number of bytes written.
+ *
+ * @remark It is possible for both bytes to be written and an error to
+ * be returned.  APR_EINTR is never returned.
+ */
+APR_DECLARE(apr_status_t) apr_file_write(apr_file_t *thefile, const void *buf,
+                                         apr_size_t *nbytes);
+
+/**
+ * Write data from iovec array to the specified file.
+ * @param thefile The file descriptor to write to.
+ * @param vec The array from which to get the data to write to the file.
+ * @param nvec The number of elements in the struct iovec array. This must 
+ *             be smaller than APR_MAX_IOVEC_SIZE.  If it isn't, the function 
+ *             will fail with APR_EINVAL.
+ * @param nbytes The number of bytes written.
+ *
+ * @remark It is possible for both bytes to be written and an error to
+ * be returned.  APR_EINTR is never returned.
+ *
+ * @remark apr_file_writev is available even if the underlying
+ * operating system doesn't provide writev().
+ */
+APR_DECLARE(apr_status_t) apr_file_writev(apr_file_t *thefile,
+                                          const struct iovec *vec,
+                                          apr_size_t nvec, apr_size_t *nbytes);
+
+/**
+ * Read data from the specified file, ensuring that the buffer is filled
+ * before returning.
+ * @param thefile The file descriptor to read from.
+ * @param buf The buffer to store the data to.
+ * @param nbytes The number of bytes to read.
+ * @param bytes_read If non-NULL, this will contain the number of bytes read.
+ *
+ * @remark apr_file_read will read up to the specified number of
+ * bytes, but never more.  If there isn't enough data to fill that
+ * number of bytes, then the process/thread will block until it is
+ * available or EOF is reached.  If a char was put back into the
+ * stream via ungetc, it will be the first character returned.
+ *
+ * @remark It is possible for both bytes to be read and an error to be
+ * returned.  And if *bytes_read is less than nbytes, an accompanying
+ * error is _always_ returned.
+ *
+ * @remark APR_EINTR is never returned.
+ */
+APR_DECLARE(apr_status_t) apr_file_read_full(apr_file_t *thefile, void *buf,
+                                             apr_size_t nbytes,
+                                             apr_size_t *bytes_read);
+
+/**
+ * Write data to the specified file, ensuring that all of the data is
+ * written before returning.
+ * @param thefile The file descriptor to write to.
+ * @param buf The buffer which contains the data.
+ * @param nbytes The number of bytes to write.
+ * @param bytes_written If non-NULL, set to the number of bytes written.
+ * 
+ * @remark apr_file_write will write up to the specified number of
+ * bytes, but never more.  If the OS cannot write that many bytes, the
+ * process/thread will block until they can be written. Exceptional
+ * error such as "out of space" or "pipe closed" will terminate with
+ * an error.
+ *
+ * @remark It is possible for both bytes to be written and an error to
+ * be returned.  And if *bytes_written is less than nbytes, an
+ * accompanying error is _always_ returned.
+ *
+ * @remark APR_EINTR is never returned.
+ */
+APR_DECLARE(apr_status_t) apr_file_write_full(apr_file_t *thefile, 
+                                              const void *buf,
+                                              apr_size_t nbytes, 
+                                              apr_size_t *bytes_written);
+
+
+/**
+ * Write data from iovec array to the specified file, ensuring that all of the
+ * data is written before returning.
+ * @param thefile The file descriptor to write to.
+ * @param vec The array from which to get the data to write to the file.
+ * @param nvec The number of elements in the struct iovec array. This must 
+ *             be smaller than APR_MAX_IOVEC_SIZE.  If it isn't, the function 
+ *             will fail with APR_EINVAL.
+ * @param nbytes The number of bytes written.
+ *
+ * @remark apr_file_writev_full is available even if the underlying
+ * operating system doesn't provide writev().
+ */
+APR_DECLARE(apr_status_t) apr_file_writev_full(apr_file_t *thefile,
+                                               const struct iovec *vec,
+                                               apr_size_t nvec,
+                                               apr_size_t *nbytes);
+/**
+ * Write a character into the specified file.
+ * @param ch The character to write.
+ * @param thefile The file descriptor to write to
+ */
+APR_DECLARE(apr_status_t) apr_file_putc(char ch, apr_file_t *thefile);
+
+/**
+ * Read a character from the specified file.
+ * @param ch The character to read into
+ * @param thefile The file descriptor to read from
+ */
+APR_DECLARE(apr_status_t) apr_file_getc(char *ch, apr_file_t *thefile);
+
+/**
+ * Put a character back onto a specified stream.
+ * @param ch The character to write.
+ * @param thefile The file descriptor to write to
+ */
+APR_DECLARE(apr_status_t) apr_file_ungetc(char ch, apr_file_t *thefile);
+
+/**
+ * Read a line from the specified file
+ * @param str The buffer to store the string in. 
+ * @param len The length of the string
+ * @param thefile The file descriptor to read from
+ * @remark The buffer will be NUL-terminated if any characters are stored.
+ *         The newline at the end of the line will not be stripped.
+ */
+APR_DECLARE(apr_status_t) apr_file_gets(char *str, int len, 
+                                        apr_file_t *thefile);
+
+/**
+ * Write the string into the specified file.
+ * @param str The string to write. 
+ * @param thefile The file descriptor to write to
+ */
+APR_DECLARE(apr_status_t) apr_file_puts(const char *str, apr_file_t *thefile);
+
+/**
+ * Flush the file's buffer.
+ * @param thefile The file descriptor to flush
+ */
+APR_DECLARE(apr_status_t) apr_file_flush(apr_file_t *thefile);
+
+/**
+ * Transfer all file modified data and metadata to disk.
+ * @param thefile The file descriptor to sync
+ */
+APR_DECLARE(apr_status_t) apr_file_sync(apr_file_t *thefile);
+
+/**
+ * Transfer all file modified data to disk.
+ * @param thefile The file descriptor to sync
+ */
+APR_DECLARE(apr_status_t) apr_file_datasync(apr_file_t *thefile);
+
+/**
+ * Duplicate the specified file descriptor.
+ * @param new_file The structure to duplicate into. 
+ * @param old_file The file to duplicate.
+ * @param p The pool to use for the new file.
+ * @remark *new_file must point to a valid apr_file_t, or point to NULL.
+ */         
+APR_DECLARE(apr_status_t) apr_file_dup(apr_file_t **new_file,
+                                       apr_file_t *old_file,
+                                       apr_pool_t *p);
+
+/**
+ * Duplicate the specified file descriptor and close the original
+ * @param new_file The old file that is to be closed and reused
+ * @param old_file The file to duplicate
+ * @param p        The pool to use for the new file
+ *
+ * @remark new_file MUST point at a valid apr_file_t. It cannot be NULL.
+ */
+APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file,
+                                        apr_file_t *old_file,
+                                        apr_pool_t *p);
+
+/**
+ * Move the specified file descriptor to a new pool
+ * @param new_file Pointer in which to return the new apr_file_t
+ * @param old_file The file to move
+ * @param p        The pool to which the descriptor is to be moved
+ * @remark Unlike apr_file_dup2(), this function doesn't do an
+ *         OS dup() operation on the underlying descriptor; it just
+ *         moves the descriptor's apr_file_t wrapper to a new pool.
+ * @remark The new pool need not be an ancestor of old_file's pool.
+ * @remark After calling this function, old_file may not be used
+ */
+APR_DECLARE(apr_status_t) apr_file_setaside(apr_file_t **new_file,
+                                            apr_file_t *old_file,
+                                            apr_pool_t *p);
+
+/**
+ * Give the specified apr file handle a new buffer 
+ * @param thefile  The file handle that is to be modified
+ * @param buffer   The buffer
+ * @param bufsize  The size of the buffer
+ * @remark It is possible to add a buffer to previously unbuffered
+ *         file handles, the APR_BUFFERED flag will be added to
+ *         the file handle's flags. Likewise, with buffer=NULL and
+ *         bufsize=0 arguments it is possible to make a previously
+ *         buffered file handle unbuffered.
+ */
+APR_DECLARE(apr_status_t) apr_file_buffer_set(apr_file_t *thefile,
+                                              char * buffer,
+                                              apr_size_t bufsize);
+
+/**
+ * Get the size of any buffer for the specified apr file handle 
+ * @param thefile  The file handle 
+ */
+APR_DECLARE(apr_size_t) apr_file_buffer_size_get(apr_file_t *thefile);
+
+/**
+ * Move the read/write file offset to a specified byte within a file.
+ * @param thefile The file descriptor
+ * @param where How to move the pointer, one of:
+ * <PRE>
+ *            APR_SET  --  set the offset to offset
+ *            APR_CUR  --  add the offset to the current position 
+ *            APR_END  --  add the offset to the current file size 
+ * </PRE>
+ * @param offset The offset to move the pointer to.
+ * @remark The third argument is modified to be the offset the pointer
+          was actually moved to.
+ */
+APR_DECLARE(apr_status_t) apr_file_seek(apr_file_t *thefile, 
+                                   apr_seek_where_t where,
+                                   apr_off_t *offset);
+
+/**
+ * Create an anonymous pipe.
+ * @param in The newly created pipe's file for reading.
+ * @param out The newly created pipe's file for writing.
+ * @param pool The pool to operate on.
+ * @remark By default, the returned file descriptors will be inherited
+ * by child processes created using apr_proc_create().  This can be
+ * changed using apr_file_inherit_unset().
+ * @bug  Some platforms cannot toggle between blocking and nonblocking,
+ * and when passing a pipe as a standard handle to an application which
+ * does not expect it, a non-blocking stream will fluxor the client app.
+ * @deprecated @see apr_file_pipe_create_ex
+ */
+APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, 
+                                               apr_file_t **out,
+                                               apr_pool_t *pool);
+
+/**
+ * Create an anonymous pipe which portably supports async timeout options.
+ * @param in The newly created pipe's file for reading.
+ * @param out The newly created pipe's file for writing.
+ * @param blocking one of these values defined in apr_thread_proc.h;
+ * @param pool The pool to operate on.
+ * <pre>
+ *       APR_FULL_BLOCK
+ *       APR_READ_BLOCK
+ *       APR_WRITE_BLOCK
+ *       APR_FULL_NONBLOCK
+ * </pre>
+ * @remark By default, the returned file descriptors will be inherited
+ * by child processes created using apr_proc_create().  This can be
+ * changed using apr_file_inherit_unset().
+ * @remark Some platforms cannot toggle between blocking and nonblocking,
+ * and when passing a pipe as a standard handle to an application which
+ * does not expect it, a non-blocking stream will fluxor the client app.
+ * Use this function rather than apr_file_pipe_create to create pipes 
+ * where one or both ends require non-blocking semantics.
+ */
+APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in, 
+                                                  apr_file_t **out, 
+                                                  apr_int32_t blocking, 
+                                                  apr_pool_t *pool);
+
+/**
+ * Create a named pipe.
+ * @param filename The filename of the named pipe
+ * @param perm The permissions for the newly created pipe.
+ * @param pool The pool to operate on.
+ */
+APR_DECLARE(apr_status_t) apr_file_namedpipe_create(const char *filename, 
+                                                    apr_fileperms_t perm, 
+                                                    apr_pool_t *pool);
+
+/**
+ * Get the timeout value for a pipe or manipulate the blocking state.
+ * @param thepipe The pipe we are getting a timeout for.
+ * @param timeout The current timeout value in microseconds. 
+ */
+APR_DECLARE(apr_status_t) apr_file_pipe_timeout_get(apr_file_t *thepipe, 
+                                               apr_interval_time_t *timeout);
+
+/**
+ * Set the timeout value for a pipe or manipulate the blocking state.
+ * @param thepipe The pipe we are setting a timeout on.
+ * @param timeout The timeout value in microseconds.  Values < 0 mean wait 
+ *        forever, 0 means do not wait at all.
+ */
+APR_DECLARE(apr_status_t) apr_file_pipe_timeout_set(apr_file_t *thepipe, 
+                                                  apr_interval_time_t timeout);
+
+/** file (un)locking functions. */
+
+/**
+ * Establish a lock on the specified, open file. The lock may be advisory
+ * or mandatory, at the discretion of the platform. The lock applies to
+ * the file as a whole, rather than a specific range. Locks are established
+ * on a per-thread/process basis; a second lock by the same thread will not
+ * block.
+ * @param thefile The file to lock.
+ * @param type The type of lock to establish on the file.
+ */
+APR_DECLARE(apr_status_t) apr_file_lock(apr_file_t *thefile, int type);
+
+/**
+ * Remove any outstanding locks on the file.
+ * @param thefile The file to unlock.
+ */
+APR_DECLARE(apr_status_t) apr_file_unlock(apr_file_t *thefile);
+
+/**accessor and general file_io functions. */
+
+/**
+ * return the file name of the current file.
+ * @param new_path The path of the file.  
+ * @param thefile The currently open file.
+ */                     
+APR_DECLARE(apr_status_t) apr_file_name_get(const char **new_path, 
+                                            apr_file_t *thefile);
+    
+/**
+ * Return the data associated with the current file.
+ * @param data The user data associated with the file.  
+ * @param key The key to use for retrieving data associated with this file.
+ * @param file The currently open file.
+ */                     
+APR_DECLARE(apr_status_t) apr_file_data_get(void **data, const char *key, 
+                                            apr_file_t *file);
+
+/**
+ * Set the data associated with the current file.
+ * @param file The currently open file.
+ * @param data The user data to associate with the file.  
+ * @param key The key to use for associating data with the file.
+ * @param cleanup The cleanup routine to use when the file is destroyed.
+ */                     
+APR_DECLARE(apr_status_t) apr_file_data_set(apr_file_t *file, void *data,
+                                            const char *key,
+                                            apr_status_t (*cleanup)(void *));
+
+/**
+ * Write a string to a file using a printf format.
+ * @param fptr The file to write to.
+ * @param format The format string
+ * @param ... The values to substitute in the format string
+ * @return The number of bytes written
+ */ 
+APR_DECLARE_NONSTD(int) apr_file_printf(apr_file_t *fptr, 
+                                        const char *format, ...)
+        __attribute__((format(printf,2,3)));
+
+/**
+ * set the specified file's permission bits.
+ * @param fname The file (name) to apply the permissions to.
+ * @param perms The permission bits to apply to the file.
+ *
+ * @warning Some platforms may not be able to apply all of the
+ * available permission bits; APR_INCOMPLETE will be returned if some
+ * permissions are specified which could not be set.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_file_perms_set(const char *fname,
+                                             apr_fileperms_t perms);
+
+/**
+ * Set attributes of the specified file.
+ * @param fname The full path to the file (using / on all systems)
+ * @param attributes Or'd combination of
+ * <PRE>
+ *            APR_FILE_ATTR_READONLY   - make the file readonly
+ *            APR_FILE_ATTR_EXECUTABLE - make the file executable
+ *            APR_FILE_ATTR_HIDDEN     - make the file hidden
+ * </PRE>
+ * @param attr_mask Mask of valid bits in attributes.
+ * @param pool the pool to use.
+ * @remark This function should be used in preference to explicit manipulation
+ *      of the file permissions, because the operations to provide these
+ *      attributes are platform specific and may involve more than simply
+ *      setting permission bits.
+ * @warning Platforms which do not implement this feature will return
+ *      APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_file_attrs_set(const char *fname,
+                                             apr_fileattrs_t attributes,
+                                             apr_fileattrs_t attr_mask,
+                                             apr_pool_t *pool);
+
+/**
+ * Set the mtime of the specified file.
+ * @param fname The full path to the file (using / on all systems)
+ * @param mtime The mtime to apply to the file.
+ * @param pool The pool to use.
+ * @warning Platforms which do not implement this feature will return
+ *      APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_file_mtime_set(const char *fname,
+                                             apr_time_t mtime,
+                                             apr_pool_t *pool);
+
+/**
+ * Create a new directory on the file system.
+ * @param path the path for the directory to be created. (use / on all systems)
+ * @param perm Permissions for the new directory.
+ * @param pool the pool to use.
+ */                        
+APR_DECLARE(apr_status_t) apr_dir_make(const char *path, apr_fileperms_t perm, 
+                                       apr_pool_t *pool);
+
+/** Creates a new directory on the file system, but behaves like
+ * 'mkdir -p'. Creates intermediate directories as required. No error
+ * will be reported if PATH already exists.
+ * @param path the path for the directory to be created. (use / on all systems)
+ * @param perm Permissions for the new directory.
+ * @param pool the pool to use.
+ */
+APR_DECLARE(apr_status_t) apr_dir_make_recursive(const char *path,
+                                                 apr_fileperms_t perm,
+                                                 apr_pool_t *pool);
+
+/**
+ * Remove directory from the file system.
+ * @param path the path for the directory to be removed. (use / on all systems)
+ * @param pool the pool to use.
+ * @remark Removing a directory which is in-use (e.g., the current working
+ * directory, or during apr_dir_read, or with an open file) is not portable.
+ */                        
+APR_DECLARE(apr_status_t) apr_dir_remove(const char *path, apr_pool_t *pool);
+
+/**
+ * get the specified file's stats.
+ * @param finfo Where to store the information about the file.
+ * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values 
+ * @param thefile The file to get information about.
+ */ 
+APR_DECLARE(apr_status_t) apr_file_info_get(apr_finfo_t *finfo, 
+                                            apr_int32_t wanted,
+                                            apr_file_t *thefile);
+    
+
+/**
+ * Truncate the file's length to the specified offset
+ * @param fp The file to truncate
+ * @param offset The offset to truncate to.
+ * @remark The read/write file offset is repositioned to offset.
+ */
+APR_DECLARE(apr_status_t) apr_file_trunc(apr_file_t *fp, apr_off_t offset);
+
+/**
+ * Retrieve the flags that were passed into apr_file_open()
+ * when the file was opened.
+ * @return apr_int32_t the flags
+ */
+APR_DECLARE(apr_int32_t) apr_file_flags_get(apr_file_t *f);
+
+/**
+ * Get the pool used by the file.
+ */
+APR_POOL_DECLARE_ACCESSOR(file);
+
+/**
+ * Set a file to be inherited by child processes.
+ *
+ */
+APR_DECLARE_INHERIT_SET(file);
+
+/**
+ * Unset a file from being inherited by child processes.
+ */
+APR_DECLARE_INHERIT_UNSET(file);
+
+/**
+ * Open a temporary file
+ * @param fp The apr file to use as a temporary file.
+ * @param templ The template to use when creating a temp file.
+ * @param flags The flags to open the file with. If this is zero,
+ *              the file is opened with 
+ *              APR_CREATE | APR_READ | APR_WRITE | APR_EXCL | APR_DELONCLOSE
+ * @param p The pool to allocate the file out of.
+ * @remark   
+ * This function  generates  a unique temporary file name from template.  
+ * The last six characters of template must be XXXXXX and these are replaced 
+ * with a string that makes the filename unique. Since it will  be  modified,
+ * template must not be a string constant, but should be declared as a character
+ * array.  
+ *
+ */
+APR_DECLARE(apr_status_t) apr_file_mktemp(apr_file_t **fp, char *templ,
+                                          apr_int32_t flags, apr_pool_t *p);
+
+
+/**
+ * Find an existing directory suitable as a temporary storage location.
+ * @param temp_dir The temp directory.
+ * @param p The pool to use for any necessary allocations.
+ * @remark   
+ * This function uses an algorithm to search for a directory that an
+ * an application can use for temporary storage.
+ *
+ */
+APR_DECLARE(apr_status_t) apr_temp_dir_get(const char **temp_dir, 
+                                           apr_pool_t *p);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_FILE_IO_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_fnmatch.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_fnmatch.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_fnmatch.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)fnmatch.h	8.1 (Berkeley) 6/2/93
+ */
+
+/* This file has been modified by the Apache Software Foundation. */
+#ifndef	_APR_FNMATCH_H_
+#define	_APR_FNMATCH_H_
+
+/**
+ * @file apr_fnmatch.h
+ * @brief APR FNMatch Functions
+ */
+
+#include "apr_errno.h"
+#include "apr_tables.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup apr_fnmatch Filename Matching Functions
+ * @ingroup APR 
+ * @{
+ */
+
+#define APR_FNM_NOMATCH     1     /**< Match failed. */
+ 
+#define APR_FNM_NOESCAPE    0x01  /**< Disable backslash escaping. */
+#define APR_FNM_PATHNAME    0x02  /**< Slash must be matched by slash. */
+#define APR_FNM_PERIOD      0x04  /**< Period must be matched by period. */
+#define APR_FNM_CASE_BLIND  0x08  /**< Compare characters case-insensitively.
+                                   * @remark This flag is an Apache addition 
+                                   */
+
+/**
+ * Try to match the string to the given pattern, return APR_SUCCESS if
+ *    match, else return APR_FNM_NOMATCH.  Note that there is no such thing as
+ *    an illegal pattern.
+ *
+ * With all flags unset, a pattern is interpreted as such:
+ *
+ * PATTERN: Backslash followed by any character, including another
+ *          backslash.<br/>
+ * MATCHES: That character exactly.
+ * 
+ * <p>
+ * PATTERN: ?<br/>
+ * MATCHES: Any single character.
+ * </p>
+ * 
+ * <p>
+ * PATTERN: *<br/>
+ * MATCHES: Any sequence of zero or more characters. (Note that multiple
+ *          *s in a row are equivalent to one.)
+ * 
+ * PATTERN: Any character other than \?*[ or a \ at the end of the pattern<br/>
+ * MATCHES: That character exactly. (Case sensitive.)
+ * 
+ * PATTERN: [ followed by a class description followed by ]<br/>
+ * MATCHES: A single character described by the class description.
+ *          (Never matches, if the class description reaches until the
+ *          end of the string without a ].) If the first character of
+ *          the class description is ^ or !, the sense of the description
+ *          is reversed.  The rest of the class description is a list of
+ *          single characters or pairs of characters separated by -. Any
+ *          of those characters can have a backslash in front of them,
+ *          which is ignored; this lets you use the characters ] and -
+ *          in the character class, as well as ^ and ! at the
+ *          beginning.  The pattern matches a single character if it
+ *          is one of the listed characters or falls into one of the
+ *          listed ranges (inclusive, case sensitive).  Ranges with
+ *          the first character larger than the second are legal but
+ *          never match. Edge cases: [] never matches, and [^] and [!]
+ *          always match without consuming a character.
+ * 
+ * Note that these patterns attempt to match the entire string, not
+ * just find a substring matching the pattern.
+ *
+ * @param pattern The pattern to match to
+ * @param strings The string we are trying to match
+ * @param flags flags to use in the match.  Bitwise OR of:
+ * <pre>
+ *              APR_FNM_NOESCAPE       Disable backslash escaping
+ *              APR_FNM_PATHNAME       Slash must be matched by slash
+ *              APR_FNM_PERIOD         Period must be matched by period
+ *              APR_FNM_CASE_BLIND     Compare characters case-insensitively.
+ * </pre>
+ */
+
+APR_DECLARE(apr_status_t) apr_fnmatch(const char *pattern, 
+                                      const char *strings, int flags);
+
+/**
+ * Determine if the given pattern is a regular expression.
+ * @param pattern The pattern to search for glob characters.
+ * @return non-zero if pattern has any glob characters in it
+ */
+APR_DECLARE(int) apr_fnmatch_test(const char *pattern);
+
+/**
+ * Find all files that match a specified pattern.
+ * @param pattern The pattern to use for finding files.
+ * @param result Array to use when storing the results
+ * @param p The pool to use.
+ * @return non-zero if pattern has any glob characters in it
+ */
+APR_DECLARE(apr_status_t) apr_match_glob(const char *pattern, 
+                                         apr_array_header_t **result,
+                                         apr_pool_t *p);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_APR_FNMATCH_H_ */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_general.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_general.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_general.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,243 @@
+/* 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.
+ */
+
+#ifndef APR_GENERAL_H
+#define APR_GENERAL_H
+
+/**
+ * @file apr_general.h
+ * This is collection of oddballs that didn't fit anywhere else,
+ * and might move to more appropriate headers with the release
+ * of APR 1.0.
+ * @brief APR Miscellaneous library routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#if APR_HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_general Miscellaneous library routines
+ * @ingroup APR 
+ * This is collection of oddballs that didn't fit anywhere else,
+ * and might move to more appropriate headers with the release
+ * of APR 1.0.
+ * @{
+ */
+
+/** FALSE */
+#ifndef FALSE
+#define FALSE 0
+#endif
+/** TRUE */
+#ifndef TRUE
+#define TRUE (!FALSE)
+#endif
+
+/** a space */
+#define APR_ASCII_BLANK  '\040'
+/** a carrige return */
+#define APR_ASCII_CR     '\015'
+/** a line feed */
+#define APR_ASCII_LF     '\012'
+/** a tab */
+#define APR_ASCII_TAB    '\011'
+
+/** signal numbers typedef */
+typedef int               apr_signum_t;
+
+/**
+ * Finding offsets of elements within structures.
+ * Taken from the X code... they've sweated portability of this stuff
+ * so we don't have to.  Sigh...
+ * @param p_type pointer type name
+ * @param field  data field within the structure pointed to
+ * @return offset
+ */
+
+#if defined(CRAY) || (defined(__arm) && !(defined(LINUX) || defined(__FreeBSD__)))
+#ifdef __STDC__
+#define APR_OFFSET(p_type,field) _Offsetof(p_type,field)
+#else
+#ifdef CRAY2
+#define APR_OFFSET(p_type,field) \
+        (sizeof(int)*((unsigned int)&(((p_type)NULL)->field)))
+
+#else /* !CRAY2 */
+
+#define APR_OFFSET(p_type,field) ((unsigned int)&(((p_type)NULL)->field))
+
+#endif /* !CRAY2 */
+#endif /* __STDC__ */
+#else /* ! (CRAY || __arm) */
+
+#define APR_OFFSET(p_type,field) \
+        ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
+
+#endif /* !CRAY */
+
+/**
+ * Finding offsets of elements within structures.
+ * @param s_type structure type name
+ * @param field  data field within the structure
+ * @return offset
+ */
+#if defined(offsetof) && !defined(__cplusplus)
+#define APR_OFFSETOF(s_type,field) offsetof(s_type,field)
+#else
+#define APR_OFFSETOF(s_type,field) APR_OFFSET(s_type*,field)
+#endif
+
+#ifndef DOXYGEN
+
+/* A couple of prototypes for functions in case some platform doesn't 
+ * have it
+ */
+#if (!APR_HAVE_STRCASECMP) && (APR_HAVE_STRICMP) 
+#define strcasecmp(s1, s2) stricmp(s1, s2)
+#elif (!APR_HAVE_STRCASECMP)
+int strcasecmp(const char *a, const char *b);
+#endif
+
+#if (!APR_HAVE_STRNCASECMP) && (APR_HAVE_STRNICMP)
+#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
+#elif (!APR_HAVE_STRNCASECMP)
+int strncasecmp(const char *a, const char *b, size_t n);
+#endif
+
+#endif
+
+/**
+ * Alignment macros
+ */
+
+/* APR_ALIGN() is only to be used to align on a power of 2 boundary */
+#define APR_ALIGN(size, boundary) \
+    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
+
+/** Default alignment */
+#define APR_ALIGN_DEFAULT(size) APR_ALIGN(size, 8)
+
+
+/**
+ * String and memory functions
+ */
+
+/* APR_STRINGIFY is defined here, and also in apr_release.h, so wrap it */
+#ifndef APR_STRINGIFY
+/** Properly quote a value as a string in the C preprocessor */
+#define APR_STRINGIFY(n) APR_STRINGIFY_HELPER(n)
+/** Helper macro for APR_STRINGIFY */
+#define APR_STRINGIFY_HELPER(n) #n
+#endif
+
+#if (!APR_HAVE_MEMMOVE)
+#define memmove(a,b,c) bcopy(b,a,c)
+#endif
+
+#if (!APR_HAVE_MEMCHR)
+void *memchr(const void *s, int c, size_t n);
+#endif
+
+/** @} */
+
+/**
+ * @defgroup apr_library Library initialization and termination
+ * @{
+ */
+
+/**
+ * Setup any APR internal data structures.  This MUST be the first function 
+ * called for any APR library. It is safe to call apr_initialize several
+ * times as long as apr_terminate is called the same number of times.
+ * @remark See apr_app_initialize if this is an application, rather than
+ * a library consumer of apr.
+ */
+APR_DECLARE(apr_status_t) apr_initialize(void);
+
+/**
+ * Set up an application with normalized argc, argv (and optionally env) in
+ * order to deal with platform-specific oddities, such as Win32 services,
+ * code pages and signals.  This must be the first function called for any
+ * APR program.
+ * @param argc Pointer to the argc that may be corrected
+ * @param argv Pointer to the argv that may be corrected
+ * @param env Pointer to the env that may be corrected, may be NULL
+ * @remark See apr_initialize if this is a library consumer of apr.
+ * Otherwise, this call is identical to apr_initialize, and must be closed
+ * with a call to apr_terminate at the end of program execution.
+ */
+APR_DECLARE(apr_status_t) apr_app_initialize(int *argc, 
+                                             char const * const * *argv, 
+                                             char const * const * *env);
+
+/**
+ * Tear down any APR internal data structures which aren't torn down 
+ * automatically. apr_terminate must be called once for every call to
+ * apr_initialize() or apr_app_initialize().
+ * @remark An APR program must call this function at termination once it 
+ *         has stopped using APR services.  The APR developers suggest using
+ *         atexit to ensure this is called.  When using APR from a language
+ *         other than C that has problems with the calling convention, use
+ *         apr_terminate2() instead.
+ */
+APR_DECLARE_NONSTD(void) apr_terminate(void);
+
+/**
+ * Tear down any APR internal data structures which aren't torn down 
+ * automatically, same as apr_terminate
+ * @remark An APR program must call either the apr_terminate or apr_terminate2 
+ *         function once it it has finished using APR services.  The APR 
+ *         developers suggest using atexit(apr_terminate) to ensure this is done.
+ *         apr_terminate2 exists to allow non-c language apps to tear down apr, 
+ *         while apr_terminate is recommended from c language applications.
+ */
+APR_DECLARE(void) apr_terminate2(void);
+
+/** @} */
+
+/**
+ * @defgroup apr_random Random Functions
+ * @{
+ */
+
+#if APR_HAS_RANDOM || defined(DOXYGEN)
+
+/* TODO: I'm not sure this is the best place to put this prototype...*/
+/**
+ * Generate random bytes.
+ * @param buf Buffer to fill with random bytes
+ * @param length Length of buffer in bytes
+ */
+APR_DECLARE(apr_status_t) apr_generate_random_bytes(unsigned char * buf, 
+                                                    apr_size_t length);
+
+#endif
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_GENERAL_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_getopt.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_getopt.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_getopt.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,160 @@
+/* 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.
+ */
+
+#ifndef APR_GETOPT_H
+#define APR_GETOPT_H
+
+/**
+ * @file apr_getopt.h
+ * @brief APR Command Arguments (getopt)
+ */
+
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_getopt Command Argument Parsing
+ * @ingroup APR 
+ * @{
+ */
+
+/** 
+ * An @c apr_getopt_t error callback function.
+ *
+ * @a arg is this @c apr_getopt_t's @c errarg member.
+ */
+typedef void (apr_getopt_err_fn_t)(void *arg, const char *err, ...);
+
+/** @see apr_getopt_t */
+typedef struct apr_getopt_t apr_getopt_t;
+
+/**
+ * Structure to store command line argument information.
+ */ 
+struct apr_getopt_t {
+    /** context for processing */
+    apr_pool_t *cont;
+    /** function to print error message (NULL == no messages) */
+    apr_getopt_err_fn_t *errfn;
+    /** user defined first arg to pass to error message  */
+    void *errarg;
+    /** index into parent argv vector */
+    int ind;
+    /** character checked for validity */
+    int opt;
+    /** reset getopt */
+    int reset;
+    /** count of arguments */
+    int argc;
+    /** array of pointers to arguments */
+    const char **argv;
+    /** argument associated with option */
+    char const* place;
+    /** set to nonzero to support interleaving options with regular args */
+    int interleave;
+    /** start of non-option arguments skipped for interleaving */
+    int skip_start;
+    /** end of non-option arguments skipped for interleaving */
+    int skip_end;
+};
+
+/** @see apr_getopt_option_t */
+typedef struct apr_getopt_option_t apr_getopt_option_t;
+
+/**
+ * Structure used to describe options that getopt should search for.
+ */
+struct apr_getopt_option_t {
+    /** long option name, or NULL if option has no long name */
+    const char *name;
+    /** option letter, or a value greater than 255 if option has no letter */
+    int optch;
+    /** nonzero if option takes an argument */
+    int has_arg;
+    /** a description of the option */
+    const char *description;
+};
+
+/**
+ * Initialize the arguments for parsing by apr_getopt().
+ * @param os   The options structure created for apr_getopt()
+ * @param cont The pool to operate on
+ * @param argc The number of arguments to parse
+ * @param argv The array of arguments to parse
+ * @remark Arguments 3 and 4 are most commonly argc and argv from main(argc, argv)
+ * The (*os)->errfn is initialized to fprintf(stderr... but may be overridden.
+ */
+APR_DECLARE(apr_status_t) apr_getopt_init(apr_getopt_t **os, apr_pool_t *cont,
+                                      int argc, const char * const *argv);
+
+/**
+ * Parse the options initialized by apr_getopt_init().
+ * @param os     The apr_opt_t structure returned by apr_getopt_init()
+ * @param opts   A string of characters that are acceptable options to the 
+ *               program.  Characters followed by ":" are required to have an 
+ *               option associated
+ * @param option_ch  The next option character parsed
+ * @param option_arg The argument following the option character:
+ * @return There are four potential status values on exit. They are:
+ * <PRE>
+ *             APR_EOF      --  No more options to parse
+ *             APR_BADCH    --  Found a bad option character
+ *             APR_BADARG   --  No argument followed the option flag
+ *             APR_SUCCESS  --  The next option was found.
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_getopt(apr_getopt_t *os, const char *opts, 
+                                     char *option_ch, const char **option_arg);
+
+/**
+ * Parse the options initialized by apr_getopt_init(), accepting long
+ * options beginning with "--" in addition to single-character
+ * options beginning with "-".
+ * @param os     The apr_getopt_t structure created by apr_getopt_init()
+ * @param opts   A pointer to a list of apr_getopt_option_t structures, which
+ *               can be initialized with { "name", optch, has_args }.  has_args
+ *               is nonzero if the option requires an argument.  A structure
+ *               with an optch value of 0 terminates the list.
+ * @param option_ch  Receives the value of "optch" from the apr_getopt_option_t
+ *                   structure corresponding to the next option matched.
+ * @param option_arg Receives the argument following the option, if any.
+ * @return There are four potential status values on exit.   They are:
+ * <PRE>
+ *             APR_EOF      --  No more options to parse
+ *             APR_BADCH    --  Found a bad option character
+ *             APR_BADARG   --  No argument followed the option flag
+ *             APR_SUCCESS  --  The next option was found.
+ * </PRE>
+ * When APR_SUCCESS is returned, os->ind gives the index of the first
+ * non-option argument.  On error, a message will be printed to stdout unless
+ * os->err is set to 0.  If os->interleave is set to nonzero, options can come
+ * after arguments, and os->argv will be permuted to leave non-option arguments
+ * at the end (the original argv is unaffected).
+ */
+APR_DECLARE(apr_status_t) apr_getopt_long(apr_getopt_t *os,
+					  const apr_getopt_option_t *opts,
+					  int *option_ch,
+                                          const char **option_arg);
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_GETOPT_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_global_mutex.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_global_mutex.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_global_mutex.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,169 @@
+/* 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.
+ */
+
+#ifndef APR_GLOBAL_MUTEX_H
+#define APR_GLOBAL_MUTEX_H
+
+/**
+ * @file apr_global_mutex.h
+ * @brief APR Global Locking Routines
+ */
+
+#include "apr.h"
+#include "apr_proc_mutex.h"    /* only for apr_lockmech_e */
+#include "apr_pools.h"
+#include "apr_errno.h"
+#if APR_PROC_MUTEX_IS_GLOBAL
+#include "apr_proc_mutex.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup APR_GlobalMutex Global Locking Routines
+ * @ingroup APR 
+ * @{
+ */
+
+#if !APR_PROC_MUTEX_IS_GLOBAL || defined(DOXYGEN)
+
+/** Opaque global mutex structure. */
+typedef struct apr_global_mutex_t apr_global_mutex_t;
+
+/*   Function definitions */
+
+/**
+ * Create and initialize a mutex that can be used to synchronize both
+ * processes and threads. Note: There is considerable overhead in using
+ * this API if only cross-process or cross-thread mutual exclusion is
+ * required. See apr_proc_mutex.h and apr_thread_mutex.h for more
+ * specialized lock routines.
+ * @param mutex the memory address where the newly created mutex will be
+ *        stored.
+ * @param fname A file name to use if the lock mechanism requires one.  This
+ *        argument should always be provided.  The lock code itself will
+ *        determine if it should be used.
+ * @param mech The mechanism to use for the interprocess lock, if any; one of
+ * <PRE>
+ *            APR_LOCK_FCNTL
+ *            APR_LOCK_FLOCK
+ *            APR_LOCK_SYSVSEM
+ *            APR_LOCK_POSIXSEM
+ *            APR_LOCK_PROC_PTHREAD
+ *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
+ * </PRE>
+ * @param pool the pool from which to allocate the mutex.
+ * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
+ *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
+ */
+APR_DECLARE(apr_status_t) apr_global_mutex_create(apr_global_mutex_t **mutex,
+                                                  const char *fname,
+                                                  apr_lockmech_e mech,
+                                                  apr_pool_t *pool);
+
+/**
+ * Re-open a mutex in a child process.
+ * @param mutex The newly re-opened mutex structure.
+ * @param fname A file name to use if the mutex mechanism requires one.  This
+ *              argument should always be provided.  The mutex code itself will
+ *              determine if it should be used.  This filename should be the 
+ *              same one that was passed to apr_global_mutex_create().
+ * @param pool The pool to operate on.
+ * @remark This function must be called to maintain portability, even
+ *         if the underlying lock mechanism does not require it.
+ */
+APR_DECLARE(apr_status_t) apr_global_mutex_child_init(
+                              apr_global_mutex_t **mutex,
+                              const char *fname,
+                              apr_pool_t *pool);
+
+/**
+ * Acquire the lock for the given mutex. If the mutex is already locked,
+ * the current thread will be put to sleep until the lock becomes available.
+ * @param mutex the mutex on which to acquire the lock.
+ */
+APR_DECLARE(apr_status_t) apr_global_mutex_lock(apr_global_mutex_t *mutex);
+
+/**
+ * Attempt to acquire the lock for the given mutex. If the mutex has already
+ * been acquired, the call returns immediately with APR_EBUSY. Note: it
+ * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
+ * if the return value was APR_EBUSY, for portability reasons.
+ * @param mutex the mutex on which to attempt the lock acquiring.
+ */
+APR_DECLARE(apr_status_t) apr_global_mutex_trylock(apr_global_mutex_t *mutex);
+
+/**
+ * Release the lock for the given mutex.
+ * @param mutex the mutex from which to release the lock.
+ */
+APR_DECLARE(apr_status_t) apr_global_mutex_unlock(apr_global_mutex_t *mutex);
+
+/**
+ * Destroy the mutex and free the memory associated with the lock.
+ * @param mutex the mutex to destroy.
+ */
+APR_DECLARE(apr_status_t) apr_global_mutex_destroy(apr_global_mutex_t *mutex);
+
+/**
+ * Return the name of the lockfile for the mutex, or NULL
+ * if the mutex doesn't use a lock file
+ */
+APR_DECLARE(const char *) apr_global_mutex_lockfile(apr_global_mutex_t *mutex);
+
+/**
+ * Display the name of the mutex, as it relates to the actual method used
+ * for the underlying apr_proc_mutex_t, if any.  NULL is returned if
+ * there is no underlying apr_proc_mutex_t.
+ * @param mutex the name of the mutex
+ */
+APR_DECLARE(const char *) apr_global_mutex_name(apr_global_mutex_t *mutex);
+
+/**
+ * Get the pool used by this global_mutex.
+ * @return apr_pool_t the pool
+ */
+APR_POOL_DECLARE_ACCESSOR(global_mutex);
+
+#else /* APR_PROC_MUTEX_IS_GLOBAL */
+
+/* Some platforms [e.g. Win32] have cross process locks that are truly
+ * global locks, since there isn't the concept of cross-process locks.
+ * Define these platforms in terms of an apr_proc_mutex_t.
+ */
+
+#define apr_global_mutex_t          apr_proc_mutex_t
+#define apr_global_mutex_create     apr_proc_mutex_create
+#define apr_global_mutex_child_init apr_proc_mutex_child_init
+#define apr_global_mutex_lock       apr_proc_mutex_lock
+#define apr_global_mutex_trylock    apr_proc_mutex_trylock
+#define apr_global_mutex_unlock     apr_proc_mutex_unlock
+#define apr_global_mutex_destroy    apr_proc_mutex_destroy
+#define apr_global_mutex_lockfile   apr_proc_mutex_lockfile
+#define apr_global_mutex_name       apr_proc_mutex_name
+#define apr_global_mutex_pool_get   apr_proc_mutex_pool_get
+
+#endif
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ndef APR_GLOBAL_MUTEX_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hash.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hash.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hash.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,261 @@
+/* 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.
+ */
+
+#ifndef APR_HASH_H
+#define APR_HASH_H
+
+/**
+ * @file apr_hash.h
+ * @brief APR Hash Tables
+ */
+
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup apr_hash Hash Tables
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * When passing a key to apr_hash_set or apr_hash_get, this value can be
+ * passed to indicate a string-valued key, and have apr_hash compute the
+ * length automatically.
+ *
+ * @remark apr_hash will use strlen(key) for the length. The NUL terminator
+ *         is not included in the hash value (why throw a constant in?).
+ *         Since the hash table merely references the provided key (rather
+ *         than copying it), apr_hash_this() will return the NUL-term'd key.
+ */
+#define APR_HASH_KEY_STRING     (-1)
+
+/**
+ * Abstract type for hash tables.
+ */
+typedef struct apr_hash_t apr_hash_t;
+
+/**
+ * Abstract type for scanning hash tables.
+ */
+typedef struct apr_hash_index_t apr_hash_index_t;
+
+/**
+ * Callback functions for calculating hash values.
+ * @param key The key.
+ * @param klen The length of the key, or APR_HASH_KEY_STRING to use the string 
+ *             length. If APR_HASH_KEY_STRING then returns the actual key length.
+ */
+typedef unsigned int (*apr_hashfunc_t)(const char *key, apr_ssize_t *klen);
+
+/**
+ * The default hash function.
+ */
+APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *key,
+                                                      apr_ssize_t *klen);
+
+/**
+ * Create a hash table.
+ * @param pool The pool to allocate the hash table out of
+ * @return The hash table just created
+  */
+APR_DECLARE(apr_hash_t *) apr_hash_make(apr_pool_t *pool);
+
+/**
+ * Create a hash table with a custom hash function
+ * @param pool The pool to allocate the hash table out of
+ * @param hash_func A custom hash function.
+ * @return The hash table just created
+  */
+APR_DECLARE(apr_hash_t *) apr_hash_make_custom(apr_pool_t *pool, 
+                                               apr_hashfunc_t hash_func);
+
+/**
+ * Make a copy of a hash table
+ * @param pool The pool from which to allocate the new hash table
+ * @param h The hash table to clone
+ * @return The hash table just created
+ * @remark Makes a shallow copy
+ */
+APR_DECLARE(apr_hash_t *) apr_hash_copy(apr_pool_t *pool,
+                                        const apr_hash_t *h);
+
+/**
+ * Associate a value with a key in a hash table.
+ * @param ht The hash table
+ * @param key Pointer to the key
+ * @param klen Length of the key. Can be APR_HASH_KEY_STRING to use the string length.
+ * @param val Value to associate with the key
+ * @remark If the value is NULL the hash entry is deleted.
+ */
+APR_DECLARE(void) apr_hash_set(apr_hash_t *ht, const void *key,
+                               apr_ssize_t klen, const void *val);
+
+/**
+ * Look up the value associated with a key in a hash table.
+ * @param ht The hash table
+ * @param key Pointer to the key
+ * @param klen Length of the key. Can be APR_HASH_KEY_STRING to use the string length.
+ * @return Returns NULL if the key is not present.
+ */
+APR_DECLARE(void *) apr_hash_get(apr_hash_t *ht, const void *key,
+                                 apr_ssize_t klen);
+
+/**
+ * Start iterating over the entries in a hash table.
+ * @param p The pool to allocate the apr_hash_index_t iterator. If this
+ *          pool is NULL, then an internal, non-thread-safe iterator is used.
+ * @param ht The hash table
+ * @return The iteration state
+ * @remark  There is no restriction on adding or deleting hash entries during
+ * an iteration (although the results may be unpredictable unless all you do
+ * is delete the current entry) and multiple iterations can be in
+ * progress at the same time.
+ *
+ * @par Example:
+ *
+ * @code
+ * int sum_values(apr_pool_t *p, apr_hash_t *ht)
+ * {
+ *     apr_hash_index_t *hi;
+ *     void *val;
+ *     int sum = 0;
+ *     for (hi = apr_hash_first(p, ht); hi; hi = apr_hash_next(hi)) {
+ *         apr_hash_this(hi, NULL, NULL, &val);
+ *         sum += *(int *)val;
+ *     }
+ *     return sum;
+ * }
+ * @endcode
+ */
+APR_DECLARE(apr_hash_index_t *) apr_hash_first(apr_pool_t *p, apr_hash_t *ht);
+
+/**
+ * Continue iterating over the entries in a hash table.
+ * @param hi The iteration state
+ * @return a pointer to the updated iteration state.  NULL if there are no more  
+ *         entries.
+ */
+APR_DECLARE(apr_hash_index_t *) apr_hash_next(apr_hash_index_t *hi);
+
+/**
+ * Get the current entry's details from the iteration state.
+ * @param hi The iteration state
+ * @param key Return pointer for the pointer to the key.
+ * @param klen Return pointer for the key length.
+ * @param val Return pointer for the associated value.
+ * @remark The return pointers should point to a variable that will be set to the
+ *         corresponding data, or they may be NULL if the data isn't interesting.
+ */
+APR_DECLARE(void) apr_hash_this(apr_hash_index_t *hi, const void **key, 
+                                apr_ssize_t *klen, void **val);
+
+/**
+ * Get the number of key/value pairs in the hash table.
+ * @param ht The hash table
+ * @return The number of key/value pairs in the hash table.
+ */
+APR_DECLARE(unsigned int) apr_hash_count(apr_hash_t *ht);
+
+/**
+ * Clear any key/value pairs in the hash table.
+ * @param ht The hash table
+ */
+APR_DECLARE(void) apr_hash_clear(apr_hash_t *ht);
+
+/**
+ * Merge two hash tables into one new hash table. The values of the overlay
+ * hash override the values of the base if both have the same key.  Both
+ * hash tables must use the same hash function.
+ * @param p The pool to use for the new hash table
+ * @param overlay The table to add to the initial table
+ * @param base The table that represents the initial values of the new table
+ * @return A new hash table containing all of the data from the two passed in
+ */
+APR_DECLARE(apr_hash_t *) apr_hash_overlay(apr_pool_t *p,
+                                           const apr_hash_t *overlay, 
+                                           const apr_hash_t *base);
+
+/**
+ * Merge two hash tables into one new hash table. If the same key
+ * is present in both tables, call the supplied merge function to
+ * produce a merged value for the key in the new table.  Both
+ * hash tables must use the same hash function.
+ * @param p The pool to use for the new hash table
+ * @param h1 The first of the tables to merge
+ * @param h2 The second of the tables to merge
+ * @param merger A callback function to merge values, or NULL to
+ *  make values from h1 override values from h2 (same semantics as
+ *  apr_hash_overlay())
+ * @param data Client data to pass to the merger function
+ * @return A new hash table containing all of the data from the two passed in
+ */
+APR_DECLARE(apr_hash_t *) apr_hash_merge(apr_pool_t *p,
+                                         const apr_hash_t *h1,
+                                         const apr_hash_t *h2,
+                                         void * (*merger)(apr_pool_t *p,
+                                                     const void *key,
+                                                     apr_ssize_t klen,
+                                                     const void *h1_val,
+                                                     const void *h2_val,
+                                                     const void *data),
+                                         const void *data);
+
+/**
+ * Declaration prototype for the iterator callback function of apr_hash_do().
+ *
+ * @param rec The data passed as the first argument to apr_hash_[v]do()
+ * @param key The key from this iteration of the hash table
+ * @param klen The key length from this iteration of the hash table
+ * @param value The value from this iteration of the hash table
+ * @remark Iteration continues while this callback function returns non-zero.
+ * To export the callback function for apr_hash_do() it must be declared 
+ * in the _NONSTD convention.
+ */
+typedef int (apr_hash_do_callback_fn_t)(void *rec, const void *key,
+                                                   apr_ssize_t klen,
+                                                   const void *value);
+
+/** 
+ * Iterate over a hash table running the provided function once for every
+ * element in the hash table. The @param comp function will be invoked for
+ * every element in the hash table.
+ *
+ * @param comp The function to run
+ * @param rec The data to pass as the first argument to the function
+ * @param ht The hash table to iterate over
+ * @return FALSE if one of the comp() iterations returned zero; TRUE if all
+ *            iterations returned non-zero
+ * @see apr_hash_do_callback_fn_t
+ */
+APR_DECLARE(int) apr_hash_do(apr_hash_do_callback_fn_t *comp,
+                             void *rec, const apr_hash_t *ht);
+
+/**
+ * Get a pointer to the pool which the hash table was created in
+ */
+APR_POOL_DECLARE_ACCESSOR(hash);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* !APR_HASH_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hooks.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hooks.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_hooks.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,358 @@
+/* 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.
+ */
+
+#ifndef APR_HOOKS_H
+#define APR_HOOKS_H
+
+#include "apu.h"
+/* For apr_array_header_t */
+#include "apr_tables.h"
+
+/**
+ * @file apr_hooks.h
+ * @brief Apache hook functions
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**
+ * @defgroup APR_Util_Hook Hook Functions
+ * @ingroup APR_Util
+ * @{
+ */
+
+/**
+ * @defgroup apr_hook_probes Hook probe capability
+ * APR hooks provide a trace probe capability for capturing
+ * the flow of control and return values with hooks.
+ *
+ * In order to use this facility, the application must define
+ * the symbol APR_HOOK_PROBES_ENABLED and the four APR_HOOK_PROBE_
+ * macros described below before including apr_hooks.h in files
+ * that use the APR_IMPLEMENT_EXTERNAL_HOOK_* macros.
+ *
+ * This probe facility is not provided for APR optional hooks.
+ * @{
+ */
+
+#ifdef APR_HOOK_PROBES_ENABLED
+#define APR_HOOK_INT_DCL_UD void *ud = NULL
+#else
+/** internal implementation detail to avoid the ud declaration when
+ * hook probes are not used
+ */
+#define APR_HOOK_INT_DCL_UD
+/**
+ * User-defined hook probe macro that is invoked when the hook
+ * is run, before calling any hook functions.
+ * @param ud A void * user data field that should be filled in by
+ * this macro, and will be provided to the other hook probe macros.
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_ENTRY(ud,ns,name,args)
+/**
+ * User-defined hook probe macro that is invoked after the hook
+ * has run.
+ * @param ud A void * user data field that was filled in by the user-
+ * provided APR_HOOK_PROBE_ENTRY().
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param rv The return value of the hook, or 0 if the hook is void.
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_RETURN(ud,ns,name,rv,args)
+/**
+ * User-defined hook probe macro that is invoked before calling a
+ * hook function.
+ * @param ud A void * user data field that was filled in by the user-
+ * provided APR_HOOK_PROBE_ENTRY().
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param src The value of apr_hook_debug_current at the time the function
+ * was hooked (usually the source file implementing the hook function).
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_INVOKE(ud,ns,name,src,args)
+/**
+ * User-defined hook probe macro that is invoked after calling a
+ * hook function.
+ * @param ud A void * user data field that was filled in by the user-
+ * provided APR_HOOK_PROBE_ENTRY().
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param src The value of apr_hook_debug_current at the time the function
+ * was hooked (usually the source file implementing the hook function).
+ * @param rv The return value of the hook function, or 0 if the hook is void.
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_COMPLETE(ud,ns,name,src,rv,args)
+#endif
+
+/** @} */
+
+/** macro to return the prototype of the hook function */    
+#define APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
+link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)
+
+/** macro to declare the hook correctly */    
+#define APR_DECLARE_EXTERNAL_HOOK(ns,link,ret,name,args) \
+typedef ret ns##_HOOK_##name##_t args; \
+link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf, \
+                                      const char * const *aszPre, \
+                                      const char * const *aszSucc, int nOrder); \
+link##_DECLARE(ret) ns##_run_##name args; \
+APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \
+typedef struct ns##_LINK_##name##_t \
+    { \
+    ns##_HOOK_##name##_t *pFunc; \
+    const char *szName; \
+    const char * const *aszPredecessors; \
+    const char * const *aszSuccessors; \
+    int nOrder; \
+    } ns##_LINK_##name##_t;
+
+/** macro to declare the hook structure */    
+#define APR_HOOK_STRUCT(members) \
+static struct { members } _hooks;
+
+/** macro to link the hook structure */
+#define APR_HOOK_LINK(name) \
+    apr_array_header_t *link_##name;
+
+/** macro to implement the hook */
+#define APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
+link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \
+                                      const char * const *aszSucc,int nOrder) \
+    { \
+    ns##_LINK_##name##_t *pHook; \
+    if(!_hooks.link_##name) \
+	{ \
+	_hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \
+	apr_hook_sort_register(#name,&_hooks.link_##name); \
+	} \
+    pHook=apr_array_push(_hooks.link_##name); \
+    pHook->pFunc=pf; \
+    pHook->aszPredecessors=aszPre; \
+    pHook->aszSuccessors=aszSucc; \
+    pHook->nOrder=nOrder; \
+    pHook->szName=apr_hook_debug_current; \
+    if(apr_hook_debug_enabled) \
+	apr_hook_debug_show(#name,aszPre,aszSucc); \
+    } \
+    APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
+    { \
+        return _hooks.link_##name; \
+    }
+
+/**
+ * Implement a hook that has no return code, and therefore runs all of the
+ * registered functions
+ * @param ns The namespace prefix of the hook functions
+ * @param link The linkage declaration prefix of the hook
+ * @param name The name of the hook
+ * @param args_decl The declaration of the arguments for the hook
+ * @param args_use The names for the arguments for the hook
+ * @note The link prefix FOO corresponds to FOO_DECLARE() macros, which
+ * provide export linkage from the module that IMPLEMENTs the hook, and
+ * import linkage from external modules that link to the hook's module.
+ */
+#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns,link,name,args_decl,args_use) \
+APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
+link##_DECLARE(void) ns##_run_##name args_decl \
+    { \
+    ns##_LINK_##name##_t *pHook; \
+    int n; \
+    APR_HOOK_INT_DCL_UD; \
+\
+    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \
+\
+    if(_hooks.link_##name) \
+        { \
+        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
+        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
+            { \
+            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \
+	    pHook[n].pFunc args_use; \
+            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, 0, args_use); \
+            } \
+        } \
+\
+    APR_HOOK_PROBE_RETURN(ud, ns, name, 0, args_use); \
+\
+    }
+
+/* FIXME: note that this returns ok when nothing is run. I suspect it should
+   really return decline, but that breaks Apache currently - Ben
+*/
+/**
+ * Implement a hook that runs until one of the functions returns something
+ * other than OK or DECLINE
+ * @param ns The namespace prefix of the hook functions
+ * @param link The linkage declaration prefix of the hook
+ * @param ret Type to return
+ * @param name The name of the hook
+ * @param args_decl The declaration of the arguments for the hook
+ * @param args_use The names for the arguments for the hook
+ * @param ok Success value
+ * @param decline Decline value
+ * @note The link prefix FOO corresponds to FOO_DECLARE() macros, which
+ * provide export linkage from the module that IMPLEMENTs the hook, and
+ * import linkage from external modules that link to the hook's module.
+ */
+#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \
+APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
+link##_DECLARE(ret) ns##_run_##name args_decl \
+    { \
+    ns##_LINK_##name##_t *pHook; \
+    int n; \
+    ret rv = ok; \
+    APR_HOOK_INT_DCL_UD; \
+\
+    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \
+\
+    if(_hooks.link_##name) \
+        { \
+        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
+        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
+            { \
+            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \
+            rv=pHook[n].pFunc args_use; \
+            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \
+            if(rv != ok && rv != decline) \
+                break; \
+            rv = ok; \
+            } \
+        } \
+\
+    APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \
+\
+    return rv; \
+    }
+
+
+/**
+ * Implement a hook that runs until the first function returns something
+ * other than the value of decline
+ * @param ns The namespace prefix of the hook functions
+ * @param link The linkage declaration prefix of the hook
+ * @param name The name of the hook
+ * @param ret Type to return
+ * @param args_decl The declaration of the arguments for the hook
+ * @param args_use The names for the arguments for the hook
+ * @param decline Decline value
+ * @note The link prefix FOO corresponds to FOO_DECLARE() macros, which
+ * provide export linkage from the module that IMPLEMENTs the hook, and
+ * import linkage from external modules that link to the hook's module.
+ */
+#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns,link,ret,name,args_decl,args_use,decline) \
+APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
+link##_DECLARE(ret) ns##_run_##name args_decl \
+    { \
+    ns##_LINK_##name##_t *pHook; \
+    int n; \
+    ret rv = decline; \
+    APR_HOOK_INT_DCL_UD; \
+\
+    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \
+\
+    if(_hooks.link_##name) \
+        { \
+        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
+        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
+            { \
+            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \
+            rv=pHook[n].pFunc args_use; \
+            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \
+\
+            if(rv != decline) \
+                break; \
+            } \
+        } \
+\
+    APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \
+\
+    return rv; \
+    }
+
+    /* Hook orderings */
+/** run this hook first, before ANYTHING */
+#define APR_HOOK_REALLY_FIRST	(-10)
+/** run this hook first */
+#define APR_HOOK_FIRST		0
+/** run this hook somewhere */
+#define APR_HOOK_MIDDLE		10
+/** run this hook after every other hook which is defined*/
+#define APR_HOOK_LAST		20
+/** run this hook last, after EVERYTHING */
+#define APR_HOOK_REALLY_LAST	30
+
+/**
+ * The global pool used to allocate any memory needed by the hooks.
+ */ 
+APU_DECLARE_DATA extern apr_pool_t *apr_hook_global_pool;
+
+/**
+ * A global variable to determine if debugging information about the
+ * hooks functions should be printed
+ */ 
+APU_DECLARE_DATA extern int apr_hook_debug_enabled;
+
+/**
+ * The name of the module that is currently registering a function
+ */ 
+APU_DECLARE_DATA extern const char *apr_hook_debug_current;
+
+/**
+ * Register a hook function to be sorted
+ * @param szHookName The name of the Hook the function is registered for
+ * @param aHooks The array which stores all of the functions for this hook
+ */
+APU_DECLARE(void) apr_hook_sort_register(const char *szHookName, 
+                                        apr_array_header_t **aHooks);
+/**
+ * Sort all of the registerd functions for a given hook
+ */
+APU_DECLARE(void) apr_hook_sort_all(void);
+
+/**
+ * Print all of the information about the current hook.  This is used for
+ * debugging purposes.
+ * @param szName The name of the hook
+ * @param aszPre All of the functions in the predecessor array
+ * @param aszSucc All of the functions in the successor array
+ */
+APU_DECLARE(void) apr_hook_debug_show(const char *szName,
+                                      const char * const *aszPre,
+                                      const char * const *aszSucc);
+
+/**
+ * Remove all currently registered functions.
+ */
+APU_DECLARE(void) apr_hook_deregister_all(void);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_HOOKS_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_inherit.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_inherit.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_inherit.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,51 @@
+/* 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.
+ */
+
+#ifndef APR_INHERIT_H
+#define APR_INHERIT_H
+
+/**
+ * @file apr_inherit.h 
+ * @brief APR File Handle Inheritance Helpers
+ * @remark This internal header includes internal declaration helpers 
+ * for other headers to declare apr_foo_inherit_[un]set functions.
+ */
+
+/**
+ * Prototype for type-specific declarations of apr_foo_inherit_set 
+ * functions.  
+ * @remark Doxygen unwraps this macro (via doxygen.conf) to provide 
+ * actual help for each specific occurance of apr_foo_inherit_set.
+ * @remark the linkage is specified for APR. It would be possible to expand
+ *       the macros to support other linkages.
+ */
+#define APR_DECLARE_INHERIT_SET(type) \
+    APR_DECLARE(apr_status_t) apr_##type##_inherit_set( \
+                                          apr_##type##_t *the##type)
+
+/**
+ * Prototype for type-specific declarations of apr_foo_inherit_unset 
+ * functions.  
+ * @remark Doxygen unwraps this macro (via doxygen.conf) to provide 
+ * actual help for each specific occurance of apr_foo_inherit_unset.
+ * @remark the linkage is specified for APR. It would be possible to expand
+ *       the macros to support other linkages.
+ */
+#define APR_DECLARE_INHERIT_UNSET(type) \
+    APR_DECLARE(apr_status_t) apr_##type##_inherit_unset( \
+                                          apr_##type##_t *the##type)
+
+#endif	/* ! APR_INHERIT_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,197 @@
+/* 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.
+ */
+
+/*
+ * apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h
+ */
+/**
+ * @file apr_ldap.h
+ * @brief  APR-UTIL LDAP 
+ */
+#ifndef APU_LDAP_H
+#define APU_LDAP_H
+
+/**
+ * @defgroup APR_Util_LDAP LDAP
+ * @ingroup APR_Util
+ * @{
+ */
+
+/* this will be defined if LDAP support was compiled into apr-util */
+#define APR_HAS_LDAP		    1
+
+/* identify the LDAP toolkit used */
+#define APR_HAS_NETSCAPE_LDAPSDK    0
+#define APR_HAS_SOLARIS_LDAPSDK     0
+#define APR_HAS_NOVELL_LDAPSDK      0
+#define APR_HAS_MOZILLA_LDAPSDK     0
+#define APR_HAS_OPENLDAP_LDAPSDK    0
+#define APR_HAS_MICROSOFT_LDAPSDK   1
+#define APR_HAS_TIVOLI_LDAPSDK      0
+#define APR_HAS_ZOS_LDAPSDK         0
+#define APR_HAS_OTHER_LDAPSDK       0
+
+
+/*
+ * Handle the case when LDAP is enabled
+ */
+#if APR_HAS_LDAP
+
+/*
+ * The following #defines are DEPRECATED and should not be used for
+ * anything. They remain to maintain binary compatibility.
+ * The original code defined the OPENLDAP SDK as present regardless
+ * of what really was there, which was way bogus. In addition, the
+ * apr_ldap_url_parse*() functions have been rewritten specifically for
+ * APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero.
+ */
+#if APR_HAS_TIVOLI_LDAPSDK
+#define APR_HAS_LDAP_SSL 0
+#else
+#define APR_HAS_LDAP_SSL 1
+#endif
+#define APR_HAS_LDAP_URL_PARSE 0
+
+#if APR_HAS_OPENLDAP_LDAPSDK && !defined(LDAP_DEPRECATED) 
+/* Ensure that the "deprecated" interfaces are still exposed
+ * with OpenLDAP >= 2.3; these were exposed by default in earlier
+ * releases. */
+#define LDAP_DEPRECATED 1
+#endif
+
+/*
+ * Include the standard LDAP header files.
+ */
+
+#include <winldap.h>
+
+
+/*
+ * Detected standard functions
+ */
+#define APR_HAS_LDAPSSL_CLIENT_INIT 0
+#define APR_HAS_LDAPSSL_CLIENT_DEINIT 0
+#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT 0
+#define APR_HAS_LDAP_START_TLS_S 0
+#define APR_HAS_LDAP_SSLINIT 1
+#define APR_HAS_LDAPSSL_INIT 0
+#define APR_HAS_LDAPSSL_INSTALL_ROUTINES 0
+
+
+/*
+ * Make sure the secure LDAP port is defined
+ */
+#ifndef LDAPS_PORT
+#define LDAPS_PORT 636  /* ldaps:/// default LDAP over TLS port */
+#endif
+
+
+/*
+ * For ldap function calls that input a size limit on the number of returned elements
+ * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0)
+ * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK
+ * or process is configured for.
+ */
+#ifdef LDAP_DEFAULT_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT
+#else
+#ifdef LDAP_NO_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
+#endif
+#endif
+
+#ifndef APR_LDAP_SIZELIMIT
+#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */
+#endif
+
+/*
+ * z/OS is missing some defines
+ */
+#ifndef LDAP_VERSION_MAX
+#define LDAP_VERSION_MAX  LDAP_VERSION
+#endif
+#if APR_HAS_ZOS_LDAPSDK
+#define LDAP_VENDOR_NAME "IBM z/OS"
+#endif
+
+/* Note: Macros defining const casting has been removed in APR v1.0,
+ * pending real support for LDAP v2.0 toolkits.
+ *
+ * In the mean time, please use an LDAP v3.0 toolkit.
+ */
+#if LDAP_VERSION_MAX <= 2
+#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
+#endif 
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * This structure allows the C LDAP API error codes to be returned
+ * along with plain text error messages that explain to us mere mortals
+ * what really happened.
+ */
+typedef struct apr_ldap_err_t {
+    const char *reason;
+    const char *msg;
+    int rc;
+} apr_ldap_err_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection
+ * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone 
+ * manually chooses another SDK on Windows 
+ */
+#if APR_HAS_MICROSOFT_LDAPSDK
+#define APR_LDAP_IS_SERVER_DOWN(s)    ((s) == LDAP_SERVER_DOWN \
+                                    || (s) == LDAP_UNAVAILABLE)
+#else
+#define APR_LDAP_IS_SERVER_DOWN(s)    ((s) == LDAP_SERVER_DOWN)
+#endif
+
+/* These symbols are not actually exported in a DSO build, but mapped into
+ * a private exported function array for apr_ldap_stub to bind dynamically.
+ * Rename them appropriately to protect the global namespace.
+ */
+#ifdef APU_DSO_LDAP_BUILD
+
+#define apr_ldap_info apr__ldap_info
+#define apr_ldap_init apr__ldap_init
+#define apr_ldap_ssl_init apr__ldap_ssl_init
+#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit
+#define apr_ldap_get_option apr__ldap_get_option
+#define apr_ldap_set_option apr__ldap_set_option
+#define apr_ldap_rebind_init apr__ldap_rebind_init
+#define apr_ldap_rebind_add apr__ldap_rebind_add
+#define apr_ldap_rebind_remove apr__ldap_rebind_remove
+
+#define APU_DECLARE_LDAP(type) type
+#else
+#define APU_DECLARE_LDAP(type) APU_DECLARE(type)
+#endif
+
+#include "apr_ldap_url.h"
+#include "apr_ldap_init.h"
+#include "apr_ldap_option.h"
+#include "apr_ldap_rebind.h"
+
+/** @} */
+#endif /* APR_HAS_LDAP */
+#endif /* APU_LDAP_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_init.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_init.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_init.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,165 @@
+/* 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.
+ */
+
+/**
+ * @file apr_ldap_init.h
+ * @brief  APR-UTIL LDAP ldap_init() functions
+ */
+#ifndef APR_LDAP_INIT_H
+#define APR_LDAP_INIT_H
+
+/**
+ * @addtogroup APR_Util_LDAP
+ * @{
+ */
+
+#include "apr_ldap.h"
+
+#if APR_HAS_LDAP
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Macro to detect security related return values.
+ */
+#if defined(LDAP_INSUFFICIENT_ACCESS)
+#define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_ACCESS
+#elif defined(LDAP_INSUFFICIENT_RIGHTS)
+#define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS
+#elif defined(APR_HAS_MICROSOFT_LDAPSDK)
+/* The macros above fail to contemplate that LDAP_RETCODE values
+ * may be represented by an enum.  autoconf tests would be much
+ * more robust.
+ */
+#define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS
+#else
+#error The security return codes must be added to support this LDAP toolkit.
+#endif
+
+#if defined(LDAP_SECURITY_ERROR)
+#define APU_LDAP_SECURITY_ERROR LDAP_SECURITY_ERROR
+#else
+#define APU_LDAP_SECURITY_ERROR(n)	\
+    (LDAP_INAPPROPRIATE_AUTH == n) ? 1 \
+    : (LDAP_INVALID_CREDENTIALS == n) ? 1 \
+    : (APU_LDAP_INSUFFICIENT_ACCESS == n) ? 1 \
+    : 0
+#endif
+
+
+/**
+ * APR LDAP SSL Initialise function
+ *
+ * This function initialises SSL on the underlying LDAP toolkit
+ * if this is necessary.
+ *
+ * If a CA certificate is provided, this is set, however the setting
+ * of certificates via this method has been deprecated and will be removed in
+ * APR v2.0.
+ *
+ * The apr_ldap_set_option() function with the APR_LDAP_OPT_TLS_CERT option
+ * should be used instead to set certificates.
+ *
+ * If SSL support is not available on this platform, or a problem
+ * was encountered while trying to set the certificate, the function
+ * will return APR_EGENERAL. Further LDAP specific error information
+ * can be found in result_err.
+ * @param pool The pool to use
+ * @param cert_auth_file The name of the certificate to use, can be NULL
+ * @param cert_file_type The type of certificate specified. See the
+ * apr_ldap_set_option() APR_LDAP_OPT_TLS_CERT option for details.
+ * @param result_err The returned result
+ */
+APU_DECLARE_LDAP(int) apr_ldap_ssl_init(apr_pool_t *pool,
+                                        const char *cert_auth_file,
+                                        int cert_file_type,
+                                        apr_ldap_err_t **result_err);
+
+/**
+ * APR LDAP SSL De-Initialise function
+ *
+ * This function tears down any SSL certificate setup previously
+ * set using apr_ldap_ssl_init(). It should be called to clean
+ * up if a graceful restart of a service is attempted.
+ * @todo currently we do not check whether apr_ldap_ssl_init()
+ * has been called first - we probably should.
+ */
+APU_DECLARE_LDAP(int) apr_ldap_ssl_deinit(void);
+
+/**
+ * APR LDAP initialise function
+ *
+ * This function is responsible for initialising an LDAP
+ * connection in a toolkit independant way. It does the
+ * job of ldap_init() from the C api.
+ *
+ * It handles both the SSL and non-SSL case, and attempts
+ * to hide the complexity setup from the user. This function
+ * assumes that any certificate setup necessary has already
+ * been done.
+ *
+ * If SSL or STARTTLS needs to be enabled, and the underlying
+ * toolkit supports it, the following values are accepted for
+ * secure:
+ *
+ * APR_LDAP_NONE: No encryption
+ * APR_LDAP_SSL: SSL encryption (ldaps://)
+ * APR_LDAP_STARTTLS: Force STARTTLS on ldap://
+ * @remark The Novell toolkit is only able to set the SSL mode via this
+ * function. To work around this limitation, set the SSL mode here if no
+ * per connection client certificates are present, otherwise set secure
+ * APR_LDAP_NONE here, then set the per connection client certificates,
+ * followed by setting the SSL mode via apr_ldap_set_option(). As Novell
+ * does not support per connection client certificates, this problem is
+ * worked around while still being compatible with other LDAP toolkits.
+ * @param pool The pool to use
+ * @param ldap The LDAP handle
+ * @param hostname The name of the host to connect to. This can be either a
+ * DNS name, or an IP address.
+ * @param portno The port to connect to
+ * @param secure The security mode to set
+ * @param result_err The returned result
+ */
+APU_DECLARE_LDAP(int) apr_ldap_init(apr_pool_t *pool,
+                                    LDAP **ldap,
+                                    const char *hostname,
+                                    int portno,
+                                    int secure,
+                                    apr_ldap_err_t **result_err);
+
+/**
+ * APR LDAP info function
+ *
+ * This function returns a string describing the LDAP toolkit
+ * currently in use. The string is placed inside result_err->reason.
+ * @param pool The pool to use
+ * @param result_err The returned result
+ */
+APU_DECLARE_LDAP(int) apr_ldap_info(apr_pool_t *pool,
+                                    apr_ldap_err_t **result_err);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_HAS_LDAP */
+
+/** @} */
+
+#endif /* APR_LDAP_URL_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_option.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_option.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_option.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,254 @@
+/* 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.
+ */
+
+/**
+ * @file apr_ldap_option.h
+ * @brief  APR-UTIL LDAP ldap_*_option() functions
+ */
+#ifndef APR_LDAP_OPTION_H
+#define APR_LDAP_OPTION_H
+
+/**
+ * @addtogroup APR_Util_LDAP
+ * @{
+ */
+
+#include "apr_ldap.h"
+
+#if APR_HAS_LDAP
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * The following defines handle the different TLS certificate
+ * options available. If these options are missing, APR will try and
+ * emulate support for this using the deprecated ldap_start_tls_s()
+ * function.
+ */
+/**
+ * Set SSL mode to one of APR_LDAP_NONE, APR_LDAP_SSL, APR_LDAP_STARTTLS
+ * or APR_LDAP_STOPTLS.
+ */
+#define APR_LDAP_OPT_TLS 0x6fff
+/**
+ * Set zero or more CA certificates, client certificates or private
+ * keys globally, or per connection (where supported).
+ */
+#define APR_LDAP_OPT_TLS_CERT 0x6ffe
+/**
+ * Set the LDAP library to no verify the server certificate.  This means
+ * all servers are considered trusted.
+ */
+#define APR_LDAP_OPT_VERIFY_CERT 0x6ffd
+/**
+ * Set the LDAP library to indicate if referrals should be chased during
+ * LDAP searches.
+ */
+#define APR_LDAP_OPT_REFERRALS 0x6ffc
+/**
+ * Set the LDAP library to indicate a maximum number of referral hops to
+ * chase before giving up on the search.
+ */
+#define APR_LDAP_OPT_REFHOPLIMIT 0x6ffb
+
+/**
+ * Structures for the apr_set_option() cases
+ */
+
+/**
+ * APR_LDAP_OPT_TLS_CERT
+ *
+ * This structure includes possible options to set certificates on
+ * system initialisation. Different SDKs have different certificate
+ * requirements, and to achieve this multiple certificates must be
+ * specified at once passed as an (apr_array_header_t *).
+ *
+ * Netscape:
+ * Needs the CA cert database (cert7.db), the client cert database (key3.db)
+ * and the security module file (secmod.db) set at the system initialisation
+ * time. Three types are supported: APR_LDAP_CERT7_DB, APR_LDAP_KEY3_DB and
+ * APR_LDAP_SECMOD.
+ *
+ * To specify a client cert connection, a certificate nickname needs to be
+ * provided with a type of APR_LDAP_CERT.
+ * int ldapssl_enable_clientauth( LDAP *ld, char *keynickname,
+ * char *keypasswd, char *certnickname );
+ * keynickname is currently not used, and should be set to ""
+ *
+ * Novell:
+ * Needs CA certificates and client certificates set at system initialisation
+ * time. Three types are supported: APR_LDAP_CA*, APR_LDAP_CERT* and
+ * APR_LDAP_KEY*.
+ *
+ * Certificates cannot be specified per connection.
+ *
+ * The functions used are:
+ * ldapssl_add_trusted_cert(serverTrustedRoot, serverTrustedRootEncoding);
+ * Clients certs and keys are set at system initialisation time with
+ * int ldapssl_set_client_cert (
+ *  void   *cert,
+ *  int     type
+ *  void   *password); 
+ * type can be LDAPSSL_CERT_FILETYPE_B64 or LDAPSSL_CERT_FILETYPE_DER
+ *  ldapssl_set_client_private_key(clientPrivateKey,
+ *                                 clientPrivateKeyEncoding,
+ *                                 clientPrivateKeyPassword);
+ *
+ * OpenSSL:
+ * Needs one or more CA certificates to be set at system initialisation time
+ * with a type of APR_LDAP_CA*.
+ *
+ * May have one or more client certificates set per connection with a type of
+ * APR_LDAP_CERT*, and keys with APR_LDAP_KEY*.
+ */
+/** CA certificate type unknown */
+#define APR_LDAP_CA_TYPE_UNKNOWN    0
+/** binary DER encoded CA certificate */
+#define APR_LDAP_CA_TYPE_DER        1
+/** PEM encoded CA certificate */
+#define APR_LDAP_CA_TYPE_BASE64     2
+/** Netscape/Mozilla cert7.db CA certificate database */
+#define APR_LDAP_CA_TYPE_CERT7_DB   3
+/** Netscape/Mozilla secmod file */
+#define APR_LDAP_CA_TYPE_SECMOD     4
+/** Client certificate type unknown */
+#define APR_LDAP_CERT_TYPE_UNKNOWN  5
+/** binary DER encoded client certificate */
+#define APR_LDAP_CERT_TYPE_DER      6
+/** PEM encoded client certificate */
+#define APR_LDAP_CERT_TYPE_BASE64   7
+/** Netscape/Mozilla key3.db client certificate database */
+#define APR_LDAP_CERT_TYPE_KEY3_DB  8
+/** Netscape/Mozilla client certificate nickname */
+#define APR_LDAP_CERT_TYPE_NICKNAME 9
+/** Private key type unknown */
+#define APR_LDAP_KEY_TYPE_UNKNOWN   10
+/** binary DER encoded private key */
+#define APR_LDAP_KEY_TYPE_DER       11
+/** PEM encoded private key */
+#define APR_LDAP_KEY_TYPE_BASE64    12
+/** PKCS#12 encoded client certificate */
+#define APR_LDAP_CERT_TYPE_PFX      13
+/** PKCS#12 encoded private key */
+#define APR_LDAP_KEY_TYPE_PFX       14
+/** Openldap directory full of base64-encoded cert 
+ * authorities with hashes in corresponding .0 directory
+ */
+#define APR_LDAP_CA_TYPE_CACERTDIR_BASE64 15
+
+
+/**
+ * Certificate structure.
+ *
+ * This structure is used to store certificate details. An array of
+ * these structures is passed to apr_ldap_set_option() to set CA
+ * and client certificates.
+ * @param type Type of certificate APR_LDAP_*_TYPE_*
+ * @param path Path, file or nickname of the certificate
+ * @param password Optional password, can be NULL
+ */
+typedef struct apr_ldap_opt_tls_cert_t apr_ldap_opt_tls_cert_t;
+struct apr_ldap_opt_tls_cert_t {
+    int type;
+    const char *path;
+    const char *password;
+};
+
+/**
+ * APR_LDAP_OPT_TLS
+ *
+ * This sets the SSL level on the LDAP handle.
+ *
+ * Netscape/Mozilla:
+ * Supports SSL, but not STARTTLS
+ * SSL is enabled by calling ldapssl_install_routines().
+ *
+ * Novell:
+ * Supports SSL and STARTTLS.
+ * SSL is enabled by calling ldapssl_install_routines(). Note that calling
+ * other ldap functions before ldapssl_install_routines() may cause this
+ * function to fail.
+ * STARTTLS is enabled by calling ldapssl_start_tls_s() after calling
+ * ldapssl_install_routines() (check this).
+ *
+ * OpenLDAP:
+ * Supports SSL and supports STARTTLS, but none of this is documented:
+ * http://www.openldap.org/lists/openldap-software/200409/msg00618.html
+ * Documentation for both SSL support and STARTTLS has been deleted from
+ * the OpenLDAP documentation and website.
+ */
+
+/** No encryption */
+#define APR_LDAP_NONE 0
+/** SSL encryption (ldaps://) */
+#define APR_LDAP_SSL 1
+/** TLS encryption (STARTTLS) */
+#define APR_LDAP_STARTTLS 2
+/** end TLS encryption (STOPTLS) */
+#define APR_LDAP_STOPTLS 3
+
+/**
+ * APR LDAP get option function
+ *
+ * This function gets option values from a given LDAP session if
+ * one was specified. It maps to the native ldap_get_option() function.
+ * @param pool The pool to use
+ * @param ldap The LDAP handle
+ * @param option The LDAP_OPT_* option to return
+ * @param outvalue The value returned (if any)
+ * @param result_err The apr_ldap_err_t structure contained detailed results
+ *        of the operation.
+ */
+APU_DECLARE_LDAP(int) apr_ldap_get_option(apr_pool_t *pool,
+                                          LDAP *ldap,
+                                          int option,
+                                          void *outvalue,
+                                          apr_ldap_err_t **result_err);
+
+/**
+ * APR LDAP set option function
+ * 
+ * This function sets option values to a given LDAP session if
+ * one was specified. It maps to the native ldap_set_option() function.
+ * 
+ * Where an option is not supported by an LDAP toolkit, this function
+ * will try and apply legacy functions to achieve the same effect,
+ * depending on the platform.
+ * @param pool The pool to use
+ * @param ldap The LDAP handle
+ * @param option The LDAP_OPT_* option to set
+ * @param invalue The value to set
+ * @param result_err The apr_ldap_err_t structure contained detailed results
+ *        of the operation.
+ */
+APU_DECLARE_LDAP(int) apr_ldap_set_option(apr_pool_t *pool,
+                                          LDAP *ldap,
+                                          int option,
+                                          const void *invalue,
+                                          apr_ldap_err_t **result_err);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_HAS_LDAP */
+
+/** @} */
+
+#endif /* APR_LDAP_OPTION_H */
+

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_rebind.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_rebind.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_rebind.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,98 @@
+/* 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.
+ */
+
+/**
+ * The APR LDAP rebind functions provide an implementation of
+ * a rebind procedure that can be used to allow clients to chase referrals,
+ * using the same credentials used to log in originally.
+ *
+ * Use of this implementation is optional.
+ *
+ * @file apr_ldap_rebind.h
+ * @brief Apache LDAP library
+ */
+
+#ifndef APU_LDAP_REBIND_H
+#define APU_LDAP_REBIND_H
+
+/**
+ * @addtogroup APR_Util_LDAP
+ * @{
+ **/
+
+#if defined(DOXYGEN)
+#include "apr_ldap.h"
+#endif
+
+/*
+ * Handle the case when LDAP is enabled
+ */
+#if APR_HAS_LDAP
+
+/**
+ * APR LDAP initialize rebind lock
+ *
+ * This function creates the lock for controlling access to the xref list..
+ * @param pool Pool to use when creating the xref_lock.
+ */
+APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_init(apr_pool_t *pool);
+
+
+/**
+ * APR LDAP rebind_add function
+ *
+ * This function creates a cross reference entry for the specified ldap
+ * connection. The rebind callback function will look up this ldap 
+ * connection so it can retrieve the bindDN and bindPW for use in any 
+ * binds while referrals are being chased.
+ *
+ * This function will add the callback to the LDAP handle passed in.
+ *
+ * A cleanup is registered within the pool provided to remove this
+ * entry when the pool is removed. Alternatively apr_ldap_rebind_remove()
+ * can be called to explicitly remove the entry at will.
+ *
+ * @param pool The pool to use
+ * @param ld The LDAP connectionhandle
+ * @param bindDN The bind DN to be used for any binds while chasing 
+ *               referrals on this ldap connection.
+ * @param bindPW The bind Password to be used for any binds while 
+ *               chasing referrals on this ldap connection.
+ */
+APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_add(apr_pool_t *pool,
+                                                   LDAP *ld,
+                                                   const char *bindDN,
+                                                   const char *bindPW);
+
+/**
+ * APR LDAP rebind_remove function
+ *
+ * This function removes the rebind cross reference entry for the
+ * specified ldap connection.
+ *
+ * If not explicitly removed, this function will be called automatically
+ * when the pool is cleaned up.
+ *
+ * @param ld The LDAP connectionhandle
+ */
+APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_remove(LDAP *ld);
+
+#endif /* APR_HAS_LDAP */
+
+/** @} */
+
+#endif /* APU_LDAP_REBIND_H */
+

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_url.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_url.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ldap_url.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,120 @@
+/* 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.
+ */
+
+/**
+ * @file apr_ldap_url.h
+ * @brief  APR-UTIL LDAP ldap_init() functions
+ */
+#ifndef APR_LDAP_URL_H
+#define APR_LDAP_URL_H
+
+/**
+ * @addtogroup APR_Util_LDAP
+ * @{
+ */
+
+#if defined(DOXYGEN)
+#include "apr_ldap.h"
+#endif
+
+#if APR_HAS_LDAP
+
+#include "apu.h"
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** Structure to access an exploded LDAP URL */
+typedef struct apr_ldap_url_desc_t {
+    struct  apr_ldap_url_desc_t  *lud_next;
+    char    *lud_scheme;
+    char    *lud_host;
+    int     lud_port;
+    char    *lud_dn;
+    char    **lud_attrs;
+    int     lud_scope;
+    char    *lud_filter;
+    char    **lud_exts;
+    int     lud_crit_exts;
+} apr_ldap_url_desc_t;
+
+#ifndef APR_LDAP_URL_SUCCESS
+#define APR_LDAP_URL_SUCCESS          0x00    /* Success */
+#define APR_LDAP_URL_ERR_MEM          0x01    /* can't allocate memory space */
+#define APR_LDAP_URL_ERR_PARAM        0x02    /* parameter is bad */
+#define APR_LDAP_URL_ERR_BADSCHEME    0x03    /* URL doesn't begin with "ldap[si]://" */
+#define APR_LDAP_URL_ERR_BADENCLOSURE 0x04    /* URL is missing trailing ">" */
+#define APR_LDAP_URL_ERR_BADURL       0x05    /* URL is bad */
+#define APR_LDAP_URL_ERR_BADHOST      0x06    /* host port is bad */
+#define APR_LDAP_URL_ERR_BADATTRS     0x07    /* bad (or missing) attributes */
+#define APR_LDAP_URL_ERR_BADSCOPE     0x08    /* scope string is invalid (or missing) */
+#define APR_LDAP_URL_ERR_BADFILTER    0x09    /* bad or missing filter */
+#define APR_LDAP_URL_ERR_BADEXTS      0x0a    /* bad or missing extensions */
+#endif
+
+/**
+ * Is this URL an ldap url? ldap://
+ * @param url The url to test
+ */
+APU_DECLARE(int) apr_ldap_is_ldap_url(const char *url);
+
+/**
+ * Is this URL an SSL ldap url? ldaps://
+ * @param url The url to test
+ */
+APU_DECLARE(int) apr_ldap_is_ldaps_url(const char *url);
+
+/**
+ * Is this URL an ldap socket url? ldapi://
+ * @param url The url to test
+ */
+APU_DECLARE(int) apr_ldap_is_ldapi_url(const char *url);
+
+/**
+ * Parse an LDAP URL.
+ * @param pool The pool to use
+ * @param url_in The URL to parse
+ * @param ludpp The structure to return the exploded URL
+ * @param result_err The result structure of the operation
+ */
+APU_DECLARE(int) apr_ldap_url_parse_ext(apr_pool_t *pool,
+                                        const char *url_in,
+                                        apr_ldap_url_desc_t **ludpp,
+                                        apr_ldap_err_t **result_err);
+
+/**
+ * Parse an LDAP URL.
+ * @param pool The pool to use
+ * @param url_in The URL to parse
+ * @param ludpp The structure to return the exploded URL
+ * @param result_err The result structure of the operation
+ */
+APU_DECLARE(int) apr_ldap_url_parse(apr_pool_t *pool,
+                                    const char *url_in,
+                                    apr_ldap_url_desc_t **ludpp,
+                                    apr_ldap_err_t **result_err);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_HAS_LDAP */
+
+/** @} */
+
+#endif /* APR_LDAP_URL_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_lib.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_lib.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_lib.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,241 @@
+/* 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.
+ */
+
+#ifndef APR_LIB_H
+#define APR_LIB_H
+
+/**
+ * @file apr_lib.h
+ * This is collection of oddballs that didn't fit anywhere else,
+ * and might move to more appropriate headers with the release
+ * of APR 1.0.
+ * @brief APR general purpose library routines
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+
+#if APR_HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#if APR_HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_lib General Purpose Library Routines
+ * @ingroup APR 
+ * This is collection of oddballs that didn't fit anywhere else,
+ * and might move to more appropriate headers with the release
+ * of APR 1.0.
+ * @{
+ */
+
+/** A constant representing a 'large' string. */
+#define HUGE_STRING_LEN 8192
+
+/*
+ * Define the structures used by the APR general-purpose library.
+ */
+
+/** @see apr_vformatter_buff_t */
+typedef struct apr_vformatter_buff_t apr_vformatter_buff_t;
+
+/**
+ * Structure used by the variable-formatter routines.
+ */
+struct apr_vformatter_buff_t {
+    /** The current position */
+    char *curpos;
+    /** The end position of the format string */
+    char *endpos;
+};
+
+/**
+ * return the final element of the pathname
+ * @param pathname The path to get the final element of
+ * @return the final element of the path
+ * @remark
+ * <PRE>
+ * For example:
+ *                 "/foo/bar/gum"    -> "gum"
+ *                 "/foo/bar/gum/"   -> ""
+ *                 "gum"             -> "gum"
+ *                 "bs\\path\\stuff" -> "stuff"
+ * </PRE>
+ */
+APR_DECLARE(const char *) apr_filepath_name_get(const char *pathname);
+
+/**
+ * apr_killpg
+ * Small utility macros to make things easier to read.  Not usually a
+ * goal, to be sure..
+ */
+
+#ifdef WIN32
+#define apr_killpg(x, y)
+#else /* WIN32 */
+#ifdef NO_KILLPG
+#define apr_killpg(x, y)        (kill (-(x), (y)))
+#else /* NO_KILLPG */
+#define apr_killpg(x, y)        (killpg ((x), (y)))
+#endif /* NO_KILLPG */
+#endif /* WIN32 */
+
+/**
+ * apr_vformatter() is a generic printf-style formatting routine
+ * with some extensions.
+ * @param flush_func The function to call when the buffer is full
+ * @param c The buffer to write to
+ * @param fmt The format string
+ * @param ap The arguments to use to fill out the format string.
+ *
+ * @remark
+ * <PRE>
+ * The extensions are:
+ *
+ * %%pA	takes a struct in_addr *, and prints it as a.b.c.d
+ * %%pI	takes an apr_sockaddr_t * and prints it as a.b.c.d:port or
+ *      [ipv6-address]:port
+ * %%pT takes an apr_os_thread_t * and prints it in decimal
+ *      ('0' is printed if !APR_HAS_THREADS)
+ * %%pt takes an apr_os_thread_t * and prints it in hexadecimal
+ *      ('0' is printed if !APR_HAS_THREADS)
+ * %%pm takes an apr_status_t * and prints the appropriate error
+ *      string (from apr_strerror) corresponding to that error code.
+ * %%pp takes a void * and outputs it in hex
+ * %%pB takes a apr_uint32_t * as bytes and outputs it's apr_strfsize
+ * %%pF same as above, but takes a apr_off_t *
+ * %%pS same as above, but takes a apr_size_t *
+ *
+ * %%pA, %%pI, %%pT, %%pp are available from APR 1.0.0 onwards (and in 0.9.x).
+ * %%pt is only available from APR 1.2.0 onwards.
+ * %%pm, %%pB, %%pF and %%pS are only available from APR 1.3.0 onwards.
+ *
+ * The %%p hacks are to force gcc's printf warning code to skip
+ * over a pointer argument without complaining.  This does
+ * mean that the ANSI-style %%p (output a void * in hex format) won't
+ * work as expected at all, but that seems to be a fair trade-off
+ * for the increased robustness of having printf-warnings work.
+ *
+ * Additionally, apr_vformatter allows for arbitrary output methods
+ * using the apr_vformatter_buff and flush_func.
+ *
+ * The apr_vformatter_buff has two elements curpos and endpos.
+ * curpos is where apr_vformatter will write the next byte of output.
+ * It proceeds writing output to curpos, and updating curpos, until
+ * either the end of output is reached, or curpos == endpos (i.e. the
+ * buffer is full).
+ *
+ * If the end of output is reached, apr_vformatter returns the
+ * number of bytes written.
+ *
+ * When the buffer is full, the flush_func is called.  The flush_func
+ * can return -1 to indicate that no further output should be attempted,
+ * and apr_vformatter will return immediately with -1.  Otherwise
+ * the flush_func should flush the buffer in whatever manner is
+ * appropriate, re apr_pool_t nitialize curpos and endpos, and return 0.
+ *
+ * Note that flush_func is only invoked as a result of attempting to
+ * write another byte at curpos when curpos >= endpos.  So for
+ * example, it's possible when the output exactly matches the buffer
+ * space available that curpos == endpos will be true when
+ * apr_vformatter returns.
+ *
+ * apr_vformatter does not call out to any other code, it is entirely
+ * self-contained.  This allows the callers to do things which are
+ * otherwise "unsafe".  For example, apr_psprintf uses the "scratch"
+ * space at the unallocated end of a block, and doesn't actually
+ * complete the allocation until apr_vformatter returns.  apr_psprintf
+ * would be completely broken if apr_vformatter were to call anything
+ * that used this same pool.  Similarly http_bprintf() uses the "scratch"
+ * space at the end of its output buffer, and doesn't actually note
+ * that the space is in use until it either has to flush the buffer
+ * or until apr_vformatter returns.
+ * </PRE>
+ */
+APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *b),
+			        apr_vformatter_buff_t *c, const char *fmt,
+			        va_list ap);
+
+/**
+ * Display a prompt and read in the password from stdin.
+ * @param prompt The prompt to display
+ * @param pwbuf Buffer to store the password
+ * @param bufsize The length of the password buffer.
+ * @remark If the password entered must be truncated to fit in
+ * the provided buffer, APR_ENAMETOOLONG will be returned.
+ * Note that the bufsize paramater is passed by reference for no
+ * reason; its value will never be modified by the apr_password_get()
+ * function.
+ */
+APR_DECLARE(apr_status_t) apr_password_get(const char *prompt, char *pwbuf, 
+                                           apr_size_t *bufsize);
+
+/** @} */
+
+/**
+ * @defgroup apr_ctype ctype functions
+ * These macros allow correct support of 8-bit characters on systems which
+ * support 8-bit characters.  Pretty dumb how the cast is required, but
+ * that's legacy libc for ya.  These new macros do not support EOF like
+ * the standard macros do.  Tough.
+ * @{
+ */
+/** @see isalnum */
+#define apr_isalnum(c) (isalnum(((unsigned char)(c))))
+/** @see isalpha */
+#define apr_isalpha(c) (isalpha(((unsigned char)(c))))
+/** @see iscntrl */
+#define apr_iscntrl(c) (iscntrl(((unsigned char)(c))))
+/** @see isdigit */
+#define apr_isdigit(c) (isdigit(((unsigned char)(c))))
+/** @see isgraph */
+#define apr_isgraph(c) (isgraph(((unsigned char)(c))))
+/** @see islower*/
+#define apr_islower(c) (islower(((unsigned char)(c))))
+/** @see isascii */
+#ifdef isascii
+#define apr_isascii(c) (isascii(((unsigned char)(c))))
+#else
+#define apr_isascii(c) (((c) & ~0x7f)==0)
+#endif
+/** @see isprint */
+#define apr_isprint(c) (isprint(((unsigned char)(c))))
+/** @see ispunct */
+#define apr_ispunct(c) (ispunct(((unsigned char)(c))))
+/** @see isspace */
+#define apr_isspace(c) (isspace(((unsigned char)(c))))
+/** @see isupper */
+#define apr_isupper(c) (isupper(((unsigned char)(c))))
+/** @see isxdigit */
+#define apr_isxdigit(c) (isxdigit(((unsigned char)(c))))
+/** @see tolower */
+#define apr_tolower(c) (tolower(((unsigned char)(c))))
+/** @see toupper */
+#define apr_toupper(c) (toupper(((unsigned char)(c))))
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ! APR_LIB_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md4.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md4.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md4.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,135 @@
+/* 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.
+ */
+/* This is derived from material copyright RSA Data Security, Inc.
+ * Their notice is reproduced below in its entirety.
+ *
+ * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+ * rights reserved.
+ *
+ * License to copy and use this software is granted provided that it
+ * is identified as the "RSA Data Security, Inc. MD4 Message-Digest
+ * Algorithm" in all material mentioning or referencing this software
+ * or this function.
+ *
+ * License is also granted to make and use derivative works provided
+ * that such works are identified as "derived from the RSA Data
+ * Security, Inc. MD4 Message-Digest Algorithm" in all material
+ * mentioning or referencing the derived work.
+ *
+ * RSA Data Security, Inc. makes no representations concerning either
+ * the merchantability of this software or the suitability of this
+ * software for any particular purpose. It is provided "as is"
+ * without express or implied warranty of any kind.
+ *
+ * These notices must be retained in any copies of any part of this
+ * documentation and/or software.
+ */
+
+#ifndef APR_MD4_H
+#define APR_MD4_H
+
+#include "apu.h"
+#include "apr_xlate.h"
+/**
+ * @file apr_md4.h
+ * @brief APR-UTIL MD4 Library
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup APR_Util_MD4 MD4 Library
+ * @ingroup APR_Util
+ * @{
+ */
+
+/** The digestsize for MD4 */
+#define APR_MD4_DIGESTSIZE 16
+
+/** @see apr_md4_ctx_t */
+typedef struct apr_md4_ctx_t apr_md4_ctx_t;
+
+/** MD4 context. */
+struct apr_md4_ctx_t {
+    /** state (ABCD) */
+    apr_uint32_t state[4];
+    /** number of bits, modulo 2^64 (lsb first) */
+    apr_uint32_t count[2];
+    /** input buffer */
+    unsigned char buffer[64];
+#if APR_HAS_XLATE
+    /** translation handle */
+    apr_xlate_t *xlate;
+#endif
+};
+
+/**
+ * MD4 Initialize.  Begins an MD4 operation, writing a new context.
+ * @param context The MD4 context to initialize.
+ */
+APU_DECLARE(apr_status_t) apr_md4_init(apr_md4_ctx_t *context);
+
+#if APR_HAS_XLATE
+/**
+ * MDr4 translation setup.  Provides the APR translation handle to be used 
+ * for translating the content before calculating the digest.
+ * @param context The MD4 content to set the translation for.
+ * @param xlate The translation handle to use for this MD4 context 
+ */
+APU_DECLARE(apr_status_t) apr_md4_set_xlate(apr_md4_ctx_t *context,
+                                            apr_xlate_t *xlate);
+#else
+#define apr_md4_set_xlate(context, xlate) APR_ENOTIMPL
+#endif
+
+/**
+ * MD4 block update operation.  Continue an MD4 message-digest operation, 
+ * processing another message block, and updating the context.
+ * @param context The MD4 content to update.
+ * @param input next message block to update
+ * @param inputLen The length of the next message block
+ */
+APU_DECLARE(apr_status_t) apr_md4_update(apr_md4_ctx_t *context,
+                                         const unsigned char *input,
+                                         apr_size_t inputLen);
+
+/**
+ * MD4 finalization.  Ends an MD4 message-digest operation, writing the 
+ * message digest and zeroing the context
+ * @param digest The final MD4 digest
+ * @param context The MD4 content we are finalizing.
+ */
+APU_DECLARE(apr_status_t) apr_md4_final(
+                                    unsigned char digest[APR_MD4_DIGESTSIZE],
+                                    apr_md4_ctx_t *context);
+
+/**
+ * MD4 digest computation
+ * @param digest The MD4 digest
+ * @param input message block to use
+ * @param inputLen The length of the message block
+ */
+APU_DECLARE(apr_status_t) apr_md4(unsigned char digest[APR_MD4_DIGESTSIZE],
+                                  const unsigned char *input,
+                                  apr_size_t inputLen);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_MD4_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md5.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md5.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_md5.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,176 @@
+/*
+ * This is work is derived from material Copyright RSA Data Security, Inc.
+ *
+ * The RSA copyright statement and Licence for that original material is
+ * included below. This is followed by the Apache copyright statement and
+ * licence for the modifications made to that material.
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+   rights reserved.
+
+   License to copy and use this software is granted provided that it
+   is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+   Algorithm" in all material mentioning or referencing this software
+   or this function.
+
+   License is also granted to make and use derivative works provided
+   that such works are identified as "derived from the RSA Data
+   Security, Inc. MD5 Message-Digest Algorithm" in all material
+   mentioning or referencing the derived work.
+
+   RSA Data Security, Inc. makes no representations concerning either
+   the merchantability of this software or the suitability of this
+   software for any particular purpose. It is provided "as is"
+   without express or implied warranty of any kind.
+
+   These notices must be retained in any copies of any part of this
+   documentation and/or software.
+ */
+
+/* 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.
+ */
+
+#ifndef APR_MD5_H
+#define APR_MD5_H
+
+#include "apu.h"
+#include "apr_xlate.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**
+ * @file apr_md5.h
+ * @brief APR MD5 Routines
+ */
+
+/**
+ * @defgroup APR_MD5 MD5 Routines
+ * @ingroup APR
+ * @{
+ */
+
+/** The MD5 digest size */
+#define APR_MD5_DIGESTSIZE 16
+
+/** @see apr_md5_ctx_t */
+typedef struct apr_md5_ctx_t apr_md5_ctx_t;
+
+/** MD5 context. */
+struct apr_md5_ctx_t {
+    /** state (ABCD) */
+    apr_uint32_t state[4];
+    /** number of bits, modulo 2^64 (lsb first) */
+    apr_uint32_t count[2];
+    /** input buffer */
+    unsigned char buffer[64];
+    /** translation handle 
+     *  ignored if xlate is unsupported
+     */
+    apr_xlate_t *xlate;
+};
+
+/**
+ * MD5 Initialize.  Begins an MD5 operation, writing a new context.
+ * @param context The MD5 context to initialize.
+ */
+APU_DECLARE(apr_status_t) apr_md5_init(apr_md5_ctx_t *context);
+
+/**
+ * MD5 translation setup.  Provides the APR translation handle to be used 
+ * for translating the content before calculating the digest.
+ * @param context The MD5 content to set the translation for.
+ * @param xlate The translation handle to use for this MD5 context 
+ */
+APU_DECLARE(apr_status_t) apr_md5_set_xlate(apr_md5_ctx_t *context,
+                                            apr_xlate_t *xlate);
+
+/**
+ * MD5 block update operation.  Continue an MD5 message-digest operation, 
+ * processing another message block, and updating the context.
+ * @param context The MD5 content to update.
+ * @param input next message block to update
+ * @param inputLen The length of the next message block
+ */
+APU_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context,
+                                         const void *input,
+                                         apr_size_t inputLen);
+
+/**
+ * MD5 finalization.  Ends an MD5 message-digest operation, writing the 
+ * message digest and zeroing the context
+ * @param digest The final MD5 digest
+ * @param context The MD5 content we are finalizing.
+ */
+APU_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[APR_MD5_DIGESTSIZE],
+                                        apr_md5_ctx_t *context);
+
+/**
+ * MD5 in one step
+ * @param digest The final MD5 digest
+ * @param input The message block to use
+ * @param inputLen The length of the message block
+ */
+APU_DECLARE(apr_status_t) apr_md5(unsigned char digest[APR_MD5_DIGESTSIZE],
+                                  const void *input,
+                                  apr_size_t inputLen);
+
+/**
+ * Encode a password using an MD5 algorithm
+ * @param password The password to encode
+ * @param salt The salt string to use for the encoding
+ * @param result The string to store the encoded password in
+ * @param nbytes The size of the result buffer
+ */
+APU_DECLARE(apr_status_t) apr_md5_encode(const char *password, const char *salt,
+                                         char *result, apr_size_t nbytes);
+
+/**
+ * Encode a password using the bcrypt algorithm
+ * @param password The password to encode
+ * @param count The cost of the encoding, possible values are 4 to 31
+ * @param salt Pointer to binary data to be used as salt for the encoding
+ * @param salt_len The size of the salt data (must be >= 16)
+ * @param out The string to store the encoded password in
+ * @param out_len The size of the result buffer (must be >= 61)
+ */
+APU_DECLARE(apr_status_t) apr_bcrypt_encode(const char *pw,
+                                            unsigned int count,
+                                            const unsigned char *salt,
+                                            apr_size_t salt_len,
+                                            char *out, apr_size_t out_len);
+
+/**
+ * Validate hashes created by APR-supported algorithms: md5, bcrypt, and sha1.
+ * hashes created by crypt are supported only on platforms that provide
+ * crypt(3), so don't rely on that function unless you know that your
+ * application will be run only on platforms that support it.  On platforms
+ * that don't support crypt(3), this falls back to a clear text string
+ * comparison.
+ * @param passwd The password to validate
+ * @param hash The password to validate against
+ */
+APU_DECLARE(apr_status_t) apr_password_validate(const char *passwd, 
+                                                const char *hash);
+
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_MD5_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_memcache.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_memcache.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_memcache.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,444 @@
+/* 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.
+ */
+
+#ifndef APR_MEMCACHE_H
+#define APR_MEMCACHE_H
+
+/**
+ * @file apr_memcache.h
+ * @brief Client interface for memcached
+ * @remark To use this interface you must have a separate memcached
+ * server running. See the memcached website at http://www.danga.com/memcached/
+ * for more information.
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_time.h"
+#include "apr_strings.h"
+#include "apr_network_io.h"
+#include "apr_ring.h"
+#include "apr_buckets.h"
+#include "apr_reslist.h"
+#include "apr_hash.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup APR_Util_MC Memcached Client Routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+/** Specifies the status of a memcached server */
+typedef enum
+{
+    APR_MC_SERVER_LIVE, /**< Server is alive and responding to requests */
+    APR_MC_SERVER_DEAD  /**< Server is not responding to requests */
+} apr_memcache_server_status_t;
+
+/** Opaque memcache client connection object */
+typedef struct apr_memcache_conn_t apr_memcache_conn_t;
+
+/** Memcache Server Info Object */
+typedef struct apr_memcache_server_t apr_memcache_server_t;
+struct apr_memcache_server_t
+{
+    const char *host; /**< Hostname of this Server */
+    apr_port_t port; /**< Port of this Server */
+    apr_memcache_server_status_t status; /**< @see apr_memcache_server_status_t */
+#if APR_HAS_THREADS || defined(DOXYGEN)
+    apr_reslist_t *conns; /**< Resource list of actual client connections */
+#else
+    apr_memcache_conn_t *conn;
+#endif
+    apr_pool_t *p; /** Pool to use for private allocations */
+#if APR_HAS_THREADS
+    apr_thread_mutex_t *lock;
+#endif
+    apr_time_t btime;
+};
+
+/* Custom hash callback function prototype, user for server selection.
+* @param baton user selected baton
+* @param data data to hash
+* @param data_len length of data
+*/
+typedef apr_uint32_t (*apr_memcache_hash_func)(void *baton,
+                                               const char *data,
+                                               const apr_size_t data_len);
+
+typedef struct apr_memcache_t apr_memcache_t;
+
+/* Custom Server Select callback function prototype.
+* @param baton user selected baton
+* @param mc memcache instance, use mc->live_servers to select a node
+* @param hash hash of the selected key.
+*/
+typedef apr_memcache_server_t* (*apr_memcache_server_func)(void *baton,
+                                                 apr_memcache_t *mc,
+                                                 const apr_uint32_t hash);
+
+/** Container for a set of memcached servers */
+struct apr_memcache_t
+{
+    apr_uint32_t flags; /**< Flags, Not currently used */
+    apr_uint16_t nalloc; /**< Number of Servers Allocated */
+    apr_uint16_t ntotal; /**< Number of Servers Added */
+    apr_memcache_server_t **live_servers; /**< Array of Servers */
+    apr_pool_t *p; /** Pool to use for allocations */
+    void *hash_baton;
+    apr_memcache_hash_func hash_func;
+    void *server_baton;
+    apr_memcache_server_func server_func;
+};
+
+/** Returned Data from a multiple get */
+typedef struct
+{
+    apr_status_t status;
+    const char* key;
+    apr_size_t len;
+    char *data;
+    apr_uint16_t flags;
+} apr_memcache_value_t;
+
+/**
+ * Creates a crc32 hash used to split keys between servers
+ * @param mc The memcache client object to use
+ * @param data Data to be hashed
+ * @param data_len Length of the data to use
+ * @return crc32 hash of data
+ * @remark The crc32 hash is not compatible with old memcached clients.
+ */
+APU_DECLARE(apr_uint32_t) apr_memcache_hash(apr_memcache_t *mc,
+                                            const char *data,
+                                            const apr_size_t data_len);
+
+/**
+ * Pure CRC32 Hash. Used by some clients.
+ */
+APU_DECLARE(apr_uint32_t) apr_memcache_hash_crc32(void *baton,
+                                                  const char *data,
+                                                  const apr_size_t data_len);
+
+/**
+ * hash compatible with the standard Perl Client.
+ */
+APU_DECLARE(apr_uint32_t) apr_memcache_hash_default(void *baton,
+                                                    const char *data,
+                                                    const apr_size_t data_len);
+
+/**
+ * Picks a server based on a hash
+ * @param mc The memcache client object to use
+ * @param hash Hashed value of a Key
+ * @return server that controls specified hash
+ * @see apr_memcache_hash
+ */
+APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash(apr_memcache_t *mc,
+                                                                   const apr_uint32_t hash);
+
+/**
+ * server selection compatible with the standard Perl Client.
+ */
+APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash_default(void *baton,
+                                                                           apr_memcache_t *mc, 
+                                                                           const apr_uint32_t hash);
+
+/**
+ * Adds a server to a client object
+ * @param mc The memcache client object to use
+ * @param server Server to add
+ * @remark Adding servers is not thread safe, and should be done once at startup.
+ * @warning Changing servers after startup may cause keys to go to
+ * different servers.
+ */
+APU_DECLARE(apr_status_t) apr_memcache_add_server(apr_memcache_t *mc,
+                                                  apr_memcache_server_t *server);
+
+
+/**
+ * Finds a Server object based on a hostname/port pair
+ * @param mc The memcache client object to use
+ * @param host Hostname of the server
+ * @param port Port of the server
+ * @return Server with matching Hostname and Port, or NULL if none was found.
+ */
+APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server(apr_memcache_t *mc,
+                                                              const char *host,
+                                                              apr_port_t port);
+
+/**
+ * Enables a Server for use again
+ * @param mc The memcache client object to use
+ * @param ms Server to Activate
+ */
+APU_DECLARE(apr_status_t) apr_memcache_enable_server(apr_memcache_t *mc,
+                                                     apr_memcache_server_t *ms);
+
+
+/**
+ * Disable a Server
+ * @param mc The memcache client object to use
+ * @param ms Server to Disable
+ */
+APU_DECLARE(apr_status_t) apr_memcache_disable_server(apr_memcache_t *mc,
+                                                      apr_memcache_server_t *ms);
+
+/**
+ * Creates a new Server Object
+ * @param p Pool to use
+ * @param host hostname of the server
+ * @param port port of the server
+ * @param min  minimum number of client sockets to open
+ * @param smax soft maximum number of client connections to open
+ * @param max  hard maximum number of client connections
+ * @param ttl  time to live in microseconds of a client connection
+ * @param ns   location of the new server object
+ * @see apr_reslist_create
+ * @remark min, smax, and max are only used when APR_HAS_THREADS
+ */
+APU_DECLARE(apr_status_t) apr_memcache_server_create(apr_pool_t *p,
+                                                     const char *host,
+                                                     apr_port_t port,
+                                                     apr_uint32_t min,
+                                                     apr_uint32_t smax,
+                                                     apr_uint32_t max,
+                                                     apr_uint32_t ttl,
+                                                     apr_memcache_server_t **ns);
+/**
+ * Creates a new memcached client object
+ * @param p Pool to use
+ * @param max_servers maximum number of servers
+ * @param flags Not currently used
+ * @param mc   location of the new memcache client object
+ */
+APU_DECLARE(apr_status_t) apr_memcache_create(apr_pool_t *p,
+                                              apr_uint16_t max_servers,
+                                              apr_uint32_t flags,
+                                              apr_memcache_t **mc);
+
+/**
+ * Gets a value from the server, allocating the value out of p
+ * @param mc client to use
+ * @param p Pool to use
+ * @param key null terminated string containing the key
+ * @param baton location of the allocated value
+ * @param len   length of data at baton
+ * @param flags any flags set by the client for this key
+ * @return 
+ */
+APU_DECLARE(apr_status_t) apr_memcache_getp(apr_memcache_t *mc, 
+                                            apr_pool_t *p,
+                                            const char* key,
+                                            char **baton,
+                                            apr_size_t *len,
+                                            apr_uint16_t *flags);
+
+
+/**
+ * Add a key to a hash for a multiget query
+ *  if the hash (*value) is NULL it will be created
+ * @param data_pool pool from where the hash and their items are created from
+ * @param key null terminated string containing the key
+ * @param values hash of keys and values that this key will be added to
+ * @return
+ */
+APU_DECLARE(void) apr_memcache_add_multget_key(apr_pool_t *data_pool,
+                                               const char* key,
+                                               apr_hash_t **values);
+
+/**
+ * Gets multiple values from the server, allocating the values out of p
+ * @param mc client to use
+ * @param temp_pool Pool used for temporary allocations. May be cleared inside this
+ *        call.
+ * @param data_pool Pool used to allocate data for the returned values.
+ * @param values hash of apr_memcache_value_t keyed by strings, contains the
+ *        result of the multiget call.
+ * @return
+ */
+APU_DECLARE(apr_status_t) apr_memcache_multgetp(apr_memcache_t *mc,
+                                                apr_pool_t *temp_pool,
+                                                apr_pool_t *data_pool,
+                                                apr_hash_t *values);
+
+/**
+ * Sets a value by key on the server
+ * @param mc client to use
+ * @param key   null terminated string containing the key
+ * @param baton data to store on the server
+ * @param data_size   length of data at baton
+ * @param timeout time in seconds for the data to live on the server
+ * @param flags any flags set by the client for this key
+ */
+APU_DECLARE(apr_status_t) apr_memcache_set(apr_memcache_t *mc,
+                                           const char *key,
+                                           char *baton,
+                                           const apr_size_t data_size,
+                                           apr_uint32_t timeout,
+                                           apr_uint16_t flags);
+
+/**
+ * Adds value by key on the server
+ * @param mc client to use
+ * @param key   null terminated string containing the key
+ * @param baton data to store on the server
+ * @param data_size   length of data at baton
+ * @param timeout time for the data to live on the server
+ * @param flags any flags set by the client for this key
+ * @return APR_SUCCESS if the key was added, APR_EEXIST if the key 
+ * already exists on the server.
+ */
+APU_DECLARE(apr_status_t) apr_memcache_add(apr_memcache_t *mc,
+                                           const char *key,
+                                           char *baton,
+                                           const apr_size_t data_size,
+                                           apr_uint32_t timeout,
+                                           apr_uint16_t flags);
+
+/**
+ * Replaces value by key on the server
+ * @param mc client to use
+ * @param key   null terminated string containing the key
+ * @param baton data to store on the server
+ * @param data_size   length of data at baton
+ * @param timeout time for the data to live on the server
+ * @param flags any flags set by the client for this key
+ * @return APR_SUCCESS if the key was added, APR_EEXIST if the key 
+ * did not exist on the server.
+ */
+APU_DECLARE(apr_status_t) apr_memcache_replace(apr_memcache_t *mc,
+                                               const char *key,
+                                               char *baton,
+                                               const apr_size_t data_size,
+                                               apr_uint32_t timeout,
+                                               apr_uint16_t flags);
+/**
+ * Deletes a key from a server
+ * @param mc client to use
+ * @param key   null terminated string containing the key
+ * @param timeout time for the delete to stop other clients from adding
+ */
+APU_DECLARE(apr_status_t) apr_memcache_delete(apr_memcache_t *mc,
+                                              const char *key,
+                                              apr_uint32_t timeout);
+
+/**
+ * Increments a value
+ * @param mc client to use
+ * @param key   null terminated string containing the key
+ * @param n     number to increment by
+ * @param nv    new value after incrementing
+ */
+APU_DECLARE(apr_status_t) apr_memcache_incr(apr_memcache_t *mc, 
+                                            const char *key,
+                                            apr_int32_t n,
+                                            apr_uint32_t *nv);
+
+/**
+ * Decrements a value
+ * @param mc client to use
+ * @param key   null terminated string containing the key
+ * @param n     number to decrement by
+ * @param new_value    new value after decrementing
+ */
+APU_DECLARE(apr_status_t) apr_memcache_decr(apr_memcache_t *mc, 
+                                            const char *key,
+                                            apr_int32_t n,
+                                            apr_uint32_t *new_value);
+
+/**
+ * Query a server's version
+ * @param ms    server to query
+ * @param p     Pool to allocate answer from
+ * @param baton location to store server version string
+ * @param len   length of the server version string
+ */
+APU_DECLARE(apr_status_t) apr_memcache_version(apr_memcache_server_t *ms,
+                                               apr_pool_t *p,
+                                               char **baton);
+
+typedef struct
+{
+    /** Version string of this server */
+    const char *version;
+    /** Process id of this server process */
+    apr_uint32_t pid;
+    /** Number of seconds this server has been running */
+    apr_uint32_t uptime;
+    /** current UNIX time according to the server */
+    apr_time_t time;
+    /** The size of a pointer on the current machine */
+    apr_uint32_t pointer_size;
+    /** Accumulated user time for this process */
+    apr_time_t rusage_user;
+    /** Accumulated system time for this process */
+    apr_time_t rusage_system;
+    /** Current number of items stored by the server */
+    apr_uint32_t curr_items;
+    /** Total number of items stored by this server */
+    apr_uint32_t total_items;
+    /** Current number of bytes used by this server to store items */
+    apr_uint64_t bytes;
+    /** Number of open connections */
+    apr_uint32_t curr_connections;
+    /** Total number of connections opened since the server started running */
+    apr_uint32_t total_connections;
+    /** Number of connection structures allocated by the server */
+    apr_uint32_t connection_structures;
+    /** Cumulative number of retrieval requests */
+    apr_uint32_t cmd_get;
+    /** Cumulative number of storage requests */
+    apr_uint32_t cmd_set;
+    /** Number of keys that have been requested and found present */
+    apr_uint32_t get_hits;
+    /** Number of items that have been requested and not found */
+    apr_uint32_t get_misses;
+    /** Number of items removed from cache because they passed their
+        expiration time */
+    apr_uint64_t evictions;
+    /** Total number of bytes read by this server */
+    apr_uint64_t bytes_read;
+    /** Total number of bytes sent by this server */
+    apr_uint64_t bytes_written;
+    /** Number of bytes this server is allowed to use for storage. */
+    apr_uint32_t limit_maxbytes;
+    /** Number of threads the server is running (if built with threading) */
+    apr_uint32_t threads; 
+} apr_memcache_stats_t;
+
+/**
+ * Query a server for statistics
+ * @param ms    server to query
+ * @param p     Pool to allocate answer from
+ * @param stats location of the new statistics structure
+ */
+APU_DECLARE(apr_status_t) apr_memcache_stats(apr_memcache_server_t *ms, 
+                                             apr_pool_t *p,
+                                             apr_memcache_stats_t **stats);
+
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_MEMCACHE_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_mmap.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_mmap.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_mmap.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,171 @@
+/* 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.
+ */
+
+#ifndef APR_MMAP_H
+#define APR_MMAP_H
+
+/**
+ * @file apr_mmap.h
+ * @brief APR MMAP routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+#include "apr_ring.h"
+#include "apr_file_io.h"        /* for apr_file_t */
+
+#ifdef BEOS
+#include <kernel/OS.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_mmap MMAP (Memory Map) Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/** MMap opened for reading */
+#define APR_MMAP_READ    1
+/** MMap opened for writing */
+#define APR_MMAP_WRITE   2
+
+/** @see apr_mmap_t */
+typedef struct apr_mmap_t            apr_mmap_t;
+
+/**
+ * @remark
+ * As far as I can tell the only really sane way to store an MMAP is as a
+ * void * and a length.  BeOS requires this area_id, but that's just a little
+ * something extra.  I am exposing this type, because it doesn't make much
+ * sense to keep it private, and opening it up makes some stuff easier in
+ * Apache.
+ */
+/** The MMAP structure */
+struct apr_mmap_t {
+    /** The pool the mmap structure was allocated out of. */
+    apr_pool_t *cntxt;
+#ifdef BEOS
+    /** An area ID.  Only valid on BeOS */
+    area_id area;
+#endif
+#ifdef WIN32
+    /** The handle of the file mapping */
+    HANDLE mhandle;
+    /** The start of the real memory page area (mapped view) */
+    void *mv;
+    /** The physical start, size and offset */
+    apr_off_t  pstart;
+    apr_size_t psize;
+    apr_off_t  poffset;
+#endif
+    /** The start of the memory mapped area */
+    void *mm;
+    /** The amount of data in the mmap */
+    apr_size_t size;
+    /** ring of apr_mmap_t's that reference the same
+     * mmap'ed region; acts in place of a reference count */
+    APR_RING_ENTRY(apr_mmap_t) link;
+};
+
+#if APR_HAS_MMAP || defined(DOXYGEN)
+
+/** @def APR_MMAP_THRESHOLD 
+ * Files have to be at least this big before they're mmap()d.  This is to deal
+ * with systems where the expense of doing an mmap() and an munmap() outweighs
+ * the benefit for small files.  It shouldn't be set lower than 1.
+ */
+#ifdef MMAP_THRESHOLD
+#  define APR_MMAP_THRESHOLD              MMAP_THRESHOLD
+#else
+#  ifdef SUNOS4
+#    define APR_MMAP_THRESHOLD            (8*1024)
+#  else
+#    define APR_MMAP_THRESHOLD            1
+#  endif /* SUNOS4 */
+#endif /* MMAP_THRESHOLD */
+
+/** @def APR_MMAP_LIMIT
+ * Maximum size of MMap region
+ */
+#ifdef MMAP_LIMIT
+#  define APR_MMAP_LIMIT                  MMAP_LIMIT
+#else
+#  define APR_MMAP_LIMIT                  (4*1024*1024)
+#endif /* MMAP_LIMIT */
+
+/** Can this file be MMaped */
+#define APR_MMAP_CANDIDATE(filelength) \
+    ((filelength >= APR_MMAP_THRESHOLD) && (filelength < APR_MMAP_LIMIT))
+
+/*   Function definitions */
+
+/** 
+ * Create a new mmap'ed file out of an existing APR file.
+ * @param newmmap The newly created mmap'ed file.
+ * @param file The file turn into an mmap.
+ * @param offset The offset into the file to start the data pointer at.
+ * @param size The size of the file
+ * @param flag bit-wise or of:
+ * <PRE>
+ *          APR_MMAP_READ       MMap opened for reading
+ *          APR_MMAP_WRITE      MMap opened for writing
+ * </PRE>
+ * @param cntxt The pool to use when creating the mmap.
+ */
+APR_DECLARE(apr_status_t) apr_mmap_create(apr_mmap_t **newmmap, 
+                                          apr_file_t *file, apr_off_t offset,
+                                          apr_size_t size, apr_int32_t flag,
+                                          apr_pool_t *cntxt);
+
+/**
+ * Duplicate the specified MMAP.
+ * @param new_mmap The structure to duplicate into. 
+ * @param old_mmap The mmap to duplicate.
+ * @param p The pool to use for new_mmap.
+ */         
+APR_DECLARE(apr_status_t) apr_mmap_dup(apr_mmap_t **new_mmap,
+                                       apr_mmap_t *old_mmap,
+                                       apr_pool_t *p);
+
+/**
+ * Remove a mmap'ed.
+ * @param mm The mmap'ed file.
+ */
+APR_DECLARE(apr_status_t) apr_mmap_delete(apr_mmap_t *mm);
+
+/** 
+ * Move the pointer into the mmap'ed file to the specified offset.
+ * @param addr The pointer to the offset specified.
+ * @param mm The mmap'ed file.
+ * @param offset The offset to move to.
+ */
+APR_DECLARE(apr_status_t) apr_mmap_offset(void **addr, apr_mmap_t *mm, 
+                                          apr_off_t offset);
+
+#endif /* APR_HAS_MMAP */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_MMAP_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_network_io.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_network_io.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_network_io.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,859 @@
+/* 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.
+ */
+
+#ifndef APR_NETWORK_IO_H
+#define APR_NETWORK_IO_H
+/**
+ * @file apr_network_io.h
+ * @brief APR Network library
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_file_io.h"
+#include "apr_errno.h"
+#include "apr_inherit.h" 
+
+#if APR_HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_network_io Network Routines
+ * @ingroup APR 
+ * @{
+ */
+
+#ifndef APR_MAX_SECS_TO_LINGER
+/** Maximum seconds to linger */
+#define APR_MAX_SECS_TO_LINGER 30
+#endif
+
+#ifndef APRMAXHOSTLEN
+/** Maximum hostname length */
+#define APRMAXHOSTLEN 256
+#endif
+
+#ifndef APR_ANYADDR
+/** Default 'any' address */
+#define APR_ANYADDR "0.0.0.0"
+#endif
+
+/**
+ * @defgroup apr_sockopt Socket option definitions
+ * @{
+ */
+#define APR_SO_LINGER        1    /**< Linger */
+#define APR_SO_KEEPALIVE     2    /**< Keepalive */
+#define APR_SO_DEBUG         4    /**< Debug */
+#define APR_SO_NONBLOCK      8    /**< Non-blocking IO */
+#define APR_SO_REUSEADDR     16   /**< Reuse addresses */
+#define APR_SO_SNDBUF        64   /**< Send buffer */
+#define APR_SO_RCVBUF        128  /**< Receive buffer */
+#define APR_SO_DISCONNECTED  256  /**< Disconnected */
+#define APR_TCP_NODELAY      512  /**< For SCTP sockets, this is mapped
+                                   * to STCP_NODELAY internally.
+                                   */
+#define APR_TCP_NOPUSH       1024 /**< No push */
+#define APR_RESET_NODELAY    2048 /**< This flag is ONLY set internally
+                                   * when we set APR_TCP_NOPUSH with
+                                   * APR_TCP_NODELAY set to tell us that
+                                   * APR_TCP_NODELAY should be turned on
+                                   * again when NOPUSH is turned off
+                                   */
+#define APR_INCOMPLETE_READ 4096  /**< Set on non-blocking sockets
+				   * (timeout != 0) on which the
+				   * previous read() did not fill a buffer
+				   * completely.  the next apr_socket_recv() 
+                                   * will first call select()/poll() rather than
+				   * going straight into read().  (Can also
+				   * be set by an application to force a
+				   * select()/poll() call before the next
+				   * read, in cases where the app expects
+				   * that an immediate read would fail.)
+				   */
+#define APR_INCOMPLETE_WRITE 8192 /**< like APR_INCOMPLETE_READ, but for write
+                                   * @see APR_INCOMPLETE_READ
+                                   */
+#define APR_IPV6_V6ONLY     16384 /**< Don't accept IPv4 connections on an
+                                   * IPv6 listening socket.
+                                   */
+#define APR_TCP_DEFER_ACCEPT 32768 /**< Delay accepting of new connections 
+                                    * until data is available.
+                                    * @see apr_socket_accept_filter
+                                    */
+
+/** @} */
+
+/** Define what type of socket shutdown should occur. */
+typedef enum {
+    APR_SHUTDOWN_READ,          /**< no longer allow read request */
+    APR_SHUTDOWN_WRITE,         /**< no longer allow write requests */
+    APR_SHUTDOWN_READWRITE      /**< no longer allow read or write requests */
+} apr_shutdown_how_e;
+
+#define APR_IPV4_ADDR_OK  0x01  /**< @see apr_sockaddr_info_get() */
+#define APR_IPV6_ADDR_OK  0x02  /**< @see apr_sockaddr_info_get() */
+
+#if (!APR_HAVE_IN_ADDR)
+/**
+ * We need to make sure we always have an in_addr type, so APR will just
+ * define it ourselves, if the platform doesn't provide it.
+ */
+struct in_addr {
+    apr_uint32_t  s_addr; /**< storage to hold the IP# */
+};
+#endif
+
+/** @def APR_INADDR_NONE
+ * Not all platforms have a real INADDR_NONE.  This macro replaces
+ * INADDR_NONE on all platforms.
+ */
+#ifdef INADDR_NONE
+#define APR_INADDR_NONE INADDR_NONE
+#else
+#define APR_INADDR_NONE ((unsigned int) 0xffffffff)
+#endif
+
+/**
+ * @def APR_INET
+ * Not all platforms have these defined, so we'll define them here
+ * The default values come from FreeBSD 4.1.1
+ */
+#define APR_INET     AF_INET
+/** @def APR_UNSPEC
+ * Let the system decide which address family to use
+ */
+#ifdef AF_UNSPEC
+#define APR_UNSPEC   AF_UNSPEC
+#else
+#define APR_UNSPEC   0
+#endif
+#if APR_HAVE_IPV6
+/** @def APR_INET6
+* IPv6 Address Family. Not all platforms may have this defined.
+*/
+
+#define APR_INET6    AF_INET6
+#endif
+
+/**
+ * @defgroup IP_Proto IP Protocol Definitions for use when creating sockets
+ * @{
+ */
+#define APR_PROTO_TCP       6   /**< TCP  */
+#define APR_PROTO_UDP      17   /**< UDP  */
+#define APR_PROTO_SCTP    132   /**< SCTP */
+/** @} */
+
+/**
+ * Enum used to denote either the local and remote endpoint of a
+ * connection.
+ */
+typedef enum {
+    APR_LOCAL,   /**< Socket information for local end of connection */
+    APR_REMOTE   /**< Socket information for remote end of connection */
+} apr_interface_e;
+
+/**
+ * The specific declaration of inet_addr's ... some platforms fall back
+ * inet_network (this is not good, but necessary)
+ */
+
+#if APR_HAVE_INET_ADDR
+#define apr_inet_addr    inet_addr
+#elif APR_HAVE_INET_NETWORK        /* only DGUX, as far as I know */
+/**
+ * @warning
+ * not generally safe... inet_network() and inet_addr() perform
+ * different functions */
+#define apr_inet_addr    inet_network
+#endif
+
+/** A structure to represent sockets */
+typedef struct apr_socket_t     apr_socket_t;
+/**
+ * A structure to encapsulate headers and trailers for apr_socket_sendfile
+ */
+typedef struct apr_hdtr_t       apr_hdtr_t;
+/** A structure to represent in_addr */
+typedef struct in_addr          apr_in_addr_t;
+/** A structure to represent an IP subnet */
+typedef struct apr_ipsubnet_t apr_ipsubnet_t;
+
+/** @remark use apr_uint16_t just in case some system has a short that isn't 16 bits... */
+typedef apr_uint16_t            apr_port_t;
+
+/** @remark It's defined here as I think it should all be platform safe...
+ * @see apr_sockaddr_t
+ */
+typedef struct apr_sockaddr_t apr_sockaddr_t;
+/**
+ * APRs socket address type, used to ensure protocol independence
+ */
+struct apr_sockaddr_t {
+    /** The pool to use... */
+    apr_pool_t *pool;
+    /** The hostname */
+    char *hostname;
+    /** Either a string of the port number or the service name for the port */
+    char *servname;
+    /** The numeric port */
+    apr_port_t port;
+    /** The family */
+    apr_int32_t family;
+    /** How big is the sockaddr we're using? */
+    apr_socklen_t salen;
+    /** How big is the ip address structure we're using? */
+    int ipaddr_len;
+    /** How big should the address buffer be?  16 for v4 or 46 for v6
+     *  used in inet_ntop... */
+    int addr_str_len;
+    /** This points to the IP address structure within the appropriate
+     *  sockaddr structure.  */
+    void *ipaddr_ptr;
+    /** If multiple addresses were found by apr_sockaddr_info_get(), this 
+     *  points to a representation of the next address. */
+    apr_sockaddr_t *next;
+    /** Union of either IPv4 or IPv6 sockaddr. */
+    union {
+        /** IPv4 sockaddr structure */
+        struct sockaddr_in sin;
+#if APR_HAVE_IPV6
+        /** IPv6 sockaddr structure */
+        struct sockaddr_in6 sin6;
+#endif
+#if APR_HAVE_SA_STORAGE
+        /** Placeholder to ensure that the size of this union is not
+         * dependent on whether APR_HAVE_IPV6 is defined. */
+        struct sockaddr_storage sas;
+#endif
+    } sa;
+};
+
+#if APR_HAS_SENDFILE
+/** 
+ * Support reusing the socket on platforms which support it (from disconnect,
+ * specifically Win32.
+ * @remark Optional flag passed into apr_socket_sendfile() 
+ */
+#define APR_SENDFILE_DISCONNECT_SOCKET      1
+#endif
+
+/** A structure to encapsulate headers and trailers for apr_socket_sendfile */
+struct apr_hdtr_t {
+    /** An iovec to store the headers sent before the file. */
+    struct iovec* headers;
+    /** number of headers in the iovec */
+    int numheaders;
+    /** An iovec to store the trailers sent after the file. */
+    struct iovec* trailers;
+    /** number of trailers in the iovec */
+    int numtrailers;
+};
+
+/* function definitions */
+
+/**
+ * Create a socket.
+ * @param new_sock The new socket that has been set up.
+ * @param family The address family of the socket (e.g., APR_INET).
+ * @param type The type of the socket (e.g., SOCK_STREAM).
+ * @param protocol The protocol of the socket (e.g., APR_PROTO_TCP).
+ * @param cont The pool for the apr_socket_t and associated storage.
+ */
+APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new_sock, 
+                                            int family, int type,
+                                            int protocol,
+                                            apr_pool_t *cont);
+
+/**
+ * Shutdown either reading, writing, or both sides of a socket.
+ * @param thesocket The socket to close 
+ * @param how How to shutdown the socket.  One of:
+ * <PRE>
+ *            APR_SHUTDOWN_READ         no longer allow read requests
+ *            APR_SHUTDOWN_WRITE        no longer allow write requests
+ *            APR_SHUTDOWN_READWRITE    no longer allow read or write requests 
+ * </PRE>
+ * @see apr_shutdown_how_e
+ * @remark This does not actually close the socket descriptor, it just
+ *      controls which calls are still valid on the socket.
+ */
+APR_DECLARE(apr_status_t) apr_socket_shutdown(apr_socket_t *thesocket,
+                                              apr_shutdown_how_e how);
+
+/**
+ * Close a socket.
+ * @param thesocket The socket to close 
+ */
+APR_DECLARE(apr_status_t) apr_socket_close(apr_socket_t *thesocket);
+
+/**
+ * Bind the socket to its associated port
+ * @param sock The socket to bind 
+ * @param sa The socket address to bind to
+ * @remark This may be where we will find out if there is any other process
+ *      using the selected port.
+ */
+APR_DECLARE(apr_status_t) apr_socket_bind(apr_socket_t *sock, 
+                                          apr_sockaddr_t *sa);
+
+/**
+ * Listen to a bound socket for connections.
+ * @param sock The socket to listen on 
+ * @param backlog The number of outstanding connections allowed in the sockets
+ *                listen queue.  If this value is less than zero, the listen
+ *                queue size is set to zero.  
+ */
+APR_DECLARE(apr_status_t) apr_socket_listen(apr_socket_t *sock, 
+                                            apr_int32_t backlog);
+
+/**
+ * Accept a new connection request
+ * @param new_sock A copy of the socket that is connected to the socket that
+ *                 made the connection request.  This is the socket which should
+ *                 be used for all future communication.
+ * @param sock The socket we are listening on.
+ * @param connection_pool The pool for the new socket.
+ */
+APR_DECLARE(apr_status_t) apr_socket_accept(apr_socket_t **new_sock, 
+                                            apr_socket_t *sock,
+                                            apr_pool_t *connection_pool);
+
+/**
+ * Issue a connection request to a socket either on the same machine 
+ * or a different one.
+ * @param sock The socket we wish to use for our side of the connection 
+ * @param sa The address of the machine we wish to connect to.
+ */
+APR_DECLARE(apr_status_t) apr_socket_connect(apr_socket_t *sock,
+                                             apr_sockaddr_t *sa);
+
+/**
+ * Determine whether the receive part of the socket has been closed by
+ * the peer (such that a subsequent call to apr_socket_read would
+ * return APR_EOF), if the socket's receive buffer is empty.  This
+ * function does not block waiting for I/O.
+ *
+ * @param sock The socket to check
+ * @param atreadeof If APR_SUCCESS is returned, *atreadeof is set to
+ *                  non-zero if a subsequent read would return APR_EOF
+ * @return an error is returned if it was not possible to determine the
+ *         status, in which case *atreadeof is not changed.
+ */
+APR_DECLARE(apr_status_t) apr_socket_atreadeof(apr_socket_t *sock,
+                                               int *atreadeof);
+
+/**
+ * Create apr_sockaddr_t from hostname, address family, and port.
+ * @param sa The new apr_sockaddr_t.
+ * @param hostname The hostname or numeric address string to resolve/parse, or
+ *               NULL to build an address that corresponds to 0.0.0.0 or ::
+ * @param family The address family to use, or APR_UNSPEC if the system should 
+ *               decide.
+ * @param port The port number.
+ * @param flags Special processing flags:
+ * <PRE>
+ *       APR_IPV4_ADDR_OK          first query for IPv4 addresses; only look
+ *                                 for IPv6 addresses if the first query failed;
+ *                                 only valid if family is APR_UNSPEC and hostname
+ *                                 isn't NULL; mutually exclusive with
+ *                                 APR_IPV6_ADDR_OK
+ *       APR_IPV6_ADDR_OK          first query for IPv6 addresses; only look
+ *                                 for IPv4 addresses if the first query failed;
+ *                                 only valid if family is APR_UNSPEC and hostname
+ *                                 isn't NULL and APR_HAVE_IPV6; mutually exclusive
+ *                                 with APR_IPV4_ADDR_OK
+ * </PRE>
+ * @param p The pool for the apr_sockaddr_t and associated storage.
+ */
+APR_DECLARE(apr_status_t) apr_sockaddr_info_get(apr_sockaddr_t **sa,
+                                          const char *hostname,
+                                          apr_int32_t family,
+                                          apr_port_t port,
+                                          apr_int32_t flags,
+                                          apr_pool_t *p);
+
+/**
+ * Look up the host name from an apr_sockaddr_t.
+ * @param hostname The hostname.
+ * @param sa The apr_sockaddr_t.
+ * @param flags Special processing flags.
+ */
+APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname,
+                                          apr_sockaddr_t *sa,
+                                          apr_int32_t flags);
+
+/**
+ * Parse hostname/IP address with scope id and port.
+ *
+ * Any of the following strings are accepted:
+ *   8080                  (just the port number)
+ *   www.apache.org        (just the hostname)
+ *   www.apache.org:8080   (hostname and port number)
+ *   [fe80::1]:80          (IPv6 numeric address string only)
+ *   [fe80::1%eth0]        (IPv6 numeric address string and scope id)
+ *
+ * Invalid strings:
+ *                         (empty string)
+ *   [abc]                 (not valid IPv6 numeric address string)
+ *   abc:65536             (invalid port number)
+ *
+ * @param addr The new buffer containing just the hostname.  On output, *addr 
+ *             will be NULL if no hostname/IP address was specfied.
+ * @param scope_id The new buffer containing just the scope id.  On output, 
+ *                 *scope_id will be NULL if no scope id was specified.
+ * @param port The port number.  On output, *port will be 0 if no port was 
+ *             specified.
+ *             ### FIXME: 0 is a legal port (per RFC 1700). this should
+ *             ### return something besides zero if the port is missing.
+ * @param str The input string to be parsed.
+ * @param p The pool from which *addr and *scope_id are allocated.
+ * @remark If scope id shouldn't be allowed, check for scope_id != NULL in 
+ *         addition to checking the return code.  If addr/hostname should be 
+ *         required, check for addr == NULL in addition to checking the 
+ *         return code.
+ */
+APR_DECLARE(apr_status_t) apr_parse_addr_port(char **addr,
+                                              char **scope_id,
+                                              apr_port_t *port,
+                                              const char *str,
+                                              apr_pool_t *p);
+
+/**
+ * Get name of the current machine
+ * @param buf A buffer to store the hostname in.
+ * @param len The maximum length of the hostname that can be stored in the
+ *            buffer provided.  The suggested length is APRMAXHOSTLEN + 1.
+ * @param cont The pool to use.
+ * @remark If the buffer was not large enough, an error will be returned.
+ */
+APR_DECLARE(apr_status_t) apr_gethostname(char *buf, int len, apr_pool_t *cont);
+
+/**
+ * Return the data associated with the current socket
+ * @param data The user data associated with the socket.
+ * @param key The key to associate with the user data.
+ * @param sock The currently open socket.
+ */
+APR_DECLARE(apr_status_t) apr_socket_data_get(void **data, const char *key,
+                                              apr_socket_t *sock);
+
+/**
+ * Set the data associated with the current socket.
+ * @param sock The currently open socket.
+ * @param data The user data to associate with the socket.
+ * @param key The key to associate with the data.
+ * @param cleanup The cleanup to call when the socket is destroyed.
+ */
+APR_DECLARE(apr_status_t) apr_socket_data_set(apr_socket_t *sock, void *data,
+                                              const char *key,
+                                              apr_status_t (*cleanup)(void*));
+
+/**
+ * Send data over a network.
+ * @param sock The socket to send the data over.
+ * @param buf The buffer which contains the data to be sent. 
+ * @param len On entry, the number of bytes to send; on exit, the number
+ *            of bytes sent.
+ * @remark
+ * <PRE>
+ * This functions acts like a blocking write by default.  To change 
+ * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
+ * socket option.
+ *
+ * It is possible for both bytes to be sent and an error to be returned.
+ *
+ * APR_EINTR is never returned.
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const char *buf, 
+                                          apr_size_t *len);
+
+/**
+ * Send multiple packets of data over a network.
+ * @param sock The socket to send the data over.
+ * @param vec The array of iovec structs containing the data to send 
+ * @param nvec The number of iovec structs in the array
+ * @param len Receives the number of bytes actually written
+ * @remark
+ * <PRE>
+ * This functions acts like a blocking write by default.  To change 
+ * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
+ * socket option.
+ * The number of bytes actually sent is stored in argument 3.
+ *
+ * It is possible for both bytes to be sent and an error to be returned.
+ *
+ * APR_EINTR is never returned.
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock, 
+                                           const struct iovec *vec,
+                                           apr_int32_t nvec, apr_size_t *len);
+
+/**
+ * @param sock The socket to send from
+ * @param where The apr_sockaddr_t describing where to send the data
+ * @param flags The flags to use
+ * @param buf  The data to send
+ * @param len  The length of the data to send
+ */
+APR_DECLARE(apr_status_t) apr_socket_sendto(apr_socket_t *sock, 
+                                            apr_sockaddr_t *where,
+                                            apr_int32_t flags, const char *buf, 
+                                            apr_size_t *len);
+
+/**
+ * Read data from a socket.  On success, the address of the peer from
+ * which the data was sent is copied into the @a from parameter, and the
+ * @a len parameter is updated to give the number of bytes written to
+ * @a buf.
+ *
+ * @param from Updated with the address from which the data was received
+ * @param sock The socket to use
+ * @param flags The flags to use
+ * @param buf  The buffer to use
+ * @param len  The length of the available buffer
+ */
+
+APR_DECLARE(apr_status_t) apr_socket_recvfrom(apr_sockaddr_t *from, 
+                                              apr_socket_t *sock,
+                                              apr_int32_t flags, char *buf, 
+                                              apr_size_t *len);
+ 
+#if APR_HAS_SENDFILE || defined(DOXYGEN)
+
+/**
+ * Send a file from an open file descriptor to a socket, along with 
+ * optional headers and trailers
+ * @param sock The socket to which we're writing
+ * @param file The open file from which to read
+ * @param hdtr A structure containing the headers and trailers to send
+ * @param offset Offset into the file where we should begin writing
+ * @param len (input)  - Number of bytes to send from the file 
+ *            (output) - Number of bytes actually sent, 
+ *                       including headers, file, and trailers
+ * @param flags APR flags that are mapped to OS specific flags
+ * @remark This functions acts like a blocking write by default.  To change 
+ *         this behavior, use apr_socket_timeout_set() or the
+ *         APR_SO_NONBLOCK socket option.
+ * The number of bytes actually sent is stored in the len parameter.
+ * The offset parameter is passed by reference for no reason; its
+ * value will never be modified by the apr_socket_sendfile() function.
+ */
+APR_DECLARE(apr_status_t) apr_socket_sendfile(apr_socket_t *sock, 
+                                              apr_file_t *file,
+                                              apr_hdtr_t *hdtr,
+                                              apr_off_t *offset,
+                                              apr_size_t *len,
+                                              apr_int32_t flags);
+
+#endif /* APR_HAS_SENDFILE */
+
+/**
+ * Read data from a network.
+ * @param sock The socket to read the data from.
+ * @param buf The buffer to store the data in. 
+ * @param len On entry, the number of bytes to receive; on exit, the number
+ *            of bytes received.
+ * @remark
+ * <PRE>
+ * This functions acts like a blocking read by default.  To change 
+ * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
+ * socket option.
+ * The number of bytes actually received is stored in argument 3.
+ *
+ * It is possible for both bytes to be received and an APR_EOF or
+ * other error to be returned.
+ *
+ * APR_EINTR is never returned.
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_socket_recv(apr_socket_t *sock, 
+                                   char *buf, apr_size_t *len);
+
+/**
+ * Setup socket options for the specified socket
+ * @param sock The socket to set up.
+ * @param opt The option we would like to configure.  One of:
+ * <PRE>
+ *            APR_SO_DEBUG      --  turn on debugging information 
+ *            APR_SO_KEEPALIVE  --  keep connections active
+ *            APR_SO_LINGER     --  lingers on close if data is present
+ *            APR_SO_NONBLOCK   --  Turns blocking on/off for socket
+ *                                  When this option is enabled, use
+ *                                  the APR_STATUS_IS_EAGAIN() macro to
+ *                                  see if a send or receive function
+ *                                  could not transfer data without
+ *                                  blocking.
+ *            APR_SO_REUSEADDR  --  The rules used in validating addresses
+ *                                  supplied to bind should allow reuse
+ *                                  of local addresses.
+ *            APR_SO_SNDBUF     --  Set the SendBufferSize
+ *            APR_SO_RCVBUF     --  Set the ReceiveBufferSize
+ * </PRE>
+ * @param on Value for the option.
+ */
+APR_DECLARE(apr_status_t) apr_socket_opt_set(apr_socket_t *sock,
+                                             apr_int32_t opt, apr_int32_t on);
+
+/**
+ * Setup socket timeout for the specified socket
+ * @param sock The socket to set up.
+ * @param t Value for the timeout.
+ * <PRE>
+ *   t > 0  -- read and write calls return APR_TIMEUP if specified time
+ *             elapsess with no data read or written
+ *   t == 0 -- read and write calls never block
+ *   t < 0  -- read and write calls block
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_socket_timeout_set(apr_socket_t *sock,
+                                                 apr_interval_time_t t);
+
+/**
+ * Query socket options for the specified socket
+ * @param sock The socket to query
+ * @param opt The option we would like to query.  One of:
+ * <PRE>
+ *            APR_SO_DEBUG      --  turn on debugging information 
+ *            APR_SO_KEEPALIVE  --  keep connections active
+ *            APR_SO_LINGER     --  lingers on close if data is present
+ *            APR_SO_NONBLOCK   --  Turns blocking on/off for socket
+ *            APR_SO_REUSEADDR  --  The rules used in validating addresses
+ *                                  supplied to bind should allow reuse
+ *                                  of local addresses.
+ *            APR_SO_SNDBUF     --  Set the SendBufferSize
+ *            APR_SO_RCVBUF     --  Set the ReceiveBufferSize
+ *            APR_SO_DISCONNECTED -- Query the disconnected state of the socket.
+ *                                  (Currently only used on Windows)
+ * </PRE>
+ * @param on Socket option returned on the call.
+ */
+APR_DECLARE(apr_status_t) apr_socket_opt_get(apr_socket_t *sock, 
+                                             apr_int32_t opt, apr_int32_t *on);
+
+/**
+ * Query socket timeout for the specified socket
+ * @param sock The socket to query
+ * @param t Socket timeout returned from the query.
+ */
+APR_DECLARE(apr_status_t) apr_socket_timeout_get(apr_socket_t *sock, 
+                                                 apr_interval_time_t *t);
+
+/**
+ * Query the specified socket if at the OOB/Urgent data mark
+ * @param sock The socket to query
+ * @param atmark Is set to true if socket is at the OOB/urgent mark,
+ *               otherwise is set to false.
+ */
+APR_DECLARE(apr_status_t) apr_socket_atmark(apr_socket_t *sock, 
+                                            int *atmark);
+
+/**
+ * Return an address associated with a socket; either the address to
+ * which the socket is bound locally or the the address of the peer
+ * to which the socket is connected.
+ * @param sa The returned apr_sockaddr_t.
+ * @param which Whether to retrieve the local or remote address
+ * @param sock The socket to use
+ */
+APR_DECLARE(apr_status_t) apr_socket_addr_get(apr_sockaddr_t **sa,
+                                              apr_interface_e which,
+                                              apr_socket_t *sock);
+ 
+/**
+ * Return the IP address (in numeric address string format) in
+ * an APR socket address.  APR will allocate storage for the IP address 
+ * string from the pool of the apr_sockaddr_t.
+ * @param addr The IP address.
+ * @param sockaddr The socket address to reference.
+ */
+APR_DECLARE(apr_status_t) apr_sockaddr_ip_get(char **addr, 
+                                              apr_sockaddr_t *sockaddr);
+
+/**
+ * Write the IP address (in numeric address string format) of the APR
+ * socket address @a sockaddr into the buffer @a buf (of size @a buflen).
+ * @param sockaddr The socket address to reference.
+ */
+APR_DECLARE(apr_status_t) apr_sockaddr_ip_getbuf(char *buf, apr_size_t buflen,
+                                                 apr_sockaddr_t *sockaddr);
+
+/**
+ * See if the IP addresses in two APR socket addresses are
+ * equivalent.  Appropriate logic is present for comparing
+ * IPv4-mapped IPv6 addresses with IPv4 addresses.
+ *
+ * @param addr1 One of the APR socket addresses.
+ * @param addr2 The other APR socket address.
+ * @remark The return value will be non-zero if the addresses
+ * are equivalent.
+ */
+APR_DECLARE(int) apr_sockaddr_equal(const apr_sockaddr_t *addr1,
+                                    const apr_sockaddr_t *addr2);
+
+/**
+* Return the type of the socket.
+* @param sock The socket to query.
+* @param type The returned type (e.g., SOCK_STREAM).
+*/
+APR_DECLARE(apr_status_t) apr_socket_type_get(apr_socket_t *sock,
+                                              int *type);
+ 
+/**
+ * Given an apr_sockaddr_t and a service name, set the port for the service
+ * @param sockaddr The apr_sockaddr_t that will have its port set
+ * @param servname The name of the service you wish to use
+ */
+APR_DECLARE(apr_status_t) apr_getservbyname(apr_sockaddr_t *sockaddr, 
+                                            const char *servname);
+/**
+ * Build an ip-subnet representation from an IP address and optional netmask or
+ * number-of-bits.
+ * @param ipsub The new ip-subnet representation
+ * @param ipstr The input IP address string
+ * @param mask_or_numbits The input netmask or number-of-bits string, or NULL
+ * @param p The pool to allocate from
+ */
+APR_DECLARE(apr_status_t) apr_ipsubnet_create(apr_ipsubnet_t **ipsub, 
+                                              const char *ipstr, 
+                                              const char *mask_or_numbits, 
+                                              apr_pool_t *p);
+
+/**
+ * Test the IP address in an apr_sockaddr_t against a pre-built ip-subnet
+ * representation.
+ * @param ipsub The ip-subnet representation
+ * @param sa The socket address to test
+ * @return non-zero if the socket address is within the subnet, 0 otherwise
+ */
+APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa);
+
+#if APR_HAS_SO_ACCEPTFILTER || defined(DOXYGEN)
+/**
+ * Set an OS level accept filter.
+ * @param sock The socket to put the accept filter on.
+ * @param name The accept filter
+ * @param args Any extra args to the accept filter.  Passing NULL here removes
+ *             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,
+                                      char *args);
+#endif
+
+/**
+ * Return the protocol of the socket.
+ * @param sock The socket to query.
+ * @param protocol The returned protocol (e.g., APR_PROTO_TCP).
+ */
+APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock,
+                                                  int *protocol);
+
+/**
+ * Get the pool used by the socket.
+ */
+APR_POOL_DECLARE_ACCESSOR(socket);
+
+/**
+ * Set a socket to be inherited by child processes.
+ */
+APR_DECLARE_INHERIT_SET(socket);
+
+/**
+ * Unset a socket from being inherited by child processes.
+ */
+APR_DECLARE_INHERIT_UNSET(socket);
+
+/**
+ * @defgroup apr_mcast IP Multicast
+ * @{
+ */
+
+/**
+ * Join a Multicast Group
+ * @param sock The socket to join a multicast group
+ * @param join The address of the multicast group to join
+ * @param iface Address of the interface to use.  If NULL is passed, the 
+ *              default multicast interface will be used. (OS Dependent)
+ * @param source Source Address to accept transmissions from (non-NULL 
+ *               implies Source-Specific Multicast)
+ */
+APR_DECLARE(apr_status_t) apr_mcast_join(apr_socket_t *sock,
+                                         apr_sockaddr_t *join,
+                                         apr_sockaddr_t *iface,
+                                         apr_sockaddr_t *source);
+
+/**
+ * Leave a Multicast Group.  All arguments must be the same as
+ * apr_mcast_join.
+ * @param sock The socket to leave a multicast group
+ * @param addr The address of the multicast group to leave
+ * @param iface Address of the interface to use.  If NULL is passed, the 
+ *              default multicast interface will be used. (OS Dependent)
+ * @param source Source Address to accept transmissions from (non-NULL 
+ *               implies Source-Specific Multicast)
+ */
+APR_DECLARE(apr_status_t) apr_mcast_leave(apr_socket_t *sock,
+                                          apr_sockaddr_t *addr,
+                                          apr_sockaddr_t *iface,
+                                          apr_sockaddr_t *source);
+
+/**
+ * Set the Multicast Time to Live (ttl) for a multicast transmission.
+ * @param sock The socket to set the multicast ttl
+ * @param ttl Time to live to Assign. 0-255, default=1
+ * @remark If the TTL is 0, packets will only be seen by sockets on 
+ * the local machine, and only when multicast loopback is enabled.
+ */
+APR_DECLARE(apr_status_t) apr_mcast_hops(apr_socket_t *sock,
+                                         apr_byte_t ttl);
+
+/**
+ * Toggle IP Multicast Loopback
+ * @param sock The socket to set multicast loopback
+ * @param opt 0=disable, 1=enable
+ */
+APR_DECLARE(apr_status_t) apr_mcast_loopback(apr_socket_t *sock,
+                                             apr_byte_t opt);
+
+
+/**
+ * Set the Interface to be used for outgoing Multicast Transmissions.
+ * @param sock The socket to set the multicast interface on
+ * @param iface Address of the interface to use for Multicast
+ */
+APR_DECLARE(apr_status_t) apr_mcast_interface(apr_socket_t *sock,
+                                              apr_sockaddr_t *iface);
+
+/** @} */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_NETWORK_IO_H */
+

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,92 @@
+/* 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.
+ */
+
+#ifndef APR_OPTIONAL_H
+#define APR_OPTIONAL_H
+
+#include "apu.h"
+/** 
+ * @file apr_optional.h
+ * @brief APR-UTIL registration of functions exported by modules
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** 
+ * @defgroup APR_Util_Opt Optional Functions
+ * @ingroup APR_Util
+ *
+ * Typesafe registration and retrieval of functions that may not be present
+ * (i.e. functions exported by optional modules)
+ * @{
+ */
+
+/**
+ * The type of an optional function.
+ * @param name The name of the function
+ */
+#define APR_OPTIONAL_FN_TYPE(name) apr_OFN_##name##_t
+
+/**
+ * Declare an optional function.
+ * @param ret The return type of the function
+ * @param name The name of the function
+ * @param args The function arguments (including brackets)
+ */
+#define APR_DECLARE_OPTIONAL_FN(ret,name,args) \
+typedef ret (APR_OPTIONAL_FN_TYPE(name)) args
+
+/**
+ * XXX: This doesn't belong here, then!
+ * Private function! DO NOT USE! 
+ * @internal
+ */
+
+typedef void (apr_opt_fn_t)(void);
+/** @internal */
+APU_DECLARE_NONSTD(void) apr_dynamic_fn_register(const char *szName, 
+                                                  apr_opt_fn_t *pfn);
+
+/**
+ * Register an optional function. This can be later retrieved, type-safely, by
+ * name. Like all global functions, the name must be unique. Note that,
+ * confusingly but correctly, the function itself can be static!
+ * @param name The name of the function
+ */
+#define APR_REGISTER_OPTIONAL_FN(name) do { \
+  APR_OPTIONAL_FN_TYPE(name) *apu__opt = name; \
+  apr_dynamic_fn_register(#name,(apr_opt_fn_t *)apu__opt); \
+} while (0)
+
+/** @internal
+ * Private function! DO NOT USE! 
+ */
+APU_DECLARE(apr_opt_fn_t *) apr_dynamic_fn_retrieve(const char *szName);
+
+/**
+ * Retrieve an optional function. Returns NULL if the function is not present.
+ * @param name The name of the function
+ */
+#define APR_RETRIEVE_OPTIONAL_FN(name) \
+	(APR_OPTIONAL_FN_TYPE(name) *)apr_dynamic_fn_retrieve(#name)
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_OPTIONAL_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional_hooks.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional_hooks.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_optional_hooks.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,117 @@
+/* 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.
+ */
+/**
+ * @file apr_optional_hooks.h
+ * @brief Apache optional hook functions
+ */
+
+
+#ifndef APR_OPTIONAL_HOOK_H
+#define APR_OPTIONAL_HOOK_H
+
+#include "apr_tables.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/** 
+ * @defgroup APR_Util_OPT_HOOK Optional Hook Functions
+ * @ingroup APR_Util_Hook
+ * @{
+ */
+/**
+ * Function to implemnt the APR_OPTIONAL_HOOK Macro
+ * @internal
+ * @see APR_OPTIONAL_HOOK
+ *
+ * @param name The name of the hook
+ * @param pfn A pointer to a function that will be called
+ * @param aszPre a NULL-terminated array of strings that name modules whose hooks should precede this one
+ * @param aszSucc a NULL-terminated array of strings that name modules whose hooks should succeed this one
+ * @param nOrder an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)
+ */
+
+
+APU_DECLARE(void) apr_optional_hook_add(const char *szName,void (*pfn)(void),
+					const char * const *aszPre,
+					const char * const *aszSucc,
+					int nOrder);
+
+/**
+ * Hook to an optional hook.
+ *
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param pfn A pointer to a function that will be called
+ * @param aszPre a NULL-terminated array of strings that name modules whose hooks should precede this one
+ * @param aszSucc a NULL-terminated array of strings that name modules whose hooks should succeed this one
+ * @param nOrder an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)
+ */
+
+#define APR_OPTIONAL_HOOK(ns,name,pfn,aszPre,aszSucc,nOrder) do { \
+  ns##_HOOK_##name##_t *apu__hook = pfn; \
+  apr_optional_hook_add(#name,(void (*)(void))apu__hook,aszPre, aszSucc, nOrder); \
+} while (0)
+
+/**
+ * @internal
+ * @param szName - the name of the function
+ * @return the hook structure for a given hook
+ */
+APU_DECLARE(apr_array_header_t *) apr_optional_hook_get(const char *szName);
+
+/**
+ * Implement an optional hook that runs until one of the functions
+ * returns something other than OK or DECLINE.
+ *
+ * @param ns The namespace prefix of the hook functions
+ * @param link The linkage declaration prefix of the hook
+ * @param ret The type of the return value of the hook
+ * @param ret The type of the return value of the hook
+ * @param name The name of the hook
+ * @param args_decl The declaration of the arguments for the hook
+ * @param args_use The names for the arguments for the hook
+ * @param ok Success value
+ * @param decline Decline value
+ */
+#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \
+link##_DECLARE(ret) ns##_run_##name args_decl \
+    { \
+    ns##_LINK_##name##_t *pHook; \
+    int n; \
+    ret rv; \
+    apr_array_header_t *pHookArray=apr_optional_hook_get(#name); \
+\
+    if(!pHookArray) \
+	return ok; \
+\
+    pHook=(ns##_LINK_##name##_t *)pHookArray->elts; \
+    for(n=0 ; n < pHookArray->nelts ; ++n) \
+	{ \
+	rv=(pHook[n].pFunc)args_use; \
+\
+	if(rv != ok && rv != decline) \
+	    return rv; \
+	} \
+    return ok; \
+    }
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_OPTIONAL_HOOK_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_poll.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_poll.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_poll.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,415 @@
+/* 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.
+ */
+
+#ifndef APR_POLL_H
+#define APR_POLL_H
+/**
+ * @file apr_poll.h
+ * @brief APR Poll interface
+ */
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+#include "apr_inherit.h" 
+#include "apr_file_io.h" 
+#include "apr_network_io.h" 
+
+#if APR_HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_poll Poll Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * Poll options
+ */
+#define APR_POLLIN    0x001     /**< Can read without blocking */
+#define APR_POLLPRI   0x002     /**< Priority data available */
+#define APR_POLLOUT   0x004     /**< Can write without blocking */
+#define APR_POLLERR   0x010     /**< Pending error */
+#define APR_POLLHUP   0x020     /**< Hangup occurred */
+#define APR_POLLNVAL  0x040     /**< Descriptor invalid */
+
+/**
+ * Pollset Flags
+ */
+#define APR_POLLSET_THREADSAFE 0x001 /**< Adding or removing a descriptor is
+                                      * thread-safe
+                                      */
+#define APR_POLLSET_NOCOPY     0x002 /**< Descriptors passed to apr_pollset_add()
+                                      * are not copied
+                                      */
+#define APR_POLLSET_WAKEABLE   0x004 /**< Poll operations are interruptable by
+                                      * apr_pollset_wakeup()
+                                      */
+#define APR_POLLSET_NODEFAULT  0x010 /**< Do not try to use the default method if
+                                      * the specified non-default method cannot be
+                                      * used
+                                      */
+
+/**
+ * Pollset Methods
+ */
+typedef enum {
+    APR_POLLSET_DEFAULT,        /**< Platform default poll method */
+    APR_POLLSET_SELECT,         /**< Poll uses select method */
+    APR_POLLSET_KQUEUE,         /**< Poll uses kqueue method */
+    APR_POLLSET_PORT,           /**< Poll uses Solaris event port method */
+    APR_POLLSET_EPOLL,          /**< Poll uses epoll method */
+    APR_POLLSET_POLL            /**< Poll uses poll method */
+} apr_pollset_method_e;
+
+/** Used in apr_pollfd_t to determine what the apr_descriptor is */
+typedef enum { 
+    APR_NO_DESC,                /**< nothing here */
+    APR_POLL_SOCKET,            /**< descriptor refers to a socket */
+    APR_POLL_FILE,              /**< descriptor refers to a file */
+    APR_POLL_LASTDESC           /**< @deprecated descriptor is the last one in the list */
+} apr_datatype_e ;
+
+/** Union of either an APR file or socket. */
+typedef union {
+    apr_file_t *f;              /**< file */
+    apr_socket_t *s;            /**< socket */
+} apr_descriptor;
+
+/** @see apr_pollfd_t */
+typedef struct apr_pollfd_t apr_pollfd_t;
+
+/** Poll descriptor set. */
+struct apr_pollfd_t {
+    apr_pool_t *p;              /**< associated pool */
+    apr_datatype_e desc_type;   /**< descriptor type */
+    apr_int16_t reqevents;      /**< requested events */
+    apr_int16_t rtnevents;      /**< returned events */
+    apr_descriptor desc;        /**< @see apr_descriptor */
+    void *client_data;          /**< allows app to associate context */
+};
+
+
+/* General-purpose poll API for arbitrarily large numbers of
+ * file descriptors
+ */
+
+/** Opaque structure used for pollset API */
+typedef struct apr_pollset_t apr_pollset_t;
+
+/**
+ * Set up a pollset object
+ * @param pollset  The pointer in which to return the newly created object 
+ * @param size The maximum number of descriptors that this pollset can hold
+ * @param p The pool from which to allocate the pollset
+ * @param flags Optional flags to modify the operation of the pollset.
+ *
+ * @remark If flags contains APR_POLLSET_THREADSAFE, then a pollset is
+ *         created on which it is safe to make concurrent calls to
+ *         apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll()
+ *         from separate threads.  This feature is only supported on some
+ *         platforms; the apr_pollset_create() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_WAKEABLE, then a pollset is
+ *         created with an additional internal pipe object used for the
+ *         apr_pollset_wakeup() call. The actual size of pollset is
+ *         in that case size + 1. This feature is only supported on some
+ *         platforms; the apr_pollset_create() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_NOCOPY, then the apr_pollfd_t
+ *         structures passed to apr_pollset_add() are not copied and
+ *         must have a lifetime at least as long as the pollset.
+ * @remark Some poll methods (including APR_POLLSET_KQUEUE,
+ *         APR_POLLSET_PORT, and APR_POLLSET_EPOLL) do not have a
+ *         fixed limit on the size of the pollset. For these methods,
+ *         the size parameter controls the maximum number of
+ *         descriptors that will be returned by a single call to
+ *         apr_pollset_poll().
+ */
+APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset,
+                                             apr_uint32_t size,
+                                             apr_pool_t *p,
+                                             apr_uint32_t flags);
+
+/**
+ * Set up a pollset object
+ * @param pollset  The pointer in which to return the newly created object 
+ * @param size The maximum number of descriptors that this pollset can hold
+ * @param p The pool from which to allocate the pollset
+ * @param flags Optional flags to modify the operation of the pollset.
+ * @param method Poll method to use. See #apr_pollset_method_e.  If this
+ *         method cannot be used, the default method will be used unless the
+ *         APR_POLLSET_NODEFAULT flag has been specified.
+ *
+ * @remark If flags contains APR_POLLSET_THREADSAFE, then a pollset is
+ *         created on which it is safe to make concurrent calls to
+ *         apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll()
+ *         from separate threads.  This feature is only supported on some
+ *         platforms; the apr_pollset_create_ex() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_WAKEABLE, then a pollset is
+ *         created with additional internal pipe object used for the
+ *         apr_pollset_wakeup() call. The actual size of pollset is
+ *         in that case size + 1. This feature is only supported on some
+ *         platforms; the apr_pollset_create_ex() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_NOCOPY, then the apr_pollfd_t
+ *         structures passed to apr_pollset_add() are not copied and
+ *         must have a lifetime at least as long as the pollset.
+ * @remark Some poll methods (including APR_POLLSET_KQUEUE,
+ *         APR_POLLSET_PORT, and APR_POLLSET_EPOLL) do not have a
+ *         fixed limit on the size of the pollset. For these methods,
+ *         the size parameter controls the maximum number of
+ *         descriptors that will be returned by a single call to
+ *         apr_pollset_poll().
+ */
+APR_DECLARE(apr_status_t) apr_pollset_create_ex(apr_pollset_t **pollset,
+                                                apr_uint32_t size,
+                                                apr_pool_t *p,
+                                                apr_uint32_t flags,
+                                                apr_pollset_method_e method);
+
+/**
+ * Destroy a pollset object
+ * @param pollset The pollset to destroy
+ */
+APR_DECLARE(apr_status_t) apr_pollset_destroy(apr_pollset_t *pollset);
+
+/**
+ * Add a socket or file descriptor to a pollset
+ * @param pollset The pollset to which to add the descriptor
+ * @param descriptor The descriptor to add
+ * @remark If you set client_data in the descriptor, that value
+ *         will be returned in the client_data field whenever this
+ *         descriptor is signalled in apr_pollset_poll().
+ * @remark If the pollset has been created with APR_POLLSET_THREADSAFE
+ *         and thread T1 is blocked in a call to apr_pollset_poll() for
+ *         this same pollset that is being modified via apr_pollset_add()
+ *         in thread T2, the currently executing apr_pollset_poll() call in
+ *         T1 will either: (1) automatically include the newly added descriptor
+ *         in the set of descriptors it is watching or (2) return immediately
+ *         with APR_EINTR.  Option (1) is recommended, but option (2) is
+ *         allowed for implementations where option (1) is impossible
+ *         or impractical.
+ * @remark If the pollset has been created with APR_POLLSET_NOCOPY, the 
+ *         apr_pollfd_t structure referenced by descriptor will not be copied
+ *         and must have a lifetime at least as long as the pollset.
+ * @remark Do not add the same socket or file descriptor to the same pollset
+ *         multiple times, even if the requested events differ for the 
+ *         different calls to apr_pollset_add().  If the events of interest
+ *         for a descriptor change, you must first remove the descriptor 
+ *         from the pollset with apr_pollset_remove(), then add it again 
+ *         specifying all requested events.
+ */
+APR_DECLARE(apr_status_t) apr_pollset_add(apr_pollset_t *pollset,
+                                          const apr_pollfd_t *descriptor);
+
+/**
+ * Remove a descriptor from a pollset
+ * @param pollset The pollset from which to remove the descriptor
+ * @param descriptor The descriptor to remove
+ * @remark If the pollset has been created with APR_POLLSET_THREADSAFE
+ *         and thread T1 is blocked in a call to apr_pollset_poll() for
+ *         this same pollset that is being modified via apr_pollset_remove()
+ *         in thread T2, the currently executing apr_pollset_poll() call in
+ *         T1 will either: (1) automatically exclude the newly added descriptor
+ *         in the set of descriptors it is watching or (2) return immediately
+ *         with APR_EINTR.  Option (1) is recommended, but option (2) is
+ *         allowed for implementations where option (1) is impossible
+ *         or impractical.
+ * @remark apr_pollset_remove() cannot be used to remove a subset of requested
+ *         events for a descriptor.  The reqevents field in the apr_pollfd_t
+ *         parameter must contain the same value when removing as when adding.
+ */
+APR_DECLARE(apr_status_t) apr_pollset_remove(apr_pollset_t *pollset,
+                                             const apr_pollfd_t *descriptor);
+
+/**
+ * Block for activity on the descriptor(s) in a pollset
+ * @param pollset The pollset to use
+ * @param timeout The amount of time in microseconds to wait.  This is a
+ *                maximum, not a minimum.  If a descriptor is signalled, the
+ *                function will return before this time.  If timeout is
+ *                negative, the function will block until a descriptor is
+ *                signalled or until apr_pollset_wakeup() has been called.
+ * @param num Number of signalled descriptors (output parameter)
+ * @param descriptors Array of signalled descriptors (output parameter)
+ * @remark APR_EINTR will be returned if the pollset has been created with
+ *         APR_POLLSET_WAKEABLE, apr_pollset_wakeup() has been called while
+ *         waiting for activity, and there were no signalled descriptors at the
+ *         time of the wakeup call.
+ * @remark Multiple signalled conditions for the same descriptor may be reported
+ *         in one or more returned apr_pollfd_t structures, depending on the
+ *         implementation.
+ * @bug With versions 1.4.2 and prior on Windows, a call with no descriptors
+ *      and timeout will return immediately with the wrong error code.
+ */
+APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset,
+                                           apr_interval_time_t timeout,
+                                           apr_int32_t *num,
+                                           const apr_pollfd_t **descriptors);
+
+/**
+ * Interrupt the blocked apr_pollset_poll() call.
+ * @param pollset The pollset to use
+ * @remark If the pollset was not created with APR_POLLSET_WAKEABLE the
+ *         return value is APR_EINIT.
+ */
+APR_DECLARE(apr_status_t) apr_pollset_wakeup(apr_pollset_t *pollset);
+
+/**
+ * Poll the descriptors in the poll structure
+ * @param aprset The poll structure we will be using. 
+ * @param numsock The number of descriptors we are polling
+ * @param nsds The number of descriptors signalled (output parameter)
+ * @param timeout The amount of time in microseconds to wait.  This is a
+ *                maximum, not a minimum.  If a descriptor is signalled, the
+ *                function will return before this time.  If timeout is
+ *                negative, the function will block until a descriptor is
+ *                signalled or until apr_pollset_wakeup() has been called.
+ * @remark The number of descriptors signalled is returned in the third argument. 
+ *         This is a blocking call, and it will not return until either a 
+ *         descriptor has been signalled or the timeout has expired. 
+ * @remark The rtnevents field in the apr_pollfd_t array will only be filled-
+ *         in if the return value is APR_SUCCESS.
+ * @bug With versions 1.4.2 and prior on Windows, a call with no descriptors
+ *      and timeout will return immediately with the wrong error code.
+ */
+APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t numsock,
+                                   apr_int32_t *nsds, 
+                                   apr_interval_time_t timeout);
+
+/**
+ * Return a printable representation of the pollset method.
+ * @param pollset The pollset to use
+ */
+APR_DECLARE(const char *) apr_pollset_method_name(apr_pollset_t *pollset);
+
+/**
+ * Return a printable representation of the default pollset method
+ * (APR_POLLSET_DEFAULT).
+ */
+APR_DECLARE(const char *) apr_poll_method_defname(void);
+
+/** Opaque structure used for pollset API */
+typedef struct apr_pollcb_t apr_pollcb_t;
+
+/**
+ * Set up a pollcb object
+ * @param pollcb  The pointer in which to return the newly created object 
+ * @param size The maximum number of descriptors that a single _poll can return.
+ * @param p The pool from which to allocate the pollcb
+ * @param flags Optional flags to modify the operation of the pollcb.
+ *
+ * @remark Pollcb is only supported on some platforms; the apr_pollcb_create()
+ * call will fail with APR_ENOTIMPL on platforms where it is not supported.
+ */
+APR_DECLARE(apr_status_t) apr_pollcb_create(apr_pollcb_t **pollcb,
+                                            apr_uint32_t size,
+                                            apr_pool_t *p,
+                                            apr_uint32_t flags);
+
+/**
+ * Set up a pollcb object
+ * @param pollcb  The pointer in which to return the newly created object 
+ * @param size The maximum number of descriptors that a single _poll can return.
+ * @param p The pool from which to allocate the pollcb
+ * @param flags Optional flags to modify the operation of the pollcb.
+ * @param method Poll method to use. See #apr_pollset_method_e.  If this
+ *         method cannot be used, the default method will be used unless the
+ *         APR_POLLSET_NODEFAULT flag has been specified.
+ *
+ * @remark Pollcb is only supported on some platforms; the apr_pollcb_create_ex()
+ * call will fail with APR_ENOTIMPL on platforms where it is not supported.
+ */
+APR_DECLARE(apr_status_t) apr_pollcb_create_ex(apr_pollcb_t **pollcb,
+                                               apr_uint32_t size,
+                                               apr_pool_t *p,
+                                               apr_uint32_t flags,
+                                               apr_pollset_method_e method);
+
+/**
+ * Add a socket or file descriptor to a pollcb
+ * @param pollcb The pollcb to which to add the descriptor
+ * @param descriptor The descriptor to add
+ * @remark If you set client_data in the descriptor, that value will be
+ *         returned in the client_data field whenever this descriptor is
+ *         signalled in apr_pollcb_poll().
+ * @remark Unlike the apr_pollset API, the descriptor is not copied, and users 
+ *         must retain the memory used by descriptor, as the same pointer will
+ *         be returned to them from apr_pollcb_poll.
+ * @remark Do not add the same socket or file descriptor to the same pollcb
+ *         multiple times, even if the requested events differ for the 
+ *         different calls to apr_pollcb_add().  If the events of interest
+ *         for a descriptor change, you must first remove the descriptor 
+ *         from the pollcb with apr_pollcb_remove(), then add it again 
+ *         specifying all requested events.
+ */
+APR_DECLARE(apr_status_t) apr_pollcb_add(apr_pollcb_t *pollcb,
+                                         apr_pollfd_t *descriptor);
+/**
+ * Remove a descriptor from a pollcb
+ * @param pollcb The pollcb from which to remove the descriptor
+ * @param descriptor The descriptor to remove
+ * @remark apr_pollcb_remove() cannot be used to remove a subset of requested
+ *         events for a descriptor.  The reqevents field in the apr_pollfd_t
+ *         parameter must contain the same value when removing as when adding.
+ */
+APR_DECLARE(apr_status_t) apr_pollcb_remove(apr_pollcb_t *pollcb,
+                                            apr_pollfd_t *descriptor);
+
+/** Function prototype for pollcb handlers 
+ * @param baton Opaque baton passed into apr_pollcb_poll()
+ * @param descriptor Contains the notification for an active descriptor, 
+ *                   the rtnevents member contains what events were triggered
+ *                   for this descriptor.
+ */
+typedef apr_status_t (*apr_pollcb_cb_t)(void *baton, apr_pollfd_t *descriptor);
+
+/**
+ * Block for activity on the descriptor(s) in a pollcb
+ * @param pollcb The pollcb to use
+ * @param timeout The amount of time in microseconds to wait.  This is a
+ *                maximum, not a minimum.  If a descriptor is signalled, the
+ *                function will return before this time.  If timeout is
+ *                negative, the function will block until a descriptor is
+ *                signalled.
+ * @param func Callback function to call for each active descriptor.
+ * @param baton Opaque baton passed to the callback function.
+ * @remark Multiple signalled conditions for the same descriptor may be reported
+ *         in one or more calls to the callback function, depending on the
+ *         implementation.
+ * @bug With versions 1.4.2 and prior on Windows, a call with no descriptors
+ *      and timeout will return immediately with the wrong error code.
+ */
+APR_DECLARE(apr_status_t) apr_pollcb_poll(apr_pollcb_t *pollcb,
+                                          apr_interval_time_t timeout,
+                                          apr_pollcb_cb_t func,
+                                          void *baton); 
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_POLL_H */
+

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_pools.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_pools.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_pools.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,811 @@
+/* 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.
+ */
+
+#ifndef APR_POOLS_H
+#define APR_POOLS_H
+
+/**
+ * @file apr_pools.h
+ * @brief APR memory allocation
+ *
+ * Resource allocation routines...
+ *
+ * designed so that we don't have to keep track of EVERYTHING so that
+ * it can be explicitly freed later (a fundamentally unsound strategy ---
+ * particularly in the presence of die()).
+ *
+ * Instead, we maintain pools, and allocate items (both memory and I/O
+ * handlers) from the pools --- currently there are two, one for
+ * per-transaction info, and one for config info.  When a transaction is
+ * over, we can delete everything in the per-transaction apr_pool_t without
+ * fear, and without thinking too hard about it either.
+ *
+ * Note that most operations on pools are not thread-safe: a single pool
+ * should only be accessed by a single thread at any given time. The one
+ * exception to this rule is creating a subpool of a given pool: one or more
+ * threads can safely create subpools at the same time that another thread
+ * accesses the parent pool.
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+#include "apr_general.h" /* for APR_STRINGIFY */
+#define APR_WANT_MEMFUNC /**< for no good reason? */
+#include "apr_want.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup apr_pools Memory Pool Functions
+ * @ingroup APR 
+ * @{
+ */
+
+/** The fundamental pool type */
+typedef struct apr_pool_t apr_pool_t;
+
+
+/**
+ * Declaration helper macro to construct apr_foo_pool_get()s.
+ *
+ * This standardized macro is used by opaque (APR) data types to return
+ * the apr_pool_t that is associated with the data type.
+ *
+ * APR_POOL_DECLARE_ACCESSOR() is used in a header file to declare the
+ * accessor function. A typical usage and result would be:
+ * <pre>
+ *    APR_POOL_DECLARE_ACCESSOR(file);
+ * becomes:
+ *    APR_DECLARE(apr_pool_t *) apr_file_pool_get(apr_file_t *ob);
+ * </pre>
+ * @remark Doxygen unwraps this macro (via doxygen.conf) to provide 
+ * actual help for each specific occurance of apr_foo_pool_get.
+ * @remark the linkage is specified for APR. It would be possible to expand
+ *       the macros to support other linkages.
+ */
+#define APR_POOL_DECLARE_ACCESSOR(type) \
+    APR_DECLARE(apr_pool_t *) apr_##type##_pool_get \
+        (const apr_##type##_t *the##type)
+
+/** 
+ * Implementation helper macro to provide apr_foo_pool_get()s.
+ *
+ * In the implementation, the APR_POOL_IMPLEMENT_ACCESSOR() is used to
+ * actually define the function. It assumes the field is named "pool".
+ */
+#define APR_POOL_IMPLEMENT_ACCESSOR(type) \
+    APR_DECLARE(apr_pool_t *) apr_##type##_pool_get \
+            (const apr_##type##_t *the##type) \
+        { return the##type->pool; }
+
+
+/**
+ * Pool debug levels
+ *
+ * <pre>
+ * | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+ * ---------------------------------
+ * |   |   |   |   |   |   |   | x |  General debug code enabled (useful in
+ *                                    combination with --with-efence).
+ *
+ * |   |   |   |   |   |   | x |   |  Verbose output on stderr (report
+ *                                    CREATE, CLEAR, DESTROY).
+ *
+ * |   |   |   | x |   |   |   |   |  Verbose output on stderr (report
+ *                                    PALLOC, PCALLOC).
+ *
+ * |   |   |   |   |   | x |   |   |  Lifetime checking. On each use of a
+ *                                    pool, check its lifetime.  If the pool
+ *                                    is out of scope, abort().
+ *                                    In combination with the verbose flag
+ *                                    above, it will output LIFE in such an
+ *                                    event prior to aborting.
+ *
+ * |   |   |   |   | x |   |   |   |  Pool owner checking.  On each use of a
+ *                                    pool, check if the current thread is the
+ *                                    pools owner.  If not, abort().  In
+ *                                    combination with the verbose flag above,
+ *                                    it will output OWNER in such an event
+ *                                    prior to aborting.  Use the debug
+ *                                    function apr_pool_owner_set() to switch
+ *                                    a pools ownership.
+ *
+ * When no debug level was specified, assume general debug mode.
+ * If level 0 was specified, debugging is switched off
+ * </pre>
+ */
+#if defined(APR_POOL_DEBUG)
+/* If APR_POOL_DEBUG is blank, we get 1; if it is a number, we get -1. */
+#if (APR_POOL_DEBUG - APR_POOL_DEBUG -1 == 1)
+#undef APR_POOL_DEBUG
+#define APR_POOL_DEBUG 1
+#endif
+#else
+#define APR_POOL_DEBUG 0
+#endif
+
+/** the place in the code where the particular function was called */
+#define APR_POOL__FILE_LINE__ __FILE__ ":" APR_STRINGIFY(__LINE__)
+
+
+
+/** A function that is called when allocation fails. */
+typedef int (*apr_abortfunc_t)(int retcode);
+
+/*
+ * APR memory structure manipulators (pools, tables, and arrays).
+ */
+
+/*
+ * Initialization
+ */
+
+/**
+ * Setup all of the internal structures required to use pools
+ * @remark Programs do NOT need to call this directly.  APR will call this
+ *      automatically from apr_initialize.
+ * @internal
+ */
+APR_DECLARE(apr_status_t) apr_pool_initialize(void);
+
+/**
+ * Tear down all of the internal structures required to use pools
+ * @remark Programs do NOT need to call this directly.  APR will call this
+ *      automatically from apr_terminate.
+ * @internal
+ */
+APR_DECLARE(void) apr_pool_terminate(void);
+
+
+/*
+ * Pool creation/destruction
+ */
+
+#include "apr_allocator.h"
+
+/**
+ * Create a new pool.
+ * @param newpool The pool we have just created.
+ * @param parent The parent pool.  If this is NULL, the new pool is a root
+ *        pool.  If it is non-NULL, the new pool will inherit all
+ *        of its parent pool's attributes, except the apr_pool_t will
+ *        be a sub-pool.
+ * @param abort_fn A function to use if the pool cannot allocate more memory.
+ * @param allocator The allocator to use with the new pool.  If NULL the
+ *        allocator of the parent pool will be used.
+ * @remark This function is thread-safe, in the sense that multiple threads
+ *         can safely create subpools of the same parent pool concurrently.
+ *         Similarly, a subpool can be created by one thread at the same
+ *         time that another thread accesses the parent pool.
+ */
+APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool,
+                                             apr_pool_t *parent,
+                                             apr_abortfunc_t abort_fn,
+                                             apr_allocator_t *allocator)
+                          __attribute__((nonnull(1)));
+
+/**
+ * Create a new pool.
+ * @deprecated @see apr_pool_create_unmanaged_ex.
+ */
+APR_DECLARE(apr_status_t) apr_pool_create_core_ex(apr_pool_t **newpool,
+                                                  apr_abortfunc_t abort_fn,
+                                                  apr_allocator_t *allocator);
+
+/**
+ * Create a new unmanaged pool.
+ * @param newpool The pool we have just created.
+ * @param abort_fn A function to use if the pool cannot allocate more memory.
+ * @param allocator The allocator to use with the new pool.  If NULL a
+ *        new allocator will be crated with newpool as owner.
+ * @remark An unmanaged pool is a special pool without a parent; it will
+ *         NOT be destroyed upon apr_terminate.  It must be explicitly
+ *         destroyed by calling apr_pool_destroy, to prevent memory leaks.
+ *         Use of this function is discouraged, think twice about whether
+ *         you really really need it.
+ */
+APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex(apr_pool_t **newpool,
+                                                   apr_abortfunc_t abort_fn,
+                                                   apr_allocator_t *allocator)
+                          __attribute__((nonnull(1)));
+
+/**
+ * Debug version of apr_pool_create_ex.
+ * @param newpool @see apr_pool_create.
+ * @param parent @see apr_pool_create.
+ * @param abort_fn @see apr_pool_create.
+ * @param allocator @see apr_pool_create.
+ * @param file_line Where the function is called from.
+ *        This is usually APR_POOL__FILE_LINE__.
+ * @remark Only available when APR_POOL_DEBUG is defined.
+ *         Call this directly if you have you apr_pool_create_ex
+ *         calls in a wrapper function and wish to override
+ *         the file_line argument to reflect the caller of
+ *         your wrapper function.  If you do not have
+ *         apr_pool_create_ex in a wrapper, trust the macro
+ *         and don't call apr_pool_create_ex_debug directly.
+ */
+APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool,
+                                                   apr_pool_t *parent,
+                                                   apr_abortfunc_t abort_fn,
+                                                   apr_allocator_t *allocator,
+                                                   const char *file_line)
+                          __attribute__((nonnull(1)));
+
+#if APR_POOL_DEBUG
+#define apr_pool_create_ex(newpool, parent, abort_fn, allocator)  \
+    apr_pool_create_ex_debug(newpool, parent, abort_fn, allocator, \
+                             APR_POOL__FILE_LINE__)
+#endif
+
+/**
+ * Debug version of apr_pool_create_core_ex.
+ * @deprecated @see apr_pool_create_unmanaged_ex_debug.
+ */
+APR_DECLARE(apr_status_t) apr_pool_create_core_ex_debug(apr_pool_t **newpool,
+                                                   apr_abortfunc_t abort_fn,
+                                                   apr_allocator_t *allocator,
+                                                   const char *file_line);
+
+/**
+ * Debug version of apr_pool_create_unmanaged_ex.
+ * @param newpool @see apr_pool_create_unmanaged.
+ * @param abort_fn @see apr_pool_create_unmanaged.
+ * @param allocator @see apr_pool_create_unmanaged.
+ * @param file_line Where the function is called from.
+ *        This is usually APR_POOL__FILE_LINE__.
+ * @remark Only available when APR_POOL_DEBUG is defined.
+ *         Call this directly if you have you apr_pool_create_unmanaged_ex
+ *         calls in a wrapper function and wish to override
+ *         the file_line argument to reflect the caller of
+ *         your wrapper function.  If you do not have
+ *         apr_pool_create_core_ex in a wrapper, trust the macro
+ *         and don't call apr_pool_create_core_ex_debug directly.
+ */
+APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex_debug(apr_pool_t **newpool,
+                                                   apr_abortfunc_t abort_fn,
+                                                   apr_allocator_t *allocator,
+                                                   const char *file_line)
+                          __attribute__((nonnull(1)));
+
+#if APR_POOL_DEBUG
+#define apr_pool_create_core_ex(newpool, abort_fn, allocator)  \
+    apr_pool_create_unmanaged_ex_debug(newpool, abort_fn, allocator, \
+                                  APR_POOL__FILE_LINE__)
+
+#define apr_pool_create_unmanaged_ex(newpool, abort_fn, allocator)  \
+    apr_pool_create_unmanaged_ex_debug(newpool, abort_fn, allocator, \
+                                  APR_POOL__FILE_LINE__)
+
+#endif
+
+/**
+ * Create a new pool.
+ * @param newpool The pool we have just created.
+ * @param parent The parent pool.  If this is NULL, the new pool is a root
+ *        pool.  If it is non-NULL, the new pool will inherit all
+ *        of its parent pool's attributes, except the apr_pool_t will
+ *        be a sub-pool.
+ * @remark This function is thread-safe, in the sense that multiple threads
+ *         can safely create subpools of the same parent pool concurrently.
+ *         Similarly, a subpool can be created by one thread at the same
+ *         time that another thread accesses the parent pool.
+ */
+#if defined(DOXYGEN)
+APR_DECLARE(apr_status_t) apr_pool_create(apr_pool_t **newpool,
+                                          apr_pool_t *parent);
+#else
+#if APR_POOL_DEBUG
+#define apr_pool_create(newpool, parent) \
+    apr_pool_create_ex_debug(newpool, parent, NULL, NULL, \
+                             APR_POOL__FILE_LINE__)
+#else
+#define apr_pool_create(newpool, parent) \
+    apr_pool_create_ex(newpool, parent, NULL, NULL)
+#endif
+#endif
+
+/**
+ * Create a new pool.
+ * @param newpool The pool we have just created.
+ */
+#if defined(DOXYGEN)
+APR_DECLARE(apr_status_t) apr_pool_create_core(apr_pool_t **newpool);
+APR_DECLARE(apr_status_t) apr_pool_create_unmanaged(apr_pool_t **newpool);
+#else
+#if APR_POOL_DEBUG
+#define apr_pool_create_core(newpool) \
+    apr_pool_create_unmanaged_ex_debug(newpool, NULL, NULL, \
+                                  APR_POOL__FILE_LINE__)
+#define apr_pool_create_unmanaged(newpool) \
+    apr_pool_create_unmanaged_ex_debug(newpool, NULL, NULL, \
+                                  APR_POOL__FILE_LINE__)
+#else
+#define apr_pool_create_core(newpool) \
+    apr_pool_create_unmanaged_ex(newpool, NULL, NULL)
+#define apr_pool_create_unmanaged(newpool) \
+    apr_pool_create_unmanaged_ex(newpool, NULL, NULL)
+#endif
+#endif
+
+/**
+ * Find the pool's allocator
+ * @param pool The pool to get the allocator from.
+ */
+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
+ * subpools.
+ * @param p The pool to clear
+ * @remark This does not actually free the memory, it just allows the pool
+ *         to re-use this memory for the next allocation.
+ * @see apr_pool_destroy()
+ */
+APR_DECLARE(void) apr_pool_clear(apr_pool_t *p) __attribute__((nonnull(1)));
+
+/**
+ * Debug version of apr_pool_clear.
+ * @param p See: apr_pool_clear.
+ * @param file_line Where the function is called from.
+ *        This is usually APR_POOL__FILE_LINE__.
+ * @remark Only available when APR_POOL_DEBUG is defined.
+ *         Call this directly if you have you apr_pool_clear
+ *         calls in a wrapper function and wish to override
+ *         the file_line argument to reflect the caller of
+ *         your wrapper function.  If you do not have
+ *         apr_pool_clear in a wrapper, trust the macro
+ *         and don't call apr_pool_destroy_clear directly.
+ */
+APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *p,
+                                       const char *file_line)
+                  __attribute__((nonnull(1)));
+
+#if APR_POOL_DEBUG
+#define apr_pool_clear(p) \
+    apr_pool_clear_debug(p, APR_POOL__FILE_LINE__)
+#endif
+
+/**
+ * Destroy the pool. This takes similar action as apr_pool_clear() and then
+ * frees all the memory.
+ * @param p The pool to destroy
+ * @remark This will actually free the memory
+ */
+APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p) __attribute__((nonnull(1)));
+
+/**
+ * Debug version of apr_pool_destroy.
+ * @param p See: apr_pool_destroy.
+ * @param file_line Where the function is called from.
+ *        This is usually APR_POOL__FILE_LINE__.
+ * @remark Only available when APR_POOL_DEBUG is defined.
+ *         Call this directly if you have you apr_pool_destroy
+ *         calls in a wrapper function and wish to override
+ *         the file_line argument to reflect the caller of
+ *         your wrapper function.  If you do not have
+ *         apr_pool_destroy in a wrapper, trust the macro
+ *         and don't call apr_pool_destroy_debug directly.
+ */
+APR_DECLARE(void) apr_pool_destroy_debug(apr_pool_t *p,
+                                         const char *file_line)
+                  __attribute__((nonnull(1)));
+
+#if APR_POOL_DEBUG
+#define apr_pool_destroy(p) \
+    apr_pool_destroy_debug(p, APR_POOL__FILE_LINE__)
+#endif
+
+
+/*
+ * Memory allocation
+ */
+
+/**
+ * Allocate a block of memory from a pool
+ * @param p The pool to allocate from
+ * @param size The amount of memory to allocate
+ * @return The allocated memory
+ */
+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
+ * @param p See: apr_palloc
+ * @param size See: apr_palloc
+ * @param file_line Where the function is called from.
+ *        This is usually APR_POOL__FILE_LINE__.
+ * @return See: apr_palloc
+ */
+APR_DECLARE(void *) apr_palloc_debug(apr_pool_t *p, apr_size_t size,
+                                     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
+#define apr_palloc(p, size) \
+    apr_palloc_debug(p, size, APR_POOL__FILE_LINE__)
+#endif
+
+/**
+ * Allocate a block of memory from a pool and set all of the memory to 0
+ * @param p The pool to allocate from
+ * @param size The amount of memory to allocate
+ * @return The allocated memory
+ */
+#if defined(DOXYGEN)
+APR_DECLARE(void *) apr_pcalloc(apr_pool_t *p, apr_size_t size);
+#elif !APR_POOL_DEBUG
+#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
+#endif
+
+/**
+ * Debug version of apr_pcalloc
+ * @param p See: apr_pcalloc
+ * @param size See: apr_pcalloc
+ * @param file_line Where the function is called from.
+ *        This is usually APR_POOL__FILE_LINE__.
+ * @return See: apr_pcalloc
+ */
+APR_DECLARE(void *) apr_pcalloc_debug(apr_pool_t *p, apr_size_t size,
+                                      const char *file_line)
+                    __attribute__((nonnull(1)));
+
+#if APR_POOL_DEBUG
+#define apr_pcalloc(p, size) \
+    apr_pcalloc_debug(p, size, APR_POOL__FILE_LINE__)
+#endif
+
+
+/*
+ * Pool Properties
+ */
+
+/**
+ * Set the function to be called when an allocation failure occurs.
+ * @remark If the program wants APR to exit on a memory allocation error,
+ *      then this function can be called to set the callback to use (for
+ *      performing cleanup and then exiting). If this function is not called,
+ *      then APR will return an error and expect the calling program to
+ *      deal with the error accordingly.
+ */
+APR_DECLARE(void) apr_pool_abort_set(apr_abortfunc_t abortfunc,
+                                     apr_pool_t *pool)
+                  __attribute__((nonnull(2)));
+
+/**
+ * Get the abort function associated with the specified pool.
+ * @param pool The pool for retrieving the abort function.
+ * @return The abort function for the given 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.
+ * @param pool The pool for retrieving the parent pool.
+ * @return The parent of the given 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.
+ * @param a The pool to search
+ * @param b The pool to search for
+ * @return True if a is an ancestor of b, NULL is considered an ancestor
+ *         of all pools.
+ * @remark if compiled with APR_POOL_DEBUG, this function will also
+ * return true if A is a pool which has been guaranteed by the caller
+ * (using apr_pool_join) to have a lifetime at least as long as some
+ * ancestor of pool B.
+ */
+APR_DECLARE(int) apr_pool_is_ancestor(apr_pool_t *a, apr_pool_t *b);
+
+/**
+ * Tag a pool (give it a name)
+ * @param pool The pool to tag
+ * @param tag  The tag
+ */
+APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag)
+                  __attribute__((nonnull(1)));
+
+
+/*
+ * User data management
+ */
+
+/**
+ * Set the data associated with the current pool
+ * @param data The user data associated with the pool.
+ * @param key The key to use for association
+ * @param cleanup The cleanup program to use to cleanup the data (NULL if none)
+ * @param pool The current pool
+ * @warning The data to be attached to the pool should have a life span
+ *          at least as long as the pool it is being attached to.
+ *
+ *      Users of APR must take EXTREME care when choosing a key to
+ *      use for their data.  It is possible to accidentally overwrite
+ *      data by choosing a key that another part of the program is using.
+ *      Therefore it is advised that steps are taken to ensure that unique
+ *      keys are used for all of the userdata objects in a particular pool
+ *      (the same key in two different pools or a pool and one of its
+ *      subpools is okay) at all times.  Careful namespace prefixing of
+ *      key names is a typical way to help ensure this uniqueness.
+ *
+ */
+APR_DECLARE(apr_status_t) apr_pool_userdata_set(const void *data,
+                                                const char *key,
+                                                apr_status_t (*cleanup)(void *),
+                                                apr_pool_t *pool)
+                          __attribute__((nonnull(2,4)));
+
+/**
+ * Set the data associated with the current pool
+ * @param data The user data associated with the pool.
+ * @param key The key to use for association
+ * @param cleanup The cleanup program to use to cleanup the data (NULL if none)
+ * @param pool The current pool
+ * @note same as apr_pool_userdata_set(), except that this version doesn't
+ *       make a copy of the key (this function is useful, for example, when
+ *       the key is a string literal)
+ * @warning This should NOT be used if the key could change addresses by
+ *       any means between the apr_pool_userdata_setn() call and a
+ *       subsequent apr_pool_userdata_get() on that key, such as if a
+ *       static string is used as a userdata key in a DSO and the DSO could
+ *       be unloaded and reloaded between the _setn() and the _get().  You
+ *       MUST use apr_pool_userdata_set() in such cases.
+ * @warning More generally, the key and the data to be attached to the
+ *       pool should have a life span at least as long as the pool itself.
+ *
+ */
+APR_DECLARE(apr_status_t) apr_pool_userdata_setn(
+                                const void *data, const char *key,
+                                apr_status_t (*cleanup)(void *),
+                                apr_pool_t *pool)
+                          __attribute__((nonnull(2,4)));
+
+/**
+ * Return the data associated with the current pool.
+ * @param data The user data associated with the pool.
+ * @param key The key for the data to retrieve
+ * @param pool The current pool.
+ */
+APR_DECLARE(apr_status_t) apr_pool_userdata_get(void **data, const char *key,
+                                                apr_pool_t *pool)
+                          __attribute__((nonnull(1,2,3)));
+
+
+/**
+ * @defgroup PoolCleanup  Pool Cleanup Functions
+ *
+ * Cleanups are performed in the reverse order they were registered.  That is:
+ * Last In, First Out.  A cleanup function can safely allocate memory from
+ * the pool that is being cleaned up. It can also safely register additional
+ * cleanups which will be run LIFO, directly after the current cleanup
+ * terminates.  Cleanups have to take caution in calling functions that
+ * create subpools. Subpools, created during cleanup will NOT automatically
+ * be cleaned up.  In other words, cleanups are to clean up after themselves.
+ *
+ * @{
+ */
+
+/**
+ * Register a function to be called when a pool is cleared or destroyed
+ * @param p The pool register the cleanup with
+ * @param data The data to pass to the cleanup function.
+ * @param plain_cleanup The function to call when the pool is cleared
+ *                      or destroyed
+ * @param child_cleanup The function to call when a child process is about
+ *                      to exec - this function is called in the child, obviously!
+ */
+APR_DECLARE(void) apr_pool_cleanup_register(
+                            apr_pool_t *p, const void *data,
+                            apr_status_t (*plain_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.
+ *
+ * Unlike apr_pool_cleanup_register which register a cleanup
+ * that is called AFTER all subpools are destroyed this function register
+ * a function that will be called before any of the subpool is destoryed.
+ *
+ * @param p The pool register the cleanup with
+ * @param data The data to pass to the cleanup function.
+ * @param plain_cleanup The function to call when the pool is cleared
+ *                      or destroyed
+ */
+APR_DECLARE(void) apr_pool_pre_cleanup_register(
+                            apr_pool_t *p, const void *data,
+                            apr_status_t (*plain_cleanup)(void *))
+                  __attribute__((nonnull(3)));
+
+/**
+ * Remove a previously registered cleanup function.
+ * 
+ * The cleanup most recently registered with @a p having the same values of
+ * @a data and @a cleanup will be removed.
+ *
+ * @param p The pool to remove the cleanup from
+ * @param data The data of the registered cleanup
+ * @param cleanup The function to remove from cleanup
+ * @remarks For some strange reason only the plain_cleanup is handled by this
+ *          function
+ */
+APR_DECLARE(void) apr_pool_cleanup_kill(apr_pool_t *p, const void *data,
+                                        apr_status_t (*cleanup)(void *))
+                  __attribute__((nonnull(3)));
+
+/**
+ * Replace the child cleanup function of a previously registered cleanup.
+ * 
+ * The cleanup most recently registered with @a p having the same values of
+ * @a data and @a plain_cleanup will have the registered child cleanup
+ * function replaced with @a child_cleanup.
+ *
+ * @param p The pool of the registered cleanup
+ * @param data The data of the registered cleanup
+ * @param plain_cleanup The plain cleanup function of the registered cleanup
+ * @param child_cleanup The function to register as the child cleanup
+ */
+APR_DECLARE(void) apr_pool_child_cleanup_set(
+                        apr_pool_t *p, const void *data,
+                        apr_status_t (*plain_cleanup)(void *),
+                        apr_status_t (*child_cleanup)(void *))
+                  __attribute__((nonnull(3,4)));
+
+/**
+ * Run the specified cleanup function immediately and unregister it.
+ *
+ * The cleanup most recently registered with @a p having the same values of
+ * @a data and @a cleanup will be removed and @a cleanup will be called
+ * with @a data as the argument.
+ *
+ * @param p The pool to remove the cleanup from
+ * @param data The data to remove from cleanup
+ * @param cleanup The function to remove from cleanup
+ */
+APR_DECLARE(apr_status_t) apr_pool_cleanup_run(apr_pool_t *p, void *data,
+                                               apr_status_t (*cleanup)(void *))
+                          __attribute__((nonnull(3)));
+
+/**
+ * An empty cleanup function.
+ * 
+ * Passed to apr_pool_cleanup_register() when no cleanup is required.
+ *
+ * @param data The data to cleanup, will not be used by this function.
+ */
+APR_DECLARE_NONSTD(apr_status_t) apr_pool_cleanup_null(void *data);
+
+/**
+ * Run all registered child cleanups, in preparation for an exec()
+ * call in a forked child -- close files, etc., but *don't* flush I/O
+ * buffers, *don't* wait for subprocesses, and *don't* free any
+ * memory.
+ */
+APR_DECLARE(void) apr_pool_cleanup_for_exec(void);
+
+/** @} */
+
+/**
+ * @defgroup PoolDebug Pool Debugging functions.
+ *
+ * pools have nested lifetimes -- sub_pools are destroyed when the
+ * parent pool is cleared.  We allow certain liberties with operations
+ * on things such as tables (and on other structures in a more general
+ * sense) where we allow the caller to insert values into a table which
+ * were not allocated from the table's pool.  The table's data will
+ * remain valid as long as all the pools from which its values are
+ * allocated remain valid.
+ *
+ * For example, if B is a sub pool of A, and you build a table T in
+ * pool B, then it's safe to insert data allocated in A or B into T
+ * (because B lives at most as long as A does, and T is destroyed when
+ * B is cleared/destroyed).  On the other hand, if S is a table in
+ * pool A, it is safe to insert data allocated in A into S, but it
+ * is *not safe* to insert data allocated from B into S... because
+ * B can be cleared/destroyed before A is (which would leave dangling
+ * pointers in T's data structures).
+ *
+ * In general we say that it is safe to insert data into a table T
+ * if the data is allocated in any ancestor of T's pool.  This is the
+ * basis on which the APR_POOL_DEBUG code works -- it tests these ancestor
+ * relationships for all data inserted into tables.  APR_POOL_DEBUG also
+ * provides tools (apr_pool_find, and apr_pool_is_ancestor) for other
+ * folks to implement similar restrictions for their own data
+ * structures.
+ *
+ * However, sometimes this ancestor requirement is inconvenient --
+ * sometimes it's necessary to create a sub pool where the sub pool is
+ * guaranteed to have the same lifetime as the parent pool.  This is a
+ * guarantee implemented by the *caller*, not by the pool code.  That
+ * is, the caller guarantees they won't destroy the sub pool
+ * individually prior to destroying the parent pool.
+ *
+ * In this case the caller must call apr_pool_join() to indicate this
+ * guarantee to the APR_POOL_DEBUG code.
+ *
+ * These functions are only implemented when #APR_POOL_DEBUG is set.
+ *
+ * @{
+ */
+#if APR_POOL_DEBUG || defined(DOXYGEN)
+/**
+ * Guarantee that a subpool has the same lifetime as the parent.
+ * @param p The parent pool
+ * @param sub The subpool
+ */
+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.
+ * @param mem The thing allocated in the pool
+ * @return The pool it is allocated in
+ */
+APR_DECLARE(apr_pool_t *) apr_pool_find(const void *mem);
+
+/**
+ * Report the number of bytes currently in the pool
+ * @param p The pool to inspect
+ * @param recurse Recurse/include the subpools' sizes
+ * @return The number of bytes
+ */
+APR_DECLARE(apr_size_t) apr_pool_num_bytes(apr_pool_t *p, int recurse)
+                        __attribute__((nonnull(1)));
+
+/**
+ * Lock a pool
+ * @param pool The pool to lock
+ * @param flag  The flag
+ */
+APR_DECLARE(void) apr_pool_lock(apr_pool_t *pool, int flag);
+
+/* @} */
+
+#else /* APR_POOL_DEBUG or DOXYGEN */
+
+#ifdef apr_pool_join
+#undef apr_pool_join
+#endif
+#define apr_pool_join(a,b)
+
+#ifdef apr_pool_lock
+#undef apr_pool_lock
+#endif
+#define apr_pool_lock(pool, lock)
+
+#endif /* APR_POOL_DEBUG or DOXYGEN */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_POOLS_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_portable.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_portable.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_portable.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,508 @@
+/* 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.
+ */
+
+/* This header file is where you should put ANY platform specific information.
+ * This should be the only header file that programs need to include that 
+ * actually has platform dependent code which refers to the .
+ */
+#ifndef APR_PORTABLE_H
+#define APR_PORTABLE_H
+/**
+ * @file apr_portable.h
+ * @brief APR Portability Routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_thread_proc.h"
+#include "apr_file_io.h"
+#include "apr_network_io.h"
+#include "apr_errno.h"
+#include "apr_global_mutex.h"
+#include "apr_proc_mutex.h"
+#include "apr_time.h"
+#include "apr_dso.h"
+#include "apr_shm.h"
+
+#if APR_HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#if APR_HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if APR_HAVE_PTHREAD_H
+#include <pthread.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_portabile Portability Routines
+ * @ingroup APR 
+ * @{
+ */
+
+#ifdef WIN32
+/* The primitives for Windows types */
+typedef HANDLE                apr_os_file_t;
+typedef HANDLE                apr_os_dir_t;
+typedef SOCKET                apr_os_sock_t;
+typedef HANDLE                apr_os_proc_mutex_t;
+typedef HANDLE                apr_os_thread_t;
+typedef HANDLE                apr_os_proc_t;
+typedef DWORD                 apr_os_threadkey_t; 
+typedef FILETIME              apr_os_imp_time_t;
+typedef SYSTEMTIME            apr_os_exp_time_t;
+typedef HANDLE                apr_os_dso_handle_t;
+typedef HANDLE                apr_os_shm_t;
+
+#elif defined(OS2)
+typedef HFILE                 apr_os_file_t;
+typedef HDIR                  apr_os_dir_t;
+typedef int                   apr_os_sock_t;
+typedef HMTX                  apr_os_proc_mutex_t;
+typedef TID                   apr_os_thread_t;
+typedef PID                   apr_os_proc_t;
+typedef PULONG                apr_os_threadkey_t; 
+typedef struct timeval        apr_os_imp_time_t;
+typedef struct tm             apr_os_exp_time_t;
+typedef HMODULE               apr_os_dso_handle_t;
+typedef void*                 apr_os_shm_t;
+
+#elif defined(__BEOS__)
+#include <kernel/OS.h>
+#include <kernel/image.h>
+
+struct apr_os_proc_mutex_t {
+	sem_id sem;
+	int32  ben;
+};
+
+typedef int                   apr_os_file_t;
+typedef DIR                   apr_os_dir_t;
+typedef int                   apr_os_sock_t;
+typedef struct apr_os_proc_mutex_t  apr_os_proc_mutex_t;
+typedef thread_id             apr_os_thread_t;
+typedef thread_id             apr_os_proc_t;
+typedef int                   apr_os_threadkey_t;
+typedef struct timeval        apr_os_imp_time_t;
+typedef struct tm             apr_os_exp_time_t;
+typedef image_id              apr_os_dso_handle_t;
+typedef void*                 apr_os_shm_t;
+
+#elif defined(NETWARE)
+typedef int                   apr_os_file_t;
+typedef DIR                   apr_os_dir_t;
+typedef int                   apr_os_sock_t;
+typedef NXMutex_t             apr_os_proc_mutex_t;
+typedef NXThreadId_t          apr_os_thread_t;
+typedef long                  apr_os_proc_t;
+typedef NXKey_t               apr_os_threadkey_t; 
+typedef struct timeval        apr_os_imp_time_t;
+typedef struct tm             apr_os_exp_time_t;
+typedef void *                apr_os_dso_handle_t;
+typedef void*                 apr_os_shm_t;
+
+#else
+/* Any other OS should go above this one.  This is the lowest common
+ * denominator typedefs for  all UNIX-like systems.  :)
+ */
+
+/** Basic OS process mutex structure. */
+struct apr_os_proc_mutex_t {
+#if APR_HAS_SYSVSEM_SERIALIZE || APR_HAS_FCNTL_SERIALIZE || APR_HAS_FLOCK_SERIALIZE
+    /** Value used for SYS V Semaphore, FCNTL and FLOCK serialization */
+    int crossproc;
+#endif
+#if APR_HAS_PROC_PTHREAD_SERIALIZE
+    /** Value used for PTHREAD serialization */
+    pthread_mutex_t *pthread_interproc;
+#endif
+#if APR_HAS_THREADS
+    /* If no threads, no need for thread locks */
+#if APR_USE_PTHREAD_SERIALIZE
+    /** This value is currently unused within APR and Apache */ 
+    pthread_mutex_t *intraproc;
+#endif
+#endif
+};
+
+typedef int                   apr_os_file_t;        /**< native file */
+typedef DIR                   apr_os_dir_t;         /**< native dir */
+typedef int                   apr_os_sock_t;        /**< native dir */
+typedef struct apr_os_proc_mutex_t  apr_os_proc_mutex_t; /**< native process
+                                                          *   mutex
+                                                          */
+#if APR_HAS_THREADS && APR_HAVE_PTHREAD_H 
+typedef pthread_t             apr_os_thread_t;      /**< native thread */
+typedef pthread_key_t         apr_os_threadkey_t;   /**< native thread address
+                                                     *   space */
+#endif
+typedef pid_t                 apr_os_proc_t;        /**< native pid */
+typedef struct timeval        apr_os_imp_time_t;    /**< native timeval */
+typedef struct tm             apr_os_exp_time_t;    /**< native tm */
+/** @var apr_os_dso_handle_t
+ * native dso types
+ */
+#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)
+#include <dl.h>
+typedef shl_t                 apr_os_dso_handle_t;
+#elif defined(DARWIN)
+#include <mach-o/dyld.h>
+typedef NSModule              apr_os_dso_handle_t;
+#else
+typedef void *                apr_os_dso_handle_t;
+#endif
+typedef void*                 apr_os_shm_t;         /**< native SHM */
+
+#endif
+
+/**
+ * @typedef apr_os_sock_info_t
+ * @brief alias for local OS socket
+ */
+/**
+ * everything APR needs to know about an active socket to construct
+ * an APR socket from it; currently, this is platform-independent
+ */
+struct apr_os_sock_info_t {
+    apr_os_sock_t *os_sock; /**< always required */
+    struct sockaddr *local; /**< NULL if not yet bound */
+    struct sockaddr *remote; /**< NULL if not connected */
+    int family;             /**< always required (APR_INET, APR_INET6, etc.) */
+    int type;               /**< always required (SOCK_STREAM, SOCK_DGRAM, etc.) */
+    int protocol;           /**< 0 or actual protocol (APR_PROTO_SCTP, APR_PROTO_TCP, etc.) */
+};
+
+typedef struct apr_os_sock_info_t apr_os_sock_info_t;
+
+#if APR_PROC_MUTEX_IS_GLOBAL || defined(DOXYGEN)
+/** Opaque global mutex type */
+#define apr_os_global_mutex_t apr_os_proc_mutex_t
+/** @return apr_os_global_mutex */
+#define apr_os_global_mutex_get apr_os_proc_mutex_get
+#else
+    /** Thread and process mutex for those platforms where process mutexes
+     *  are not held in threads.
+     */
+    struct apr_os_global_mutex_t {
+        apr_pool_t *pool;
+        apr_proc_mutex_t *proc_mutex;
+#if APR_HAS_THREADS
+        apr_thread_mutex_t *thread_mutex;
+#endif /* APR_HAS_THREADS */
+    };
+    typedef struct apr_os_global_mutex_t apr_os_global_mutex_t;
+
+APR_DECLARE(apr_status_t) apr_os_global_mutex_get(apr_os_global_mutex_t *ospmutex, 
+                                                apr_global_mutex_t *pmutex);
+#endif
+
+
+/**
+ * convert the file from apr type to os specific type.
+ * @param thefile The os specific file we are converting to
+ * @param file The apr file to convert.
+ * @remark On Unix, it is only possible to get a file descriptor from 
+ *         an apr file type.
+ */
+APR_DECLARE(apr_status_t) apr_os_file_get(apr_os_file_t *thefile,
+                                          apr_file_t *file);
+
+/**
+ * convert the dir from apr type to os specific type.
+ * @param thedir The os specific dir we are converting to
+ * @param dir The apr dir to convert.
+ */   
+APR_DECLARE(apr_status_t) apr_os_dir_get(apr_os_dir_t **thedir, 
+                                         apr_dir_t *dir);
+
+/**
+ * Convert the socket from an apr type to an OS specific socket
+ * @param thesock The socket to convert.
+ * @param sock The os specific equivalent of the apr socket..
+ */
+APR_DECLARE(apr_status_t) apr_os_sock_get(apr_os_sock_t *thesock,
+                                          apr_socket_t *sock);
+
+/**
+ * Convert the proc mutex from os specific type to apr type
+ * @param ospmutex The os specific proc mutex we are converting to.
+ * @param pmutex The apr proc mutex to convert.
+ */
+APR_DECLARE(apr_status_t) apr_os_proc_mutex_get(apr_os_proc_mutex_t *ospmutex, 
+                                                apr_proc_mutex_t *pmutex);
+
+/**
+ * Get the exploded time in the platforms native format.
+ * @param ostime the native time format
+ * @param aprtime the time to convert
+ */
+APR_DECLARE(apr_status_t) apr_os_exp_time_get(apr_os_exp_time_t **ostime,
+                                 apr_time_exp_t *aprtime);
+
+/**
+ * Get the imploded time in the platforms native format.
+ * @param ostime  the native time format
+ * @param aprtime the time to convert
+ */
+APR_DECLARE(apr_status_t) apr_os_imp_time_get(apr_os_imp_time_t **ostime, 
+                                              apr_time_t *aprtime);
+
+/**
+ * convert the shm from apr type to os specific type.
+ * @param osshm The os specific shm representation
+ * @param shm The apr shm to convert.
+ */   
+APR_DECLARE(apr_status_t) apr_os_shm_get(apr_os_shm_t *osshm,
+                                         apr_shm_t *shm);
+
+#if APR_HAS_THREADS || defined(DOXYGEN)
+/** 
+ * @defgroup apr_os_thread Thread portability Routines
+ * @{ 
+ */
+/**
+ * convert the thread to os specific type from apr type.
+ * @param thethd The apr thread to convert
+ * @param thd The os specific thread we are converting to
+ */
+APR_DECLARE(apr_status_t) apr_os_thread_get(apr_os_thread_t **thethd, 
+                                            apr_thread_t *thd);
+
+/**
+ * convert the thread private memory key to os specific type from an apr type.
+ * @param thekey The apr handle we are converting from.
+ * @param key The os specific handle we are converting to.
+ */
+APR_DECLARE(apr_status_t) apr_os_threadkey_get(apr_os_threadkey_t *thekey,
+                                               apr_threadkey_t *key);
+
+/**
+ * convert the thread from os specific type to apr type.
+ * @param thd The apr thread we are converting to.
+ * @param thethd The os specific thread to convert
+ * @param cont The pool to use if it is needed.
+ */
+APR_DECLARE(apr_status_t) apr_os_thread_put(apr_thread_t **thd,
+                                            apr_os_thread_t *thethd,
+                                            apr_pool_t *cont);
+
+/**
+ * convert the thread private memory key from os specific type to apr type.
+ * @param key The apr handle we are converting to.
+ * @param thekey The os specific handle to convert
+ * @param cont The pool to use if it is needed.
+ */
+APR_DECLARE(apr_status_t) apr_os_threadkey_put(apr_threadkey_t **key,
+                                               apr_os_threadkey_t *thekey,
+                                               apr_pool_t *cont);
+/**
+ * Get the thread ID
+ */
+APR_DECLARE(apr_os_thread_t) apr_os_thread_current(void);
+
+/**
+ * Compare two thread id's
+ * @param tid1 1st Thread ID to compare
+ * @param tid2 2nd Thread ID to compare
+ * @return non-zero if the two threads are equal, zero otherwise
+ */ 
+APR_DECLARE(int) apr_os_thread_equal(apr_os_thread_t tid1, 
+                                     apr_os_thread_t tid2);
+
+/** @} */
+#endif /* APR_HAS_THREADS */
+
+/**
+ * convert the file from os specific type to apr type.
+ * @param file The apr file we are converting to.
+ * @param thefile The os specific file to convert
+ * @param flags The flags that were used to open this file.
+ * @param cont The pool to use if it is needed.
+ * @remark On Unix, it is only possible to put a file descriptor into
+ *         an apr file type.
+ */
+APR_DECLARE(apr_status_t) apr_os_file_put(apr_file_t **file,
+                                          apr_os_file_t *thefile,
+                                          apr_int32_t flags, apr_pool_t *cont); 
+
+/**
+ * convert the file from os specific type to apr type.
+ * @param file The apr file we are converting to.
+ * @param thefile The os specific pipe to convert
+ * @param cont The pool to use if it is needed.
+ * @remark On Unix, it is only possible to put a file descriptor into
+ *         an apr file type.
+ */
+APR_DECLARE(apr_status_t) apr_os_pipe_put(apr_file_t **file,
+                                          apr_os_file_t *thefile,
+                                          apr_pool_t *cont);
+
+/**
+ * convert the file from os specific type to apr type.
+ * @param file The apr file we are converting to.
+ * @param thefile The os specific pipe to convert
+ * @param register_cleanup A cleanup will be registered on the apr_file_t
+ *   to issue apr_file_close().
+ * @param cont The pool to use if it is needed.
+ * @remark On Unix, it is only possible to put a file descriptor into
+ *         an apr file type.
+ */
+APR_DECLARE(apr_status_t) apr_os_pipe_put_ex(apr_file_t **file,
+                                             apr_os_file_t *thefile,
+                                             int register_cleanup,
+                                             apr_pool_t *cont);
+
+/**
+ * convert the dir from os specific type to apr type.
+ * @param dir The apr dir we are converting to.
+ * @param thedir The os specific dir to convert
+ * @param cont The pool to use when creating to apr directory.
+ */
+APR_DECLARE(apr_status_t) apr_os_dir_put(apr_dir_t **dir,
+                                         apr_os_dir_t *thedir,
+                                         apr_pool_t *cont); 
+
+/**
+ * Convert a socket from the os specific type to the apr type
+ * @param sock The pool to use.
+ * @param thesock The socket to convert to.
+ * @param cont The socket we are converting to an apr type.
+ * @remark If it is a true socket, it is best to call apr_os_sock_make()
+ *         and provide APR with more information about the socket.
+ */
+APR_DECLARE(apr_status_t) apr_os_sock_put(apr_socket_t **sock, 
+                                          apr_os_sock_t *thesock, 
+                                          apr_pool_t *cont);
+
+/**
+ * Create a socket from an existing descriptor and local and remote
+ * socket addresses.
+ * @param apr_sock The new socket that has been set up
+ * @param os_sock_info The os representation of the socket handle and
+ *        other characteristics of the socket
+ * @param cont The pool to use
+ * @remark If you only know the descriptor/handle or if it isn't really
+ *         a true socket, use apr_os_sock_put() instead.
+ */
+APR_DECLARE(apr_status_t) apr_os_sock_make(apr_socket_t **apr_sock,
+                                           apr_os_sock_info_t *os_sock_info,
+                                           apr_pool_t *cont);
+
+/**
+ * Convert the proc mutex from os specific type to apr type
+ * @param pmutex The apr proc mutex we are converting to.
+ * @param ospmutex The os specific proc mutex to convert.
+ * @param cont The pool to use if it is needed.
+ */
+APR_DECLARE(apr_status_t) apr_os_proc_mutex_put(apr_proc_mutex_t **pmutex,
+                                                apr_os_proc_mutex_t *ospmutex,
+                                                apr_pool_t *cont); 
+
+/**
+ * Put the imploded time in the APR format.
+ * @param aprtime the APR time format
+ * @param ostime the time to convert
+ * @param cont the pool to use if necessary
+ */
+APR_DECLARE(apr_status_t) apr_os_imp_time_put(apr_time_t *aprtime,
+                                              apr_os_imp_time_t **ostime,
+                                              apr_pool_t *cont); 
+
+/**
+ * Put the exploded time in the APR format.
+ * @param aprtime the APR time format
+ * @param ostime the time to convert
+ * @param cont the pool to use if necessary
+ */
+APR_DECLARE(apr_status_t) apr_os_exp_time_put(apr_time_exp_t *aprtime,
+                                              apr_os_exp_time_t **ostime,
+                                              apr_pool_t *cont); 
+
+/**
+ * convert the shared memory from os specific type to apr type.
+ * @param shm The apr shm representation of osshm
+ * @param osshm The os specific shm identity
+ * @param cont The pool to use if it is needed.
+ * @remark On fork()ed architectures, this is typically nothing more than
+ * the memory block mapped.  On non-fork architectures, this is typically
+ * some internal handle to pass the mapping from process to process.
+ */
+APR_DECLARE(apr_status_t) apr_os_shm_put(apr_shm_t **shm,
+                                         apr_os_shm_t *osshm,
+                                         apr_pool_t *cont); 
+
+
+#if APR_HAS_DSO || defined(DOXYGEN)
+/** 
+ * @defgroup apr_os_dso DSO (Dynamic Loading) Portability Routines
+ * @{
+ */
+/**
+ * convert the dso handle from os specific to apr
+ * @param dso The apr handle we are converting to
+ * @param thedso the os specific handle to convert
+ * @param pool the pool to use if it is needed
+ */
+APR_DECLARE(apr_status_t) apr_os_dso_handle_put(apr_dso_handle_t **dso,
+                                                apr_os_dso_handle_t thedso,
+                                                apr_pool_t *pool);
+
+/**
+ * convert the apr dso handle into an os specific one
+ * @param aprdso The apr dso handle to convert
+ * @param dso The os specific dso to return
+ */
+APR_DECLARE(apr_status_t) apr_os_dso_handle_get(apr_os_dso_handle_t *dso,
+                                                apr_dso_handle_t *aprdso);
+
+/** @} */
+#endif /* APR_HAS_DSO */
+
+
+#if APR_HAS_OS_UUID
+/**
+ * Private: apr-util's apr_uuid module when supported by the platform
+ */
+APR_DECLARE(apr_status_t) apr_os_uuid_get(unsigned char *uuid_data);
+#endif
+
+
+/**
+ * Get the name of the system default character set.
+ * @param pool the pool to allocate the name from, if needed
+ */
+APR_DECLARE(const char*) apr_os_default_encoding(apr_pool_t *pool);
+
+
+/**
+ * Get the name of the current locale character set.
+ * @param pool the pool to allocate the name from, if needed
+ * @remark Defers to apr_os_default_encoding if the current locale's
+ * data can't be retrieved on this system.
+ */
+APR_DECLARE(const char*) apr_os_locale_encoding(apr_pool_t *pool);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_PORTABLE_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_proc_mutex.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_proc_mutex.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_proc_mutex.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,166 @@
+/* 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.
+ */
+
+#ifndef APR_PROC_MUTEX_H
+#define APR_PROC_MUTEX_H
+
+/**
+ * @file apr_proc_mutex.h
+ * @brief APR Process Locking Routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_proc_mutex Process Locking Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/** 
+ * Enumerated potential types for APR process locking methods
+ * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
+ *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
+ */
+typedef enum {
+    APR_LOCK_FCNTL,         /**< fcntl() */
+    APR_LOCK_FLOCK,         /**< flock() */
+    APR_LOCK_SYSVSEM,       /**< System V Semaphores */
+    APR_LOCK_PROC_PTHREAD,  /**< POSIX pthread process-based locking */
+    APR_LOCK_POSIXSEM,      /**< POSIX semaphore process-based locking */
+    APR_LOCK_DEFAULT        /**< Use the default process lock */
+} apr_lockmech_e;
+
+/** Opaque structure representing a process mutex. */
+typedef struct apr_proc_mutex_t apr_proc_mutex_t;
+
+/*   Function definitions */
+
+/**
+ * Create and initialize a mutex that can be used to synchronize processes.
+ * @param mutex the memory address where the newly created mutex will be
+ *        stored.
+ * @param fname A file name to use if the lock mechanism requires one.  This
+ *        argument should always be provided.  The lock code itself will
+ *        determine if it should be used.
+ * @param mech The mechanism to use for the interprocess lock, if any; one of
+ * <PRE>
+ *            APR_LOCK_FCNTL
+ *            APR_LOCK_FLOCK
+ *            APR_LOCK_SYSVSEM
+ *            APR_LOCK_POSIXSEM
+ *            APR_LOCK_PROC_PTHREAD
+ *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
+ * </PRE>
+ * @param pool the pool from which to allocate the mutex.
+ * @see apr_lockmech_e
+ * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
+ *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_create(apr_proc_mutex_t **mutex,
+                                                const char *fname,
+                                                apr_lockmech_e mech,
+                                                apr_pool_t *pool);
+
+/**
+ * Re-open a mutex in a child process.
+ * @param mutex The newly re-opened mutex structure.
+ * @param fname A file name to use if the mutex mechanism requires one.  This
+ *              argument should always be provided.  The mutex code itself will
+ *              determine if it should be used.  This filename should be the 
+ *              same one that was passed to apr_proc_mutex_create().
+ * @param pool The pool to operate on.
+ * @remark This function must be called to maintain portability, even
+ *         if the underlying lock mechanism does not require it.
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_child_init(apr_proc_mutex_t **mutex,
+                                                    const char *fname,
+                                                    apr_pool_t *pool);
+
+/**
+ * Acquire the lock for the given mutex. If the mutex is already locked,
+ * the current thread will be put to sleep until the lock becomes available.
+ * @param mutex the mutex on which to acquire the lock.
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_lock(apr_proc_mutex_t *mutex);
+
+/**
+ * Attempt to acquire the lock for the given mutex. If the mutex has already
+ * been acquired, the call returns immediately with APR_EBUSY. Note: it
+ * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
+ * if the return value was APR_EBUSY, for portability reasons.
+ * @param mutex the mutex on which to attempt the lock acquiring.
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_trylock(apr_proc_mutex_t *mutex);
+
+/**
+ * Release the lock for the given mutex.
+ * @param mutex the mutex from which to release the lock.
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_unlock(apr_proc_mutex_t *mutex);
+
+/**
+ * Destroy the mutex and free the memory associated with the lock.
+ * @param mutex the mutex to destroy.
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_destroy(apr_proc_mutex_t *mutex);
+
+/**
+ * Destroy the mutex and free the memory associated with the lock.
+ * @param mutex the mutex to destroy.
+ * @note This function is generally used to kill a cleanup on an already
+ *       created mutex
+ */
+APR_DECLARE(apr_status_t) apr_proc_mutex_cleanup(void *mutex);
+
+/**
+ * Return the name of the lockfile for the mutex, or NULL
+ * if the mutex doesn't use a lock file
+ */
+
+APR_DECLARE(const char *) apr_proc_mutex_lockfile(apr_proc_mutex_t *mutex);
+
+/**
+ * Display the name of the mutex, as it relates to the actual method used.
+ * This matches the valid options for Apache's AcceptMutex directive
+ * @param mutex the name of the mutex
+ */
+APR_DECLARE(const char *) apr_proc_mutex_name(apr_proc_mutex_t *mutex);
+
+/**
+ * Display the name of the default mutex: APR_LOCK_DEFAULT
+ */
+APR_DECLARE(const char *) apr_proc_mutex_defname(void);
+
+/**
+ * Get the pool used by this proc_mutex.
+ * @return apr_pool_t the pool
+ */
+APR_POOL_DECLARE_ACCESSOR(proc_mutex);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_PROC_MUTEX_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_queue.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_queue.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_queue.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,138 @@
+/* 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.
+ */
+
+#ifndef APR_QUEUE_H
+#define APR_QUEUE_H
+
+/**
+ * @file apr_queue.h
+ * @brief Thread Safe FIFO bounded queue
+ * @note Since most implementations of the queue are backed by a condition
+ * variable implementation, it isn't available on systems without threads.
+ * Although condition variables are some times available without threads.
+ */
+
+#include "apu.h"
+#include "apr_errno.h"
+#include "apr_pools.h"
+
+#if APR_HAS_THREADS
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup APR_Util_FIFO Thread Safe FIFO bounded queue
+ * @ingroup APR_Util
+ * @{
+ */
+
+/**
+ * opaque structure
+ */
+typedef struct apr_queue_t apr_queue_t;
+
+/** 
+ * create a FIFO queue
+ * @param queue The new queue
+ * @param queue_capacity maximum size of the queue
+ * @param a pool to allocate queue from
+ */
+APU_DECLARE(apr_status_t) apr_queue_create(apr_queue_t **queue, 
+                                           unsigned int queue_capacity, 
+                                           apr_pool_t *a);
+
+/**
+ * push/add an object to the queue, blocking if the queue is already full
+ *
+ * @param queue the queue
+ * @param data the data
+ * @returns APR_EINTR the blocking was interrupted (try again)
+ * @returns APR_EOF the queue has been terminated
+ * @returns APR_SUCCESS on a successful push
+ */
+APU_DECLARE(apr_status_t) apr_queue_push(apr_queue_t *queue, void *data);
+
+/**
+ * pop/get an object from the queue, blocking if the queue is already empty
+ *
+ * @param queue the queue
+ * @param data the data
+ * @returns APR_EINTR the blocking was interrupted (try again)
+ * @returns APR_EOF if the queue has been terminated
+ * @returns APR_SUCCESS on a successful pop
+ */
+APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data);
+
+/**
+ * push/add an object to the queue, returning immediately if the queue is full
+ *
+ * @param queue the queue
+ * @param data the data
+ * @returns APR_EINTR the blocking operation was interrupted (try again)
+ * @returns APR_EAGAIN the queue is full
+ * @returns APR_EOF the queue has been terminated
+ * @returns APR_SUCCESS on a successful push
+ */
+APU_DECLARE(apr_status_t) apr_queue_trypush(apr_queue_t *queue, void *data);
+
+/**
+ * pop/get an object to the queue, returning immediately if the queue is empty
+ *
+ * @param queue the queue
+ * @param data the data
+ * @returns APR_EINTR the blocking operation was interrupted (try again)
+ * @returns APR_EAGAIN the queue is empty
+ * @returns APR_EOF the queue has been terminated
+ * @returns APR_SUCCESS on a successful pop
+ */
+APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data);
+
+/**
+ * returns the size of the queue.
+ *
+ * @warning this is not threadsafe, and is intended for reporting/monitoring
+ * of the queue.
+ * @param queue the queue
+ * @returns the size of the queue
+ */
+APU_DECLARE(unsigned int) apr_queue_size(apr_queue_t *queue);
+
+/**
+ * interrupt all the threads blocking on this queue.
+ *
+ * @param queue the queue
+ */
+APU_DECLARE(apr_status_t) apr_queue_interrupt_all(apr_queue_t *queue);
+
+/**
+ * terminate the queue, sending an interrupt to all the
+ * blocking threads
+ *
+ * @param queue the queue
+ */
+APU_DECLARE(apr_status_t) apr_queue_term(apr_queue_t *queue);
+
+#ifdef __cplusplus
+}
+#endif
+
+/** @} */
+
+#endif /* APR_HAS_THREADS */
+
+#endif /* APRQUEUE_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_random.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_random.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_random.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,153 @@
+/* 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.
+ */
+
+#ifndef APR_RANDOM_H
+#define APR_RANDOM_H
+
+/**
+ * @file apr_random.h
+ * @brief APR PRNG routines
+ */
+
+#include "apr_pools.h"
+#include "apr_thread_proc.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_random PRNG Routines
+ * @ingroup APR
+ * @{
+ */
+
+typedef struct apr_crypto_hash_t apr_crypto_hash_t;
+
+typedef void apr_crypto_hash_init_t(apr_crypto_hash_t *hash);
+typedef void apr_crypto_hash_add_t(apr_crypto_hash_t *hash, const void *data,
+                                   apr_size_t bytes);
+typedef void apr_crypto_hash_finish_t(apr_crypto_hash_t *hash,
+                                      unsigned char *result);
+
+
+/* FIXME: make this opaque */
+struct apr_crypto_hash_t {
+    apr_crypto_hash_init_t *init;
+    apr_crypto_hash_add_t *add;
+    apr_crypto_hash_finish_t *finish;
+    apr_size_t size;
+    void *data;
+};
+
+/**
+ * Allocate and initialize the SHA-256 context
+ * @param p The pool to allocate from
+ */
+APR_DECLARE(apr_crypto_hash_t *) apr_crypto_sha256_new(apr_pool_t *p);
+
+/** Opaque PRNG structure. */
+typedef struct apr_random_t apr_random_t;
+
+/**
+ * Initialize a PRNG state
+ * @param g The PRNG state
+ * @param p The pool to allocate from
+ * @param pool_hash Pool hash functions
+ * @param key_hash Key hash functions
+ * @param prng_hash PRNG hash functions
+ */
+APR_DECLARE(void) apr_random_init(apr_random_t *g, apr_pool_t *p,
+                                  apr_crypto_hash_t *pool_hash,
+                                  apr_crypto_hash_t *key_hash,
+                                  apr_crypto_hash_t *prng_hash);
+/**
+ * Allocate and initialize (apr_crypto_sha256_new) a new PRNG state.
+ * @param p The pool to allocate from
+ */
+APR_DECLARE(apr_random_t *) apr_random_standard_new(apr_pool_t *p);
+
+/**
+ * Mix the randomness pools.
+ * @param g The PRNG state
+ * @param entropy_ Entropy buffer
+ * @param bytes Length of entropy_ in bytes
+ */
+APR_DECLARE(void) apr_random_add_entropy(apr_random_t *g,
+                                         const void *entropy_,
+                                         apr_size_t bytes);
+/**
+ * Generate cryptographically insecure random bytes.
+ * @param g The RNG state
+ * @param random Buffer to fill with random bytes
+ * @param bytes Length of buffer in bytes
+ */
+APR_DECLARE(apr_status_t) apr_random_insecure_bytes(apr_random_t *g,
+                                                    void *random,
+                                                    apr_size_t bytes);
+
+/**
+ * Generate cryptographically secure random bytes.
+ * @param g The RNG state
+ * @param random Buffer to fill with random bytes
+ * @param bytes Length of buffer in bytes
+ */
+APR_DECLARE(apr_status_t) apr_random_secure_bytes(apr_random_t *g,
+                                                  void *random,
+                                                  apr_size_t bytes);
+/**
+ * Ensures that E bits of conditional entropy are mixed into the PRNG
+ * before any further randomness is extracted.
+ * @param g The RNG state
+ */
+APR_DECLARE(void) apr_random_barrier(apr_random_t *g);
+
+/**
+ * Return APR_SUCCESS if the cryptographic PRNG has been seeded with
+ * enough data, APR_ENOTENOUGHENTROPY otherwise.
+ * @param r The RNG state
+ */
+APR_DECLARE(apr_status_t) apr_random_secure_ready(apr_random_t *r);
+
+/**
+ * Return APR_SUCCESS if the PRNG has been seeded with enough data,
+ * APR_ENOTENOUGHENTROPY otherwise.
+ * @param r The PRNG state
+ */
+APR_DECLARE(apr_status_t) apr_random_insecure_ready(apr_random_t *r);
+
+/**
+ * Mix the randomness pools after forking.
+ * @param proc The resulting process handle from apr_proc_fork()
+ * @remark Call this in the child after forking to mix the randomness
+ * pools. Note that its generally a bad idea to fork a process with a
+ * real PRNG in it - better to have the PRNG externally and get the
+ * randomness from there. However, if you really must do it, then you
+ * should supply all your entropy to all the PRNGs - don't worry, they
+ * won't produce the same output.
+ * @remark Note that apr_proc_fork() calls this for you, so only weird
+ * applications need ever call it themselves.
+ * @internal
+ */
+APR_DECLARE(void) apr_random_after_fork(apr_proc_t *proc);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_RANDOM_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_reslist.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_reslist.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_reslist.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,176 @@
+/* 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.
+ */
+
+#ifndef APR_RESLIST_H
+#define APR_RESLIST_H
+
+/** 
+ * @file apr_reslist.h
+ * @brief APR-UTIL Resource List Routines
+ */
+
+#include "apr.h"
+#include "apu.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+#include "apr_time.h"
+
+/**
+ * @defgroup APR_Util_RL Resource List Routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** Opaque resource list object */
+typedef struct apr_reslist_t apr_reslist_t;
+
+/* Generic constructor called by resource list when it needs to create a
+ * resource.
+ * @param resource opaque resource
+ * @param param flags
+ * @param pool  Pool
+ */
+typedef apr_status_t (*apr_reslist_constructor)(void **resource, void *params,
+                                                apr_pool_t *pool);
+
+/* Generic destructor called by resource list when it needs to destroy a
+ * resource.
+ * @param resource opaque resource
+ * @param param flags
+ * @param pool  Pool
+ */
+typedef apr_status_t (*apr_reslist_destructor)(void *resource, void *params,
+                                               apr_pool_t *pool);
+
+/* Cleanup order modes */
+#define APR_RESLIST_CLEANUP_DEFAULT  0       /**< default pool cleanup */
+#define APR_RESLIST_CLEANUP_FIRST    1       /**< use pool pre cleanup */
+
+/**
+ * Create a new resource list with the following parameters:
+ * @param reslist An address where the pointer to the new resource
+ *                list will be stored.
+ * @param min Allowed minimum number of available resources. Zero
+ *            creates new resources only when needed.
+ * @param smax Resources will be destroyed during reslist maintenance to
+ *             meet this maximum restriction as they expire (reach their ttl).
+ * @param hmax Absolute maximum limit on the number of total resources.
+ * @param ttl If non-zero, sets the maximum amount of time in microseconds an
+ *            unused resource is valid.  Any resource which has exceeded this
+ *            time will be destroyed, either when encountered by
+ *            apr_reslist_acquire() or during reslist maintenance.
+ * @param con Constructor routine that is called to create a new resource.
+ * @param de Destructor routine that is called to destroy an expired resource.
+ * @param params Passed to constructor and deconstructor
+ * @param pool The pool from which to create this resource list. Also the
+ *             same pool that is passed to the constructor and destructor
+ *             routines.
+ * @remark If APR has been compiled without thread support, hmax will be
+ *         automatically set to 1 and values of min and smax will be forced to
+ *         1 for any non-zero value.
+ */
+APU_DECLARE(apr_status_t) apr_reslist_create(apr_reslist_t **reslist,
+                                             int min, int smax, int hmax,
+                                             apr_interval_time_t ttl,
+                                             apr_reslist_constructor con,
+                                             apr_reslist_destructor de,
+                                             void *params,
+                                             apr_pool_t *pool);
+
+/**
+ * Destroy the given resource list and all resources controlled by
+ * this list.
+ * FIXME: Should this block until all resources become available,
+ *        or maybe just destroy all the free ones, or maybe destroy
+ *        them even though they might be in use by something else?
+ *        Currently it will abort if there are resources that haven't
+ *        been released, so there is an assumption that all resources
+ *        have been released to the list before calling this function.
+ * @param reslist The reslist to destroy
+ */
+APU_DECLARE(apr_status_t) apr_reslist_destroy(apr_reslist_t *reslist);
+
+/**
+ * Retrieve a resource from the list, creating a new one if necessary.
+ * If we have met our maximum number of resources, we will block
+ * until one becomes available.
+ */
+APU_DECLARE(apr_status_t) apr_reslist_acquire(apr_reslist_t *reslist,
+                                              void **resource);
+
+/**
+ * Return a resource back to the list of available resources.
+ */
+APU_DECLARE(apr_status_t) apr_reslist_release(apr_reslist_t *reslist,
+                                              void *resource);
+
+/**
+ * Set the timeout the acquire will wait for a free resource
+ * when the maximum number of resources is exceeded.
+ * @param reslist The resource list.
+ * @param timeout Timeout to wait. The zero waits forever.
+ */
+APU_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist,
+                                          apr_interval_time_t timeout);
+
+/**
+ * Return the number of outstanding resources.
+ * @param reslist The resource list.
+ */
+APU_DECLARE(apr_uint32_t) apr_reslist_acquired_count(apr_reslist_t *reslist);
+
+/**
+ * Invalidate a resource in the pool - e.g. a database connection
+ * that returns a "lost connection" error and can't be restored.
+ * Use this instead of apr_reslist_release if the resource is bad.
+ */
+APU_DECLARE(apr_status_t) apr_reslist_invalidate(apr_reslist_t *reslist,
+                                                 void *resource);
+
+/**
+ * Perform routine maintenance on the resource list. This call
+ * may instantiate new resources or expire old resources.
+ * @param reslist The resource list.
+ */
+APU_DECLARE(apr_status_t) apr_reslist_maintain(apr_reslist_t *reslist);
+
+/**
+ * Set reslist cleanup order.
+ * @param reslist The resource list.
+ * @param mode Cleanup order mode
+ * <PRE>
+ *           APR_RESLIST_CLEANUP_DEFAULT  default pool cleanup order
+ *           APR_RESLIST_CLEANUP_FIRST    use pool pre cleanup
+ * </PRE>
+ * @remark If APR_RESLIST_CLEANUP_FIRST is used the destructors will
+ * be called before child pools of the pool used to create the reslist
+ * are destroyed. This allows to explicitly destroy the child pools
+ * inside reslist destructors.
+ */
+APU_DECLARE(void) apr_reslist_cleanup_order_set(apr_reslist_t *reslist,
+                                                apr_uint32_t mode);
+
+#ifdef __cplusplus
+}
+#endif
+
+/** @} */
+
+#endif  /* ! APR_RESLIST_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ring.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ring.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_ring.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,513 @@
+/* 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.
+ */
+
+/*
+ * This code draws heavily from the 4.4BSD <sys/queue.h> macros
+ * and Dean Gaudet's "splim/ring.h".
+ * <http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/sys/queue.h>
+ * <http://www.arctic.org/~dean/splim/>
+ *
+ * We'd use Dean's code directly if we could guarantee the
+ * availability of inline functions.
+ */
+
+#ifndef APR_RING_H
+#define APR_RING_H
+
+/**
+ * @file apr_ring.h
+ * @brief APR Rings
+ */
+
+/*
+ * for offsetof()
+ */
+#include "apr_general.h"
+
+/**
+ * @defgroup apr_ring Ring Macro Implementations
+ * @ingroup APR 
+ * A ring is a kind of doubly-linked list that can be manipulated
+ * without knowing where its head is.
+ * @{
+ */
+
+/**
+ * The Ring Element
+ *
+ * A ring element struct is linked to the other elements in the ring
+ * through its ring entry field, e.g.
+ * <pre>
+ *      struct my_element_t {
+ *          APR_RING_ENTRY(my_element_t) link;
+ *          int foo;
+ *          char *bar;
+ *      };
+ * </pre>
+ *
+ * An element struct may be put on more than one ring if it has more
+ * than one APR_RING_ENTRY field. Each APR_RING_ENTRY has a corresponding
+ * APR_RING_HEAD declaration.
+ *
+ * @warning For strict C standards compliance you should put the APR_RING_ENTRY
+ * first in the element struct unless the head is always part of a larger
+ * object with enough earlier fields to accommodate the offsetof() used
+ * to compute the ring sentinel below. You can usually ignore this caveat.
+ */
+#define APR_RING_ENTRY(elem)						\
+    struct {								\
+	struct elem * volatile next;					\
+	struct elem * volatile prev;					\
+    }
+
+/**
+ * The Ring Head
+ *
+ * Each ring is managed via its head, which is a struct declared like this:
+ * <pre>
+ *      APR_RING_HEAD(my_ring_t, my_element_t);
+ *      struct my_ring_t ring, *ringp;
+ * </pre>
+ *
+ * This struct looks just like the element link struct so that we can
+ * be sure that the typecasting games will work as expected.
+ *
+ * The first element in the ring is next after the head, and the last
+ * element is just before the head.
+ */
+#define APR_RING_HEAD(head, elem)					\
+    struct head {							\
+	struct elem * volatile next;					\
+	struct elem * volatile prev;					\
+    }
+
+/**
+ * The Ring Sentinel
+ *
+ * This is the magic pointer value that occurs before the first and
+ * after the last elements in the ring, computed from the address of
+ * the ring's head.  The head itself isn't an element, but in order to
+ * get rid of all the special cases when dealing with the ends of the
+ * ring, we play typecasting games to make it look like one.
+ *
+ * Here is a diagram to illustrate the arrangements of the next and
+ * prev pointers of each element in a single ring. Note that they point
+ * to the start of each element, not to the APR_RING_ENTRY structure.
+ *
+ * <pre>
+ *     +->+------+<-+  +->+------+<-+  +->+------+<-+
+ *     |  |struct|  |  |  |struct|  |  |  |struct|  |
+ *    /   | elem |   \/   | elem |   \/   | elem |  \
+ * ...    |      |   /\   |      |   /\   |      |   ...
+ *        +------+  |  |  +------+  |  |  +------+
+ *   ...--|prev  |  |  +--|ring  |  |  +--|prev  |
+ *        |  next|--+     | entry|--+     |  next|--...
+ *        +------+        +------+        +------+
+ *        | etc. |        | etc. |        | etc. |
+ *        :      :        :      :        :      :
+ * </pre>
+ *
+ * The APR_RING_HEAD is nothing but a bare APR_RING_ENTRY. The prev
+ * and next pointers in the first and last elements don't actually
+ * point to the head, they point to a phantom place called the
+ * sentinel. Its value is such that last->next->next == first because
+ * the offset from the sentinel to the head's next pointer is the same
+ * as the offset from the start of an element to its next pointer.
+ * This also works in the opposite direction.
+ *
+ * <pre>
+ *        last                            first
+ *     +->+------+<-+  +->sentinel<-+  +->+------+<-+
+ *     |  |struct|  |  |            |  |  |struct|  |
+ *    /   | elem |   \/              \/   | elem |  \
+ * ...    |      |   /\              /\   |      |   ...
+ *        +------+  |  |  +------+  |  |  +------+
+ *   ...--|prev  |  |  +--|ring  |  |  +--|prev  |
+ *        |  next|--+     |  head|--+     |  next|--...
+ *        +------+        +------+        +------+
+ *        | etc. |                        | etc. |
+ *        :      :                        :      :
+ * </pre>
+ *
+ * Note that the offset mentioned above is different for each kind of
+ * ring that the element may be on, and each kind of ring has a unique
+ * name for its APR_RING_ENTRY in each element, and has its own type
+ * for its APR_RING_HEAD.
+ *
+ * Note also that if the offset is non-zero (which is required if an
+ * element has more than one APR_RING_ENTRY), the unreality of the
+ * sentinel may have bad implications on very perverse implementations
+ * of C -- see the warning in APR_RING_ENTRY.
+ *
+ * @param hp   The head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_SENTINEL(hp, elem, link)				\
+    (struct elem *)((char *)(&(hp)->next) - APR_OFFSETOF(struct elem, link))
+
+/**
+ * The first element of the ring
+ * @param hp   The head of the ring
+ */
+#define APR_RING_FIRST(hp)	(hp)->next
+/**
+ * The last element of the ring
+ * @param hp   The head of the ring
+ */
+#define APR_RING_LAST(hp)	(hp)->prev
+/**
+ * The next element in the ring
+ * @param ep   The current element
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_NEXT(ep, link)	(ep)->link.next
+/**
+ * The previous element in the ring
+ * @param ep   The current element
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_PREV(ep, link)	(ep)->link.prev
+
+
+/**
+ * Initialize a ring
+ * @param hp   The head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_INIT(hp, elem, link) do {				\
+	APR_RING_FIRST((hp)) = APR_RING_SENTINEL((hp), elem, link);	\
+	APR_RING_LAST((hp))  = APR_RING_SENTINEL((hp), elem, link);	\
+    } while (0)
+
+/**
+ * Determine if a ring is empty
+ * @param hp   The head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ * @return true or false
+ */
+#define APR_RING_EMPTY(hp, elem, link)					\
+    (APR_RING_FIRST((hp)) == APR_RING_SENTINEL((hp), elem, link))
+
+/**
+ * Initialize a singleton element
+ * @param ep   The element
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_ELEM_INIT(ep, link) do {				\
+	APR_RING_NEXT((ep), link) = (ep);				\
+	APR_RING_PREV((ep), link) = (ep);				\
+    } while (0)
+
+
+/**
+ * Splice the sequence ep1..epN into the ring before element lep
+ *   (..lep.. becomes ..ep1..epN..lep..)
+ * @warning This doesn't work for splicing before the first element or on
+ *   empty rings... see APR_RING_SPLICE_HEAD for one that does
+ * @param lep  Element in the ring to splice before
+ * @param ep1  First element in the sequence to splice in
+ * @param epN  Last element in the sequence to splice in
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_SPLICE_BEFORE(lep, ep1, epN, link) do {		\
+	APR_RING_NEXT((epN), link) = (lep);				\
+	APR_RING_PREV((ep1), link) = APR_RING_PREV((lep), link);	\
+	APR_RING_NEXT(APR_RING_PREV((lep), link), link) = (ep1);	\
+	APR_RING_PREV((lep), link) = (epN);				\
+    } while (0)
+
+/**
+ * Splice the sequence ep1..epN into the ring after element lep
+ *   (..lep.. becomes ..lep..ep1..epN..)
+ * @warning This doesn't work for splicing after the last element or on
+ *   empty rings... see APR_RING_SPLICE_TAIL for one that does
+ * @param lep  Element in the ring to splice after
+ * @param ep1  First element in the sequence to splice in
+ * @param epN  Last element in the sequence to splice in
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_SPLICE_AFTER(lep, ep1, epN, link) do {			\
+	APR_RING_PREV((ep1), link) = (lep);				\
+	APR_RING_NEXT((epN), link) = APR_RING_NEXT((lep), link);	\
+	APR_RING_PREV(APR_RING_NEXT((lep), link), link) = (epN);	\
+	APR_RING_NEXT((lep), link) = (ep1);				\
+    } while (0)
+
+/**
+ * Insert the element nep into the ring before element lep
+ *   (..lep.. becomes ..nep..lep..)
+ * @warning This doesn't work for inserting before the first element or on
+ *   empty rings... see APR_RING_INSERT_HEAD for one that does
+ * @param lep  Element in the ring to insert before
+ * @param nep  Element to insert
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_INSERT_BEFORE(lep, nep, link)				\
+	APR_RING_SPLICE_BEFORE((lep), (nep), (nep), link)
+
+/**
+ * Insert the element nep into the ring after element lep
+ *   (..lep.. becomes ..lep..nep..)
+ * @warning This doesn't work for inserting after the last element or on
+ *   empty rings... see APR_RING_INSERT_TAIL for one that does
+ * @param lep  Element in the ring to insert after
+ * @param nep  Element to insert
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_INSERT_AFTER(lep, nep, link)				\
+	APR_RING_SPLICE_AFTER((lep), (nep), (nep), link)
+
+
+/**
+ * Splice the sequence ep1..epN into the ring before the first element
+ *   (..hp.. becomes ..hp..ep1..epN..)
+ * @param hp   Head of the ring
+ * @param ep1  First element in the sequence to splice in
+ * @param epN  Last element in the sequence to splice in
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_SPLICE_HEAD(hp, ep1, epN, elem, link)			\
+	APR_RING_SPLICE_AFTER(APR_RING_SENTINEL((hp), elem, link),	\
+			     (ep1), (epN), link)
+
+/**
+ * Splice the sequence ep1..epN into the ring after the last element
+ *   (..hp.. becomes ..ep1..epN..hp..)
+ * @param hp   Head of the ring
+ * @param ep1  First element in the sequence to splice in
+ * @param epN  Last element in the sequence to splice in
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_SPLICE_TAIL(hp, ep1, epN, elem, link)			\
+	APR_RING_SPLICE_BEFORE(APR_RING_SENTINEL((hp), elem, link),	\
+			     (ep1), (epN), link)
+
+/**
+ * Insert the element nep into the ring before the first element
+ *   (..hp.. becomes ..hp..nep..)
+ * @param hp   Head of the ring
+ * @param nep  Element to insert
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_INSERT_HEAD(hp, nep, elem, link)			\
+	APR_RING_SPLICE_HEAD((hp), (nep), (nep), elem, link)
+
+/**
+ * Insert the element nep into the ring after the last element
+ *   (..hp.. becomes ..nep..hp..)
+ * @param hp   Head of the ring
+ * @param nep  Element to insert
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_INSERT_TAIL(hp, nep, elem, link)			\
+	APR_RING_SPLICE_TAIL((hp), (nep), (nep), elem, link)
+
+/**
+ * Concatenate ring h2 onto the end of ring h1, leaving h2 empty.
+ * @param h1   Head of the ring to concatenate onto
+ * @param h2   Head of the ring to concatenate
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_CONCAT(h1, h2, elem, link) do {			\
+	if (!APR_RING_EMPTY((h2), elem, link)) {			\
+	    APR_RING_SPLICE_BEFORE(APR_RING_SENTINEL((h1), elem, link),	\
+				  APR_RING_FIRST((h2)),			\
+				  APR_RING_LAST((h2)), link);		\
+	    APR_RING_INIT((h2), elem, link);				\
+	}								\
+    } while (0)
+
+/**
+ * Prepend ring h2 onto the beginning of ring h1, leaving h2 empty.
+ * @param h1   Head of the ring to prepend onto
+ * @param h2   Head of the ring to prepend
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_PREPEND(h1, h2, elem, link) do {			\
+	if (!APR_RING_EMPTY((h2), elem, link)) {			\
+	    APR_RING_SPLICE_AFTER(APR_RING_SENTINEL((h1), elem, link),	\
+				  APR_RING_FIRST((h2)),			\
+				  APR_RING_LAST((h2)), link);		\
+	    APR_RING_INIT((h2), elem, link);				\
+	}								\
+    } while (0)
+
+/**
+ * Unsplice a sequence of elements from a ring
+ * @warning The unspliced sequence is left with dangling pointers at either end
+ * @param ep1  First element in the sequence to unsplice
+ * @param epN  Last element in the sequence to unsplice
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_UNSPLICE(ep1, epN, link) do {				\
+	APR_RING_NEXT(APR_RING_PREV((ep1), link), link) =		\
+		     APR_RING_NEXT((epN), link);			\
+	APR_RING_PREV(APR_RING_NEXT((epN), link), link) =		\
+		     APR_RING_PREV((ep1), link);			\
+    } while (0)
+
+/**
+ * Remove a single element from a ring
+ * @warning The unspliced element is left with dangling pointers at either end
+ * @param ep   Element to remove
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_REMOVE(ep, link)					\
+    APR_RING_UNSPLICE((ep), (ep), link)
+
+/**
+ * Iterate over a ring
+ * @param ep The current element
+ * @param head The head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_FOREACH(ep, head, elem, link)                          \
+    for (ep = APR_RING_FIRST(head);                                     \
+         ep != APR_RING_SENTINEL(head, elem, link);                     \
+         ep = APR_RING_NEXT(ep, link))
+
+/**
+ * Iterate over a ring safe against removal of the current element
+ * @param ep1 The current element
+ * @param ep2 Iteration cursor
+ * @param head The head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_FOREACH_SAFE(ep1, ep2, head, elem, link)               \
+    for (ep1 = APR_RING_FIRST(head), ep2 = APR_RING_NEXT(ep1, link);    \
+         ep1 != APR_RING_SENTINEL(head, elem, link);                    \
+         ep1 = ep2, ep2 = APR_RING_NEXT(ep1, link))
+
+/* Debugging tools: */
+
+#ifdef APR_RING_DEBUG
+#include <stdio.h>
+#include <assert.h>
+
+#define APR_RING_CHECK_ONE(msg, ptr)					\
+	fprintf(stderr, "*** %s %p\n", msg, ptr)
+
+#define APR_RING_CHECK(hp, elem, link, msg)				\
+	APR_RING_CHECK_ELEM(APR_RING_SENTINEL(hp, elem, link), elem, link, msg)
+
+#define APR_RING_CHECK_ELEM(ep, elem, link, msg) do {			\
+	struct elem *start = (ep);					\
+	struct elem *here = start;					\
+	fprintf(stderr, "*** ring check start -- %s\n", msg);		\
+	do {								\
+	    fprintf(stderr, "\telem %p\n", here);			\
+	    fprintf(stderr, "\telem->next %p\n",			\
+		    APR_RING_NEXT(here, link));				\
+	    fprintf(stderr, "\telem->prev %p\n",			\
+		    APR_RING_PREV(here, link));				\
+	    fprintf(stderr, "\telem->next->prev %p\n",			\
+		    APR_RING_PREV(APR_RING_NEXT(here, link), link));	\
+	    fprintf(stderr, "\telem->prev->next %p\n",			\
+		    APR_RING_NEXT(APR_RING_PREV(here, link), link));	\
+	    if (APR_RING_PREV(APR_RING_NEXT(here, link), link) != here) { \
+		fprintf(stderr, "\t*** elem->next->prev != elem\n");	\
+		break;							\
+	    }								\
+	    if (APR_RING_NEXT(APR_RING_PREV(here, link), link) != here) { \
+		fprintf(stderr, "\t*** elem->prev->next != elem\n");	\
+		break;							\
+	    }								\
+	    here = APR_RING_NEXT(here, link);				\
+	} while (here != start);					\
+	fprintf(stderr, "*** ring check end\n");			\
+    } while (0)
+
+#define APR_RING_CHECK_CONSISTENCY(hp, elem, link)			\
+	APR_RING_CHECK_ELEM_CONSISTENCY(APR_RING_SENTINEL(hp, elem, link),\
+					elem, link)
+
+#define APR_RING_CHECK_ELEM_CONSISTENCY(ep, elem, link) do {		\
+	struct elem *start = (ep);					\
+	struct elem *here = start;					\
+	do {								\
+	    assert(APR_RING_PREV(APR_RING_NEXT(here, link), link) == here); \
+	    assert(APR_RING_NEXT(APR_RING_PREV(here, link), link) == here); \
+	    here = APR_RING_NEXT(here, link);				\
+	} while (here != start);					\
+    } while (0)
+
+#else
+/**
+ * Print a single pointer value to STDERR
+ *   (This is a no-op unless APR_RING_DEBUG is defined.)
+ * @param msg Descriptive message
+ * @param ptr Pointer value to print
+ */
+#define APR_RING_CHECK_ONE(msg, ptr)
+/**
+ * Dump all ring pointers to STDERR, starting with the head and looping all
+ * the way around the ring back to the head.  Aborts if an inconsistency
+ * is found.
+ *   (This is a no-op unless APR_RING_DEBUG is defined.)
+ * @param hp   Head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ * @param msg  Descriptive message
+ */
+#define APR_RING_CHECK(hp, elem, link, msg)
+/**
+ * Loops around a ring and checks all the pointers for consistency.  Pops
+ * an assertion if any inconsistency is found.  Same idea as APR_RING_CHECK()
+ * except that it's silent if all is well.
+ *   (This is a no-op unless APR_RING_DEBUG is defined.)
+ * @param hp   Head of the ring
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_CHECK_CONSISTENCY(hp, elem, link)
+/**
+ * Dump all ring pointers to STDERR, starting with the given element and
+ * looping all the way around the ring back to that element.  Aborts if
+ * an inconsistency is found.
+ *   (This is a no-op unless APR_RING_DEBUG is defined.)
+ * @param ep   The element
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ * @param msg  Descriptive message
+ */
+#define APR_RING_CHECK_ELEM(ep, elem, link, msg)
+/**
+ * Loops around a ring, starting with the given element, and checks all
+ * the pointers for consistency.  Pops an assertion if any inconsistency
+ * is found.  Same idea as APR_RING_CHECK_ELEM() except that it's silent
+ * if all is well.
+ *   (This is a no-op unless APR_RING_DEBUG is defined.)
+ * @param ep   The element
+ * @param elem The name of the element struct
+ * @param link The name of the APR_RING_ENTRY in the element struct
+ */
+#define APR_RING_CHECK_ELEM_CONSISTENCY(ep, elem, link)
+#endif
+
+/** @} */ 
+
+#endif /* !APR_RING_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_rmm.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_rmm.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_rmm.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,137 @@
+/* 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.
+ */
+
+#ifndef APR_RMM_H
+#define APR_RMM_H
+/** 
+ * @file apr_rmm.h
+ * @brief APR-UTIL Relocatable Memory Management Routines
+ */
+/**
+ * @defgroup APR_Util_RMM Relocatable Memory Management Routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+#include "apu.h"
+#include "apr_anylock.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** Structure to access Relocatable, Managed Memory */
+typedef struct apr_rmm_t apr_rmm_t;
+
+/** Fundamental allocation unit, within a specific apr_rmm_t */
+typedef apr_size_t   apr_rmm_off_t;
+
+/**
+ * Initialize a relocatable memory block to be managed by the apr_rmm API.
+ * @param rmm The relocatable memory block
+ * @param lock An apr_anylock_t of the appropriate type of lock, or NULL
+ *             if no locking is required.
+ * @param membuf The block of relocatable memory to be managed
+ * @param memsize The size of relocatable memory block to be managed
+ * @param cont The pool to use for local storage and management
+ * @remark Both @param membuf and @param memsize must be aligned
+ * (for instance using APR_ALIGN_DEFAULT).
+ */
+APU_DECLARE(apr_status_t) apr_rmm_init(apr_rmm_t **rmm, apr_anylock_t *lock,
+                                       void *membuf, apr_size_t memsize, 
+                                       apr_pool_t *cont);
+
+/**
+ * Destroy a managed memory block.
+ * @param rmm The relocatable memory block to destroy
+ */
+APU_DECLARE(apr_status_t) apr_rmm_destroy(apr_rmm_t *rmm);
+
+/**
+ * Attach to a relocatable memory block already managed by the apr_rmm API.
+ * @param rmm The relocatable memory block
+ * @param lock An apr_anylock_t of the appropriate type of lock
+ * @param membuf The block of relocatable memory already under management
+ * @param cont The pool to use for local storage and management
+ */
+APU_DECLARE(apr_status_t) apr_rmm_attach(apr_rmm_t **rmm, apr_anylock_t *lock,
+                                         void *membuf, apr_pool_t *cont);
+
+/**
+ * Detach from the managed block of memory.
+ * @param rmm The relocatable memory block to detach from
+ */
+APU_DECLARE(apr_status_t) apr_rmm_detach(apr_rmm_t *rmm);
+
+/**
+ * Allocate memory from the block of relocatable memory.
+ * @param rmm The relocatable memory block
+ * @param reqsize How much memory to allocate
+ */
+APU_DECLARE(apr_rmm_off_t) apr_rmm_malloc(apr_rmm_t *rmm, apr_size_t reqsize);
+
+/**
+ * Realloc memory from the block of relocatable memory.
+ * @param rmm The relocatable memory block
+ * @param entity The memory allocation to realloc
+ * @param reqsize The new size
+ */
+APU_DECLARE(apr_rmm_off_t) apr_rmm_realloc(apr_rmm_t *rmm, void *entity, apr_size_t reqsize);
+
+/**
+ * Allocate memory from the block of relocatable memory and initialize it to zero.
+ * @param rmm The relocatable memory block
+ * @param reqsize How much memory to allocate
+ */
+APU_DECLARE(apr_rmm_off_t) apr_rmm_calloc(apr_rmm_t *rmm, apr_size_t reqsize);
+
+/**
+ * Free allocation returned by apr_rmm_malloc or apr_rmm_calloc.
+ * @param rmm The relocatable memory block
+ * @param entity The memory allocation to free
+ */
+APU_DECLARE(apr_status_t) apr_rmm_free(apr_rmm_t *rmm, apr_rmm_off_t entity);
+
+/**
+ * Retrieve the physical address of a relocatable allocation of memory
+ * @param rmm The relocatable memory block
+ * @param entity The memory allocation to free
+ * @return address The address, aligned with APR_ALIGN_DEFAULT.
+ */
+APU_DECLARE(void *) apr_rmm_addr_get(apr_rmm_t *rmm, apr_rmm_off_t entity);
+
+/**
+ * Compute the offset of a relocatable allocation of memory
+ * @param rmm The relocatable memory block
+ * @param entity The physical address to convert to an offset
+ */
+APU_DECLARE(apr_rmm_off_t) apr_rmm_offset_get(apr_rmm_t *rmm, void *entity);
+
+/**
+ * Compute the required overallocation of memory needed to fit n allocs
+ * @param n The number of alloc/calloc regions desired
+ */
+APU_DECLARE(apr_size_t) apr_rmm_overhead_get(int n);
+
+#ifdef __cplusplus
+}
+#endif
+/** @} */
+#endif  /* ! APR_RMM_H */
+

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sdbm.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sdbm.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sdbm.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,176 @@
+/* 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.
+ */
+
+/*
+ * sdbm - ndbm work-alike hashed database library
+ * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
+ * author: oz at nexus.yorku.ca
+ * status: ex-public domain
+ */
+
+#ifndef APR_SDBM_H
+#define APR_SDBM_H
+
+#include "apu.h"
+#include "apr_errno.h"
+#include "apr_file_io.h"   /* for apr_fileperms_t */
+
+/** 
+ * @file apr_sdbm.h
+ * @brief apr-util SDBM library
+ */
+/**
+ * @defgroup APR_Util_DBM_SDBM SDBM library
+ * @ingroup APR_Util_DBM
+ * @{
+ */
+
+/**
+ * Structure for referencing an sdbm
+ */
+typedef struct apr_sdbm_t apr_sdbm_t;
+
+/**
+ * Structure for referencing the datum record within an sdbm
+ */
+typedef struct {
+    /** pointer to the data stored/retrieved */
+    char *dptr;
+    /** size of data */
+    /* apr_ssize_t for release 2.0??? */
+    int dsize;
+} apr_sdbm_datum_t;
+
+/* The extensions used for the database files */
+/** SDBM Directory file extension */
+#define APR_SDBM_DIRFEXT	".dir"
+/** SDBM page file extension */
+#define APR_SDBM_PAGFEXT	".pag"
+
+/* flags to sdbm_store */
+#define APR_SDBM_INSERT     0   /**< Insert */
+#define APR_SDBM_REPLACE    1   /**< Replace */
+#define APR_SDBM_INSERTDUP  2   /**< Insert with duplicates */
+
+/**
+ * Open an sdbm database by file name
+ * @param db The newly opened database
+ * @param name The sdbm file to open
+ * @param mode The flag values (APR_READ and APR_BINARY flags are implicit)
+ * <PRE>
+ *           APR_WRITE          open for read-write access
+ *           APR_CREATE         create the sdbm if it does not exist
+ *           APR_TRUNCATE       empty the contents of the sdbm
+ *           APR_EXCL           fail for APR_CREATE if the file exists
+ *           APR_DELONCLOSE     delete the sdbm when closed
+ *           APR_SHARELOCK      support locking across process/machines
+ * </PRE>
+ * @param perms Permissions to apply to if created
+ * @param p The pool to use when creating the sdbm
+ * @remark The sdbm name is not a true file name, as sdbm appends suffixes 
+ * for seperate data and index files.
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_open(apr_sdbm_t **db, const char *name, 
+                                        apr_int32_t mode, 
+                                        apr_fileperms_t perms, apr_pool_t *p);
+
+/**
+ * Close an sdbm file previously opened by apr_sdbm_open
+ * @param db The database to close
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_close(apr_sdbm_t *db);
+
+/**
+ * Lock an sdbm database for concurency of multiple operations
+ * @param db The database to lock
+ * @param type The lock type
+ * <PRE>
+ *           APR_FLOCK_SHARED
+ *           APR_FLOCK_EXCLUSIVE
+ * </PRE>
+ * @remark Calls to apr_sdbm_lock may be nested.  All apr_sdbm functions
+ * perform implicit locking.  Since an APR_FLOCK_SHARED lock cannot be 
+ * portably promoted to an APR_FLOCK_EXCLUSIVE lock, apr_sdbm_store and 
+ * apr_sdbm_delete calls will fail if an APR_FLOCK_SHARED lock is held.
+ * The apr_sdbm_lock call requires the database to be opened with the
+ * APR_SHARELOCK mode value.
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_lock(apr_sdbm_t *db, int type);
+
+/**
+ * Release an sdbm lock previously aquired by apr_sdbm_lock
+ * @param db The database to unlock
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_unlock(apr_sdbm_t *db);
+
+/**
+ * Fetch an sdbm record value by key
+ * @param db The database 
+ * @param value The value datum retrieved for this record
+ * @param key The key datum to find this record
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_fetch(apr_sdbm_t *db, 
+                                         apr_sdbm_datum_t *value, 
+                                         apr_sdbm_datum_t key);
+
+/**
+ * Store an sdbm record value by key
+ * @param db The database 
+ * @param key The key datum to store this record by
+ * @param value The value datum to store in this record
+ * @param opt The method used to store the record
+ * <PRE>
+ *           APR_SDBM_INSERT     return an error if the record exists
+ *           APR_SDBM_REPLACE    overwrite any existing record for key
+ * </PRE>
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_store(apr_sdbm_t *db, apr_sdbm_datum_t key,
+                                         apr_sdbm_datum_t value, int opt);
+
+/**
+ * Delete an sdbm record value by key
+ * @param db The database 
+ * @param key The key datum of the record to delete
+ * @remark It is not an error to delete a non-existent record.
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_delete(apr_sdbm_t *db, 
+                                          const apr_sdbm_datum_t key);
+
+/**
+ * Retrieve the first record key from a dbm
+ * @param db The database 
+ * @param key The key datum of the first record
+ * @remark The keys returned are not ordered.  To traverse the list of keys
+ * for an sdbm opened with APR_SHARELOCK, the caller must use apr_sdbm_lock
+ * prior to retrieving the first record, and hold the lock until after the
+ * last call to apr_sdbm_nextkey.
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_firstkey(apr_sdbm_t *db, apr_sdbm_datum_t *key);
+
+/**
+ * Retrieve the next record key from an sdbm
+ * @param db The database 
+ * @param key The key datum of the next record
+ */
+APU_DECLARE(apr_status_t) apr_sdbm_nextkey(apr_sdbm_t *db, apr_sdbm_datum_t *key);
+
+/**
+ * Returns true if the sdbm database opened for read-only access
+ * @param db The database to test
+ */
+APU_DECLARE(int) apr_sdbm_rdonly(apr_sdbm_t *db);
+/** @} */
+#endif /* APR_SDBM_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sha1.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sha1.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_sha1.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,121 @@
+/* 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.
+ */
+/* NIST Secure Hash Algorithm
+ * 	heavily modified by Uwe Hollerbach uh at alumni.caltech edu
+ * 	from Peter C. Gutmann's implementation as found in
+ * 	Applied Cryptography by Bruce Schneier
+ * 	This code is hereby placed in the public domain
+ */
+
+#ifndef APR_SHA1_H
+#define APR_SHA1_H
+
+#include "apu.h"
+#include "apr_general.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file apr_sha1.h
+ * @brief APR-UTIL SHA1 library
+ */
+
+/** size of the SHA1 DIGEST */
+#define APR_SHA1_DIGESTSIZE 20
+
+/**
+ * Define the Magic String prefix that identifies a password as being
+ * hashed using our algorithm.
+ */
+#define APR_SHA1PW_ID "{SHA}"
+
+/** length of the SHA Password */
+#define APR_SHA1PW_IDLEN 5
+
+/** @see apr_sha1_ctx_t */
+typedef struct apr_sha1_ctx_t apr_sha1_ctx_t;
+
+/** 
+ * SHA1 context structure
+ */
+struct apr_sha1_ctx_t {
+    /** message digest */
+    apr_uint32_t digest[5];
+    /** 64-bit bit counts */
+    apr_uint32_t count_lo, count_hi;
+    /** SHA data buffer */
+    apr_uint32_t data[16];
+    /** unprocessed amount in data */
+    int local;
+};
+
+/**
+ * Provide a means to SHA1 crypt/encode a plaintext password in a way which
+ * makes password file compatible with those commonly use in netscape web
+ * and ldap installations.
+ * @param clear The plaintext password
+ * @param len The length of the plaintext password
+ * @param out The encrypted/encoded password
+ * @note SHA1 support is useful for migration purposes, but is less
+ *     secure than Apache's password format, since Apache's (MD5)
+ *     password format uses a random eight character salt to generate
+ *     one of many possible hashes for the same password.  Netscape
+ *     uses plain SHA1 without a salt, so the same password
+ *     will always generate the same hash, making it easier
+ *     to break since the search space is smaller.
+ */
+APU_DECLARE(void) apr_sha1_base64(const char *clear, int len, char *out);
+
+/**
+ * Initialize the SHA digest
+ * @param context The SHA context to initialize
+ */
+APU_DECLARE(void) apr_sha1_init(apr_sha1_ctx_t *context);
+
+/**
+ * Update the SHA digest
+ * @param context The SHA1 context to update
+ * @param input The buffer to add to the SHA digest
+ * @param inputLen The length of the input buffer
+ */
+APU_DECLARE(void) apr_sha1_update(apr_sha1_ctx_t *context, const char *input,
+                                unsigned int inputLen);
+
+/**
+ * Update the SHA digest with binary data
+ * @param context The SHA1 context to update
+ * @param input The buffer to add to the SHA digest
+ * @param inputLen The length of the input buffer
+ */
+APU_DECLARE(void) apr_sha1_update_binary(apr_sha1_ctx_t *context,
+                                       const unsigned char *input,
+                                       unsigned int inputLen);
+
+/**
+ * Finish computing the SHA digest
+ * @param digest the output buffer in which to store the digest
+ * @param context The context to finalize
+ */
+APU_DECLARE(void) apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE],
+                               apr_sha1_ctx_t *context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* APR_SHA1_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_shm.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_shm.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_shm.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,146 @@
+/* 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.
+ */
+
+#ifndef APR_SHM_H
+#define APR_SHM_H
+
+/**
+ * @file apr_shm.h
+ * @brief APR Shared Memory Routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_shm Shared Memory Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * Private, platform-specific data struture representing a shared memory
+ * segment.
+ */
+typedef struct apr_shm_t apr_shm_t;
+
+/**
+ * Create and make accessable a shared memory segment.
+ * @param m The shared memory structure to create.
+ * @param reqsize The desired size of the segment.
+ * @param filename The file to use for shared memory on platforms that
+ *        require it.
+ * @param pool the pool from which to allocate the shared memory
+ *        structure.
+ * @remark A note about Anonymous vs. Named shared memory segments:
+ *         Not all plaforms support anonymous shared memory segments, but in
+ *         some cases it is prefered over other types of shared memory
+ *         implementations. Passing a NULL 'file' parameter to this function
+ *         will cause the subsystem to use anonymous shared memory segments.
+ *         If such a system is not available, APR_ENOTIMPL is returned.
+ * @remark A note about allocation sizes:
+ *         On some platforms it is necessary to store some metainformation
+ *         about the segment within the actual segment. In order to supply
+ *         the caller with the requested size it may be necessary for the
+ *         implementation to request a slightly greater segment length
+ *         from the subsystem. In all cases, the apr_shm_baseaddr_get()
+ *         function will return the first usable byte of memory.
+ * 
+ */
+APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m,
+                                         apr_size_t reqsize,
+                                         const char *filename,
+                                         apr_pool_t *pool);
+
+/**
+ * Remove named resource associated with a shared memory segment,
+ * preventing attachments to the resource, but not destroying it.
+ * @param filename The filename associated with shared-memory segment which
+ *        needs to be removed
+ * @param pool The pool used for file operations
+ * @remark This function is only supported on platforms which support
+ * name-based shared memory segments, and will return APR_ENOTIMPL on
+ * platforms without such support.  Removing the file while the shm
+ * is in use is not entirely portable, caller may use this to enhance
+ * obscurity of the resource, but be prepared for the the call to fail,
+ * and for concurrent attempts to create a resource of the same name
+ * to also fail.  The pool cleanup of apr_shm_create (apr_shm_destroy)
+ * also removes the named resource.
+ */
+APR_DECLARE(apr_status_t) apr_shm_remove(const char *filename,
+                                         apr_pool_t *pool);
+
+/**
+ * Destroy a shared memory segment and associated memory.
+ * @param m The shared memory segment structure to destroy.
+ */
+APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shm_t *m);
+
+/**
+ * Attach to a shared memory segment that was created
+ * by another process.
+ * @param m The shared memory structure to create.
+ * @param filename The file used to create the original segment.
+ *        (This MUST match the original filename.)
+ * @param pool the pool from which to allocate the shared memory
+ *        structure for this process.
+ */
+APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m,
+                                         const char *filename,
+                                         apr_pool_t *pool);
+
+/**
+ * Detach from a shared memory segment without destroying it.
+ * @param m The shared memory structure representing the segment
+ *        to detach from.
+ */
+APR_DECLARE(apr_status_t) apr_shm_detach(apr_shm_t *m);
+
+/**
+ * Retrieve the base address of the shared memory segment.
+ * NOTE: This address is only usable within the callers address
+ * space, since this API does not guarantee that other attaching
+ * processes will maintain the same address mapping.
+ * @param m The shared memory segment from which to retrieve
+ *        the base address.
+ * @return address, aligned by APR_ALIGN_DEFAULT.
+ */
+APR_DECLARE(void *) apr_shm_baseaddr_get(const apr_shm_t *m);
+
+/**
+ * Retrieve the length of a shared memory segment in bytes.
+ * @param m The shared memory segment from which to retrieve
+ *        the segment length.
+ */
+APR_DECLARE(apr_size_t) apr_shm_size_get(const apr_shm_t *m);
+
+/**
+ * Get the pool used by this shared memory segment.
+ */
+APR_POOL_DECLARE_ACCESSOR(shm);
+
+/** @} */ 
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* APR_SHM_T */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_signal.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_signal.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_signal.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,109 @@
+/* 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.
+ */
+
+#ifndef APR_SIGNAL_H
+#define APR_SIGNAL_H
+
+/**
+ * @file apr_signal.h
+ * @brief APR Signal Handling
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+
+#if APR_HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_signal Signal Handling
+ * @ingroup APR
+ * @{
+ */
+
+#if APR_HAVE_SIGACTION || defined(DOXYGEN)
+
+#if defined(DARWIN) && !defined(__cplusplus) && !defined(_ANSI_SOURCE)
+/* work around Darwin header file bugs
+ *   http://www.opensource.apple.com/bugs/X/BSD%20Kernel/2657228.html
+ */
+#undef SIG_DFL
+#undef SIG_IGN
+#undef SIG_ERR
+#define SIG_DFL (void (*)(int))0
+#define SIG_IGN (void (*)(int))1
+#define SIG_ERR (void (*)(int))-1
+#endif
+
+/** Function prototype for signal handlers */
+typedef void apr_sigfunc_t(int);
+
+/**
+ * Set the signal handler function for a given signal
+ * @param signo The signal (eg... SIGWINCH)
+ * @param func the function to get called
+ */
+APR_DECLARE(apr_sigfunc_t *) apr_signal(int signo, apr_sigfunc_t * func);
+
+#if defined(SIG_IGN) && !defined(SIG_ERR)
+#define SIG_ERR ((apr_sigfunc_t *) -1)
+#endif
+
+#else /* !APR_HAVE_SIGACTION */
+#define apr_signal(a, b) signal(a, b)
+#endif
+
+
+/**
+ * Get the description for a specific signal number
+ * @param signum The signal number
+ * @return The description of the signal
+ */
+APR_DECLARE(const char *) apr_signal_description_get(int signum);
+
+/**
+ * APR-private function for initializing the signal package
+ * @internal
+ * @param pglobal The internal, global pool
+ */
+void apr_signal_init(apr_pool_t *pglobal);
+
+/**
+ * Block the delivery of a particular signal
+ * @param signum The signal number
+ * @return status
+ */
+APR_DECLARE(apr_status_t) apr_signal_block(int signum);
+
+/**
+ * Enable the delivery of a particular signal
+ * @param signum The signal number
+ * @return status
+ */
+APR_DECLARE(apr_status_t) apr_signal_unblock(int signum);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* APR_SIGNAL_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strings.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strings.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strings.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,374 @@
+/* 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.
+ */
+
+/* Portions of this file are covered by */
+/* -*- mode: c; c-file-style: "k&r" -*-
+
+  strnatcmp.c -- Perform 'natural order' comparisons of strings in C.
+  Copyright (C) 2000 by Martin Pool <mbp at humbug.org.au>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef APR_STRINGS_H
+#define APR_STRINGS_H
+
+/**
+ * @file apr_strings.h
+ * @brief APR Strings library
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+#include "apr_pools.h"
+#define APR_WANT_IOVEC
+#include "apr_want.h"
+
+#if APR_HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_strings String routines
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * Do a natural order comparison of two strings.
+ * @param a The first string to compare
+ * @param b The second string to compare
+ * @return Either <0, 0, or >0.  If the first string is less than the second
+ *          this returns <0, if they are equivalent it returns 0, and if the
+ *          first string is greater than second string it retuns >0.
+ */
+APR_DECLARE(int) apr_strnatcmp(char const *a, char const *b);
+
+/**
+ * Do a natural order comparison of two strings ignoring the case of the 
+ * strings.
+ * @param a The first string to compare
+ * @param b The second string to compare
+ * @return Either <0, 0, or >0.  If the first string is less than the second
+ *         this returns <0, if they are equivalent it returns 0, and if the
+ *         first string is greater than second string it retuns >0.
+ */
+APR_DECLARE(int) apr_strnatcasecmp(char const *a, char const *b);
+
+/**
+ * duplicate a string into memory allocated out of a pool
+ * @param p The pool to allocate out of
+ * @param s The string to duplicate
+ * @return The new string
+ */
+APR_DECLARE(char *) apr_pstrdup(apr_pool_t *p, const char *s);
+
+/**
+ * Create a null-terminated string by making a copy of a sequence
+ * of characters and appending a null byte
+ * @param p The pool to allocate out of
+ * @param s The block of characters to duplicate
+ * @param n The number of characters to duplicate
+ * @return The new string
+ * @remark This is a faster alternative to apr_pstrndup, for use
+ *         when you know that the string being duplicated really
+ *         has 'n' or more characters.  If the string might contain
+ *         fewer characters, use apr_pstrndup.
+ */
+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 
+ * out of a pool; the new string will be NUL-terminated
+ * @param p The pool to allocate out of
+ * @param s The string to duplicate
+ * @param n The maximum number of characters to duplicate
+ * @return The new string
+ * @remark The amount of memory allocated from the pool is the length
+ *         of the returned string including the NUL terminator
+ */
+APR_DECLARE(char *) apr_pstrndup(apr_pool_t *p, const char *s, apr_size_t n);
+
+/**
+ * Duplicate a block of memory.
+ *
+ * @param p The pool to allocate from
+ * @param m The memory to duplicate
+ * @param n The number of bytes to duplicate
+ * @return The new block of memory
+ */
+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
+ * @param p The pool to allocate out of
+ * @param ... The strings to concatenate.  The final string must be NULL
+ * @return The new string
+ */
+APR_DECLARE_NONSTD(char *) apr_pstrcat(apr_pool_t *p, ...)
+#if defined(__GNUC__) && __GNUC__ >= 4
+    __attribute__((sentinel))
+#endif
+    ;
+
+/**
+ * Concatenate multiple strings specified in a writev-style vector
+ * @param p The pool from which to allocate
+ * @param vec The strings to concatenate
+ * @param nvec The number of strings to concatenate
+ * @param nbytes (output) strlen of new string (pass in NULL to omit)
+ * @return The new string
+ */
+APR_DECLARE(char *) apr_pstrcatv(apr_pool_t *p, const struct iovec *vec,
+                                 apr_size_t nvec, apr_size_t *nbytes);
+
+/**
+ * printf-style style printing routine.  The data is output to a string 
+ * allocated from a pool
+ * @param p The pool to allocate out of
+ * @param fmt The format of the string
+ * @param ap The arguments to use while printing the data
+ * @return The new string
+ */
+APR_DECLARE(char *) apr_pvsprintf(apr_pool_t *p, const char *fmt, va_list ap);
+
+/**
+ * printf-style style printing routine.  The data is output to a string 
+ * allocated from a pool
+ * @param p The pool to allocate out of
+ * @param fmt The format of the string
+ * @param ... The arguments to use while printing the data
+ * @return The new string
+ */
+APR_DECLARE_NONSTD(char *) apr_psprintf(apr_pool_t *p, const char *fmt, ...)
+        __attribute__((format(printf,2,3)));
+
+/**
+ * Copy up to dst_size characters from src to dst; does not copy
+ * past a NUL terminator in src, but always terminates dst with a NUL
+ * regardless.
+ * @param dst The destination string
+ * @param src The source string
+ * @param dst_size The space available in dst; dst always receives
+ *                 NUL termination, so if src is longer than
+ *                 dst_size, the actual number of characters copied is
+ *                 dst_size - 1.
+ * @return Pointer to the NUL terminator of the destination string, dst
+ * @remark
+ * <PRE>
+ * Note the differences between this function and strncpy():
+ *  1) strncpy() doesn't always NUL terminate; apr_cpystrn() does.
+ *  2) strncpy() pads the destination string with NULs, which is often 
+ *     unnecessary; apr_cpystrn() does not.
+ *  3) strncpy() returns a pointer to the beginning of the dst string;
+ *     apr_cpystrn() returns a pointer to the NUL terminator of dst, 
+ *     to allow a check for truncation.
+ * </PRE>
+ */
+APR_DECLARE(char *) apr_cpystrn(char *dst, const char *src,
+                                apr_size_t dst_size);
+
+/**
+ * Remove all whitespace from a string
+ * @param dest The destination string.  It is okay to modify the string
+ *             in place.  Namely dest == src
+ * @param src The string to rid the spaces from.
+ * @return A pointer to the destination string's null terminator.
+ */
+APR_DECLARE(char *) apr_collapse_spaces(char *dest, const char *src);
+
+/**
+ * Convert the arguments to a program from one string to an array of 
+ * strings terminated by a NULL pointer
+ * @param arg_str The arguments to convert
+ * @param argv_out Output location.  This is a pointer to an array of strings.
+ * @param token_context Pool to use.
+ */
+APR_DECLARE(apr_status_t) apr_tokenize_to_argv(const char *arg_str,
+                                               char ***argv_out,
+                                               apr_pool_t *token_context);
+
+/**
+ * Split a string into separate null-terminated tokens.  The tokens are 
+ * delimited in the string by one or more characters from the sep
+ * argument.
+ * @param str The string to separate; this should be specified on the
+ *            first call to apr_strtok() for a given string, and NULL
+ *            on subsequent calls.
+ * @param sep The set of delimiters
+ * @param last Internal state saved by apr_strtok() between calls.
+ * @return The next token from the string
+ */
+APR_DECLARE(char *) apr_strtok(char *str, const char *sep, char **last);
+
+/**
+ * @defgroup APR_Strings_Snprintf snprintf implementations
+ * @warning
+ * These are snprintf implementations based on apr_vformatter().
+ *
+ * Note that various standards and implementations disagree on the return
+ * value of snprintf, and side-effects due to %n in the formatting string.
+ * apr_snprintf (and apr_vsnprintf) behaves as follows:
+ *
+ * Process the format string until the entire string is exhausted, or
+ * the buffer fills.  If the buffer fills then stop processing immediately
+ * (so no further %n arguments are processed), and return the buffer
+ * length.  In all cases the buffer is NUL terminated. It will return the
+ * number of characters inserted into the buffer, not including the
+ * terminating NUL. As a special case, if len is 0, apr_snprintf will
+ * return the number of characters that would have been inserted if
+ * the buffer had been infinite (in this case, *buffer can be NULL)
+ *
+ * In no event does apr_snprintf return a negative number.
+ * @{
+ */
+
+/**
+ * snprintf routine based on apr_vformatter.  This means it understands the
+ * same extensions.
+ * @param buf The buffer to write to
+ * @param len The size of the buffer
+ * @param format The format string
+ * @param ... The arguments to use to fill out the format string.
+ */
+APR_DECLARE_NONSTD(int) apr_snprintf(char *buf, apr_size_t len,
+                                     const char *format, ...)
+        __attribute__((format(printf,3,4)));
+
+/**
+ * vsnprintf routine based on apr_vformatter.  This means it understands the
+ * same extensions.
+ * @param buf The buffer to write to
+ * @param len The size of the buffer
+ * @param format The format string
+ * @param ap The arguments to use to fill out the format string.
+ */
+APR_DECLARE(int) apr_vsnprintf(char *buf, apr_size_t len, const char *format,
+                               va_list ap);
+/** @} */
+
+/**
+ * create a string representation of an int, allocated from a pool
+ * @param p The pool from which to allocate
+ * @param n The number to format
+ * @return The string representation of the number
+ */
+APR_DECLARE(char *) apr_itoa(apr_pool_t *p, int n);
+
+/**
+ * create a string representation of a long, allocated from a pool
+ * @param p The pool from which to allocate
+ * @param n The number to format
+ * @return The string representation of the number
+ */
+APR_DECLARE(char *) apr_ltoa(apr_pool_t *p, long n);
+
+/**
+ * create a string representation of an apr_off_t, allocated from a pool
+ * @param p The pool from which to allocate
+ * @param n The number to format
+ * @return The string representation of the number
+ */
+APR_DECLARE(char *) apr_off_t_toa(apr_pool_t *p, apr_off_t n);
+
+/**
+ * Convert a numeric string into an apr_off_t numeric value.
+ * @param offset The value of the parsed string.
+ * @param buf The string to parse. It may contain optional whitespace,
+ *   followed by an optional '+' (positive, default) or '-' (negative)
+ *   character, followed by an optional '0x' prefix if base is 0 or 16,
+ *   followed by numeric digits appropriate for base.
+ * @param end A pointer to the end of the valid character in buf. If
+ *   not NULL, it is set to the first invalid character in buf.
+ * @param base A numeric base in the range between 2 and 36 inclusive,
+ *   or 0.  If base is zero, buf will be treated as base ten unless its
+ *   digits are prefixed with '0x', in which case it will be treated as
+ *   base 16.
+ * @bug *end breaks type safety; where *buf is const, *end needs to be
+ * declared as const in APR 2.0
+ */
+APR_DECLARE(apr_status_t) apr_strtoff(apr_off_t *offset, const char *buf, 
+                                      char **end, int base);
+
+/**
+ * parse a numeric string into a 64-bit numeric value
+ * @param buf The string to parse. It may contain optional whitespace,
+ *   followed by an optional '+' (positive, default) or '-' (negative)
+ *   character, followed by an optional '0x' prefix if base is 0 or 16,
+ *   followed by numeric digits appropriate for base.
+ * @param end A pointer to the end of the valid character in buf. If
+ *   not NULL, it is set to the first invalid character in buf.
+ * @param base A numeric base in the range between 2 and 36 inclusive,
+ *   or 0.  If base is zero, buf will be treated as base ten unless its
+ *   digits are prefixed with '0x', in which case it will be treated as
+ *   base 16.
+ * @return The numeric value of the string.  On overflow, errno is set
+ * to ERANGE.  On success, errno is set to 0.
+ */
+APR_DECLARE(apr_int64_t) apr_strtoi64(const char *buf, char **end, int base);
+
+/**
+ * parse a base-10 numeric string into a 64-bit numeric value.
+ * Equivalent to apr_strtoi64(buf, (char**)NULL, 10).
+ * @param buf The string to parse
+ * @return The numeric value of the string.  On overflow, errno is set
+ * to ERANGE.  On success, errno is set to 0.
+ */
+APR_DECLARE(apr_int64_t) apr_atoi64(const char *buf);
+
+/**
+ * Format a binary size (magnitiudes are 2^10 rather than 10^3) from an apr_off_t,
+ * as bytes, K, M, T, etc, to a four character compacted human readable string.
+ * @param size The size to format
+ * @param buf The 5 byte text buffer (counting the trailing null)
+ * @return The buf passed to apr_strfsize()
+ * @remark All negative sizes report '  - ', apr_strfsize only formats positive values.
+ */
+APR_DECLARE(char *) apr_strfsize(apr_off_t size, char *buf);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* !APR_STRINGS_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strmatch.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strmatch.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_strmatch.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,81 @@
+/* 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.
+ */
+
+#ifndef APR_STRMATCH_H
+#define APR_STRMATCH_H
+/**
+ * @file apr_strmatch.h
+ * @brief APR-UTIL string matching routines
+ */
+
+#include "apu.h"
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup APR_Util_StrMatch String matching routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+/** @see apr_strmatch_pattern */
+typedef struct apr_strmatch_pattern apr_strmatch_pattern;
+
+/**
+ * Precompiled search pattern
+ */
+struct apr_strmatch_pattern {
+    /** Function called to compare */
+    const char *(*compare)(const apr_strmatch_pattern *this_pattern,
+                           const char *s, apr_size_t slen);
+    const char *pattern;    /**< Current pattern */
+    apr_size_t length;      /**< Current length */
+    void *context;          /**< hook to add precomputed metadata */
+};
+
+#if defined(DOXYGEN)
+/**
+ * Search for a precompiled pattern within a string
+ * @param pattern The pattern
+ * @param s The string in which to search for the pattern
+ * @param slen The length of s (excluding null terminator)
+ * @return A pointer to the first instance of the pattern in s, or
+ *         NULL if not found
+ */
+APU_DECLARE(const char *) apr_strmatch(const apr_strmatch_pattern *pattern,
+                                       const char *s, apr_size_t slen);
+#else
+#define apr_strmatch(pattern, s, slen) (*((pattern)->compare))((pattern), (s), (slen))
+#endif
+
+/**
+ * Precompile a pattern for matching using the Boyer-Moore-Horspool algorithm
+ * @param p The pool from which to allocate the pattern
+ * @param s The pattern string
+ * @param case_sensitive Whether the matching should be case-sensitive
+ * @return a pointer to the compiled pattern, or NULL if compilation fails
+ */
+APU_DECLARE(const apr_strmatch_pattern *) apr_strmatch_precompile(apr_pool_t *p, const char *s, int case_sensitive);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* !APR_STRMATCH_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_support.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_support.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_support.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,57 @@
+/* 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.
+ */
+
+#ifndef APR_SUPPORT_H
+#define APR_SUPPORT_H
+
+/**
+ * @file apr_support.h
+ * @brief APR Support functions
+ */
+
+#include "apr.h"
+#include "apr_network_io.h"
+#include "apr_file_io.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_support Internal APR support functions
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * Wait for IO to occur or timeout.
+ *
+ * @param f The file to wait on.
+ * @param s The socket to wait on if @a f is @c NULL.
+ * @param for_read If non-zero wait for data to be available to read,
+ *        otherwise wait for data to be able to be written. 
+ * @return APR_TIMEUP if we run out of time.
+ */
+apr_status_t apr_wait_for_io_or_timeout(apr_file_t *f, apr_socket_t *s,
+                                        int for_read);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_SUPPORT_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_tables.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_tables.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_tables.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,487 @@
+/* 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.
+ */
+
+#ifndef APR_TABLES_H
+#define APR_TABLES_H
+
+/**
+ * @file apr_tables.h
+ * @brief APR Table library
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+
+#if APR_HAVE_STDARG_H
+#include <stdarg.h>     /* for va_list */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_tables Table and Array Functions
+ * @ingroup APR 
+ * Arrays are used to store data which is referenced sequentially or
+ * as a stack.  Functions are provided to push and pop individual
+ * elements as well as to operate on the entire array.
+ *
+ * Tables are used to store data which can be referenced by key.
+ * Limited capabilities are provided for tables with multiple elements
+ * which share a key; while key lookup will return only a single
+ * element, iteration is available.  Additionally, a table can be
+ * compressed to resolve duplicates.
+ *
+ * Both arrays and tables may store string or binary data; some features,
+ * such as concatenation or merging of elements, work only for string
+ * data.
+ * @{
+ */
+
+/** the table abstract data type */
+typedef struct apr_table_t apr_table_t;
+
+/** @see apr_array_header_t */
+typedef struct apr_array_header_t apr_array_header_t;
+
+/** An opaque array type */
+struct apr_array_header_t {
+    /** The pool the array is allocated out of */
+    apr_pool_t *pool;
+    /** The amount of memory allocated for each element of the array */
+    int elt_size;
+    /** The number of active elements in the array */
+    int nelts;
+    /** The number of elements allocated in the array */
+    int nalloc;
+    /** The elements in the array */
+    char *elts;
+};
+
+/**
+ * The (opaque) structure for string-content tables.
+ */
+typedef struct apr_table_entry_t apr_table_entry_t;
+
+/** The type for each entry in a string-content table */
+struct apr_table_entry_t {
+    /** The key for the current table entry */
+    char *key;          /* maybe NULL in future;
+                         * check when iterating thru table_elts
+                         */
+    /** The value for the current table entry */
+    char *val;
+
+    /** A checksum for the key, for use by the apr_table internals */
+    apr_uint32_t key_checksum;
+};
+
+/**
+ * Get the elements from a table.
+ * @param t The table
+ * @return An array containing the contents of the table
+ */
+APR_DECLARE(const apr_array_header_t *) apr_table_elts(const apr_table_t *t);
+
+/**
+ * Determine if the table is empty (either NULL or having no elements).
+ * @param t The table to check
+ * @return True if empty, False otherwise
+ */
+APR_DECLARE(int) apr_is_empty_table(const apr_table_t *t);
+
+/**
+ * Determine if the array is empty (either NULL or having no elements).
+ * @param a The array to check
+ * @return True if empty, False otherwise
+ */
+APR_DECLARE(int) apr_is_empty_array(const apr_array_header_t *a);
+
+/**
+ * Create an array.
+ * @param p The pool to allocate the memory out of
+ * @param nelts the number of elements in the initial array
+ * @param elt_size The size of each element in the array.
+ * @return The new array
+ */
+APR_DECLARE(apr_array_header_t *) apr_array_make(apr_pool_t *p,
+                                                 int nelts, int elt_size);
+
+/**
+ * Add a new element to an array (as a first-in, last-out stack).
+ * @param arr The array to add an element to.
+ * @return Location for the new element in the array.
+ * @remark If there are no free spots in the array, then this function will
+ *         allocate new space for the new element.
+ */
+APR_DECLARE(void *) apr_array_push(apr_array_header_t *arr);
+
+/** A helper macro for accessing a member of an APR array.
+ *
+ * @param ary the array
+ * @param i the index into the array to return
+ * @param type the type of the objects stored in the array
+ *
+ * @return the item at index i
+ */
+#define APR_ARRAY_IDX(ary,i,type) (((type *)(ary)->elts)[i])
+
+/** A helper macro for pushing elements into an APR array.
+ *
+ * @param ary the array
+ * @param type the type of the objects stored in the array
+ *
+ * @return the location where the new object should be placed
+ */
+#define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
+
+/**
+ * Remove an element from an array (as a first-in, last-out stack).
+ * @param arr The array to remove an element from.
+ * @return Location of the element in the array.
+ * @remark If there are no elements in the array, NULL is returned.
+ */
+APR_DECLARE(void *) apr_array_pop(apr_array_header_t *arr);
+
+/**
+ * Remove all elements from an array.
+ * @param arr The array to remove all elements from.
+ * @remark As the underlying storage is allocated from a pool, no
+ * memory is freed by this operation, but is available for reuse.
+ */
+APR_DECLARE(void) apr_array_clear(apr_array_header_t *arr);
+
+/**
+ * Concatenate two arrays together.
+ * @param dst The destination array, and the one to go first in the combined 
+ *            array
+ * @param src The source array to add to the destination array
+ */
+APR_DECLARE(void) apr_array_cat(apr_array_header_t *dst,
+			        const apr_array_header_t *src);
+
+/**
+ * Copy the entire array.
+ * @param p The pool to allocate the copy of the array out of
+ * @param arr The array to copy
+ * @return An exact copy of the array passed in
+ * @remark The alternate apr_array_copy_hdr copies only the header, and arranges 
+ *         for the elements to be copied if (and only if) the code subsequently
+ *         does a push or arraycat.
+ */
+APR_DECLARE(apr_array_header_t *) apr_array_copy(apr_pool_t *p,
+                                      const apr_array_header_t *arr);
+/**
+ * Copy the headers of the array, and arrange for the elements to be copied if
+ * and only if the code subsequently does a push or arraycat.
+ * @param p The pool to allocate the copy of the array out of
+ * @param arr The array to copy
+ * @return An exact copy of the array passed in
+ * @remark The alternate apr_array_copy copies the *entire* array.
+ */
+APR_DECLARE(apr_array_header_t *) apr_array_copy_hdr(apr_pool_t *p,
+                                      const apr_array_header_t *arr);
+
+/**
+ * Append one array to the end of another, creating a new array in the process.
+ * @param p The pool to allocate the new array out of
+ * @param first The array to put first in the new array.
+ * @param second The array to put second in the new array.
+ * @return A new array containing the data from the two arrays passed in.
+*/
+APR_DECLARE(apr_array_header_t *) apr_array_append(apr_pool_t *p,
+                                      const apr_array_header_t *first,
+                                      const apr_array_header_t *second);
+
+/**
+ * Generate a new string from the apr_pool_t containing the concatenated 
+ * sequence of substrings referenced as elements within the array.  The string 
+ * will be empty if all substrings are empty or null, or if there are no 
+ * elements in the array.  If sep is non-NUL, it will be inserted between 
+ * elements as a separator.
+ * @param p The pool to allocate the string out of
+ * @param arr The array to generate the string from
+ * @param sep The separator to use
+ * @return A string containing all of the data in the array.
+ */
+APR_DECLARE(char *) apr_array_pstrcat(apr_pool_t *p,
+				      const apr_array_header_t *arr,
+				      const char sep);
+
+/**
+ * Make a new table.
+ * @param p The pool to allocate the pool out of
+ * @param nelts The number of elements in the initial table.
+ * @return The new table.
+ * @warning This table can only store text data
+ */
+APR_DECLARE(apr_table_t *) apr_table_make(apr_pool_t *p, int nelts);
+
+/**
+ * Create a new table and copy another table into it.
+ * @param p The pool to allocate the new table out of
+ * @param t The table to copy
+ * @return A copy of the table passed in
+ * @warning The table keys and respective values are not copied
+ */
+APR_DECLARE(apr_table_t *) apr_table_copy(apr_pool_t *p,
+                                          const apr_table_t *t);
+
+/**
+ * Create a new table whose contents are deep copied from the given
+ * table. A deep copy operation copies all fields, and makes copies
+ * of dynamically allocated memory pointed to by the fields.
+ * @param p The pool to allocate the new table out of
+ * @param t The table to clone
+ * @return A deep copy of the table passed in
+ */
+APR_DECLARE(apr_table_t *) apr_table_clone(apr_pool_t *p,
+                                           const apr_table_t *t);
+
+/**
+ * Delete all of the elements from a table.
+ * @param t The table to clear
+ */
+APR_DECLARE(void) apr_table_clear(apr_table_t *t);
+
+/**
+ * Get the value associated with a given key from the table.  After this call,
+ * the data is still in the table.
+ * @param t The table to search for the key
+ * @param key The key to search for (case does not matter)
+ * @return The value associated with the key, or NULL if the key does not exist. 
+ */
+APR_DECLARE(const char *) apr_table_get(const apr_table_t *t, const char *key);
+
+/**
+ * Add a key/value pair to a table.  If another element already exists with the
+ * same key, this will overwrite the old data.
+ * @param t The table to add the data to.
+ * @param key The key to use (case does not matter)
+ * @param val The value to add
+ * @remark When adding data, this function makes a copy of both the key and the
+ *         value.
+ */
+APR_DECLARE(void) apr_table_set(apr_table_t *t, const char *key,
+                                const char *val);
+
+/**
+ * Add a key/value pair to a table.  If another element already exists with the
+ * same key, this will overwrite the old data.
+ * @param t The table to add the data to.
+ * @param key The key to use (case does not matter)
+ * @param val The value to add
+ * @warning When adding data, this function does not make a copy of the key or 
+ *          the value, so care should be taken to ensure that the values will 
+ *          not change after they have been added..
+ */
+APR_DECLARE(void) apr_table_setn(apr_table_t *t, const char *key,
+                                 const char *val);
+
+/**
+ * Remove data from the table.
+ * @param t The table to remove data from
+ * @param key The key of the data being removed (case does not matter)
+ */
+APR_DECLARE(void) apr_table_unset(apr_table_t *t, const char *key);
+
+/**
+ * Add data to a table by merging the value with data that has already been 
+ * stored. The merging is done by concatenating the two values, separated
+ * by the string ", ".
+ * @param t The table to search for the data
+ * @param key The key to merge data for (case does not matter)
+ * @param val The data to add
+ * @remark If the key is not found, then this function acts like apr_table_add
+ */
+APR_DECLARE(void) apr_table_merge(apr_table_t *t, const char *key,
+                                  const char *val);
+
+/**
+ * Add data to a table by merging the value with data that has already been 
+ * stored. The merging is done by concatenating the two values, separated
+ * by the string ", ".
+ * @param t The table to search for the data
+ * @param key The key to merge data for (case does not matter)
+ * @param val The data to add
+ * @remark If the key is not found, then this function acts like apr_table_addn
+ */
+APR_DECLARE(void) apr_table_mergen(apr_table_t *t, const char *key,
+                                   const char *val);
+
+/**
+ * Add data to a table, regardless of whether there is another element with the
+ * same key.
+ * @param t The table to add to
+ * @param key The key to use
+ * @param val The value to add.
+ * @remark When adding data, this function makes a copy of both the key and the
+ *         value.
+ */
+APR_DECLARE(void) apr_table_add(apr_table_t *t, const char *key,
+                                const char *val);
+
+/**
+ * Add data to a table, regardless of whether there is another element with the
+ * same key.
+ * @param t The table to add to
+ * @param key The key to use
+ * @param val The value to add.
+ * @remark When adding data, this function does not make a copy of the key or the
+ *         value, so care should be taken to ensure that the values will not 
+ *         change after they have been added.
+ */
+APR_DECLARE(void) apr_table_addn(apr_table_t *t, const char *key,
+                                 const char *val);
+
+/**
+ * Merge two tables into one new table.
+ * @param p The pool to use for the new table
+ * @param overlay The first table to put in the new table
+ * @param base The table to add at the end of the new table
+ * @return A new table containing all of the data from the two passed in
+ */
+APR_DECLARE(apr_table_t *) apr_table_overlay(apr_pool_t *p,
+                                             const apr_table_t *overlay,
+                                             const apr_table_t *base);
+
+/**
+ * Declaration prototype for the iterator callback function of apr_table_do()
+ * and apr_table_vdo().
+ * @param rec The data passed as the first argument to apr_table_[v]do()
+ * @param key The key from this iteration of the table
+ * @param value The value from this iteration of the table
+ * @remark Iteration continues while this callback function returns non-zero.
+ * To export the callback function for apr_table_[v]do() it must be declared 
+ * in the _NONSTD convention.
+ */
+typedef int (apr_table_do_callback_fn_t)(void *rec, const char *key, 
+                                                    const char *value);
+
+/** 
+ * Iterate over a table running the provided function once for every
+ * element in the table.  The varargs array must be a list of zero or
+ * more (char *) keys followed by a NULL pointer.  If zero keys are
+ * given, the @param comp function will be invoked for every element
+ * in the table.  Otherwise, the function is invoked only for those
+ * elements matching the keys specified.
+ *
+ * If an invocation of the @param comp function returns zero,
+ * iteration will continue using the next specified key, if any.
+ *
+ * @param comp The function to run
+ * @param rec The data to pass as the first argument to the function
+ * @param t The table to iterate over
+ * @param ... A varargs array of zero or more (char *) keys followed by NULL
+ * @return FALSE if one of the comp() iterations returned zero; TRUE if all
+ *            iterations returned non-zero
+ * @see apr_table_do_callback_fn_t
+ */
+APR_DECLARE_NONSTD(int) apr_table_do(apr_table_do_callback_fn_t *comp,
+                                     void *rec, const apr_table_t *t, ...)
+#if defined(__GNUC__) && __GNUC__ >= 4
+    __attribute__((sentinel))
+#endif
+    ;
+
+/** 
+ * Iterate over a table running the provided function once for every
+ * element in the table.  The @param vp varargs parameter must be a
+ * list of zero or more (char *) keys followed by a NULL pointer.  If
+ * zero keys are given, the @param comp function will be invoked for
+ * every element in the table.  Otherwise, the function is invoked
+ * only for those elements matching the keys specified.
+ *
+ * If an invocation of the @param comp function returns zero,
+ * iteration will continue using the next specified key, if any.
+ *
+ * @param comp The function to run
+ * @param rec The data to pass as the first argument to the function
+ * @param t The table to iterate over
+ * @param vp List of zero or more (char *) keys followed by NULL
+ * @return FALSE if one of the comp() iterations returned zero; TRUE if all
+ *            iterations returned non-zero
+ * @see apr_table_do_callback_fn_t
+ */
+APR_DECLARE(int) apr_table_vdo(apr_table_do_callback_fn_t *comp,
+                               void *rec, const apr_table_t *t, va_list vp);
+
+/** flag for overlap to use apr_table_setn */
+#define APR_OVERLAP_TABLES_SET   (0)
+/** flag for overlap to use apr_table_mergen */
+#define APR_OVERLAP_TABLES_MERGE (1)
+/**
+ * For each element in table b, either use setn or mergen to add the data
+ * to table a.  Which method is used is determined by the flags passed in.
+ * @param a The table to add the data to.
+ * @param b The table to iterate over, adding its data to table a
+ * @param flags How to add the table to table a.  One of:
+ *          APR_OVERLAP_TABLES_SET        Use apr_table_setn
+ *          APR_OVERLAP_TABLES_MERGE      Use apr_table_mergen
+ * @remark  When merging duplicates, the two values are concatenated,
+ *          separated by the string ", ".
+ * @remark  This function is highly optimized, and uses less memory and CPU cycles
+ *          than a function that just loops through table b calling other functions.
+ */
+/**
+ * Conceptually, apr_table_overlap does this:
+ *
+ * <pre>
+ *  apr_array_header_t *barr = apr_table_elts(b);
+ *  apr_table_entry_t *belt = (apr_table_entry_t *)barr->elts;
+ *  int i;
+ *
+ *  for (i = 0; i < barr->nelts; ++i) {
+ *      if (flags & APR_OVERLAP_TABLES_MERGE) {
+ *          apr_table_mergen(a, belt[i].key, belt[i].val);
+ *      }
+ *      else {
+ *          apr_table_setn(a, belt[i].key, belt[i].val);
+ *      }
+ *  }
+ * </pre>
+ *
+ *  Except that it is more efficient (less space and cpu-time) especially
+ *  when b has many elements.
+ *
+ *  Notice the assumptions on the keys and values in b -- they must be
+ *  in an ancestor of a's pool.  In practice b and a are usually from
+ *  the same pool.
+ */
+
+APR_DECLARE(void) apr_table_overlap(apr_table_t *a, const apr_table_t *b,
+                                     unsigned flags);
+
+/**
+ * Eliminate redundant entries in a table by either overwriting
+ * or merging duplicates.
+ *
+ * @param t Table.
+ * @param flags APR_OVERLAP_TABLES_MERGE to merge, or
+ *              APR_OVERLAP_TABLES_SET to overwrite
+ * @remark When merging duplicates, the two values are concatenated,
+ *         separated by the string ", ".
+ */
+APR_DECLARE(void) apr_table_compress(apr_table_t *t, unsigned flags);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ! APR_TABLES_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_cond.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_cond.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_cond.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,139 @@
+/* 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.
+ */
+
+#ifndef APR_THREAD_COND_H
+#define APR_THREAD_COND_H
+
+/**
+ * @file apr_thread_cond.h
+ * @brief APR Condition Variable Routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+#include "apr_time.h"
+#include "apr_thread_mutex.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if APR_HAS_THREADS || defined(DOXYGEN)
+
+/**
+ * @defgroup apr_thread_cond Condition Variable Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/** Opaque structure for thread condition variables */
+typedef struct apr_thread_cond_t apr_thread_cond_t;
+
+/**
+ * Note: destroying a condition variable (or likewise, destroying or
+ * clearing the pool from which a condition variable was allocated) if
+ * any threads are blocked waiting on it gives undefined results.
+ */
+
+/**
+ * Create and initialize a condition variable that can be used to signal
+ * and schedule threads in a single process.
+ * @param cond the memory address where the newly created condition variable
+ *        will be stored.
+ * @param pool the pool from which to allocate the condition.
+ */
+APR_DECLARE(apr_status_t) apr_thread_cond_create(apr_thread_cond_t **cond,
+                                                 apr_pool_t *pool);
+
+/**
+ * Put the active calling thread to sleep until signaled to wake up. Each
+ * condition variable must be associated with a mutex, and that mutex must
+ * be locked before  calling this function, or the behavior will be
+ * undefined. As the calling thread is put to sleep, the given mutex
+ * will be simultaneously released; and as this thread wakes up the lock
+ * is again simultaneously acquired.
+ * @param cond the condition variable on which to block.
+ * @param mutex the mutex that must be locked upon entering this function,
+ *        is released while the thread is asleep, and is again acquired before
+ *        returning from this function.
+ * @remark Spurious wakeups may occur. Before and after every call to wait on
+ * a condition variable, the caller should test whether the condition is already
+ * met.
+ */
+APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond,
+                                               apr_thread_mutex_t *mutex);
+
+/**
+ * Put the active calling thread to sleep until signaled to wake up or
+ * the timeout is reached. Each condition variable must be associated
+ * with a mutex, and that mutex must be locked before calling this
+ * function, or the behavior will be undefined. As the calling thread
+ * is put to sleep, the given mutex will be simultaneously released;
+ * and as this thread wakes up the lock is again simultaneously acquired.
+ * @param cond the condition variable on which to block.
+ * @param mutex the mutex that must be locked upon entering this function,
+ *        is released while the thread is asleep, and is again acquired before
+ *        returning from this function.
+ * @param timeout The amount of time in microseconds to wait. This is 
+ *        a maximum, not a minimum. If the condition is signaled, we 
+ *        will wake up before this time, otherwise the error APR_TIMEUP
+ *        is returned.
+ */
+APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond,
+                                                    apr_thread_mutex_t *mutex,
+                                                    apr_interval_time_t timeout);
+
+/**
+ * Signals a single thread, if one exists, that is blocking on the given
+ * condition variable. That thread is then scheduled to wake up and acquire
+ * the associated mutex. Although it is not required, if predictable scheduling
+ * is desired, that mutex must be locked while calling this function.
+ * @param cond the condition variable on which to produce the signal.
+ * @remark If no threads are waiting on the condition variable, nothing happens.
+ */
+APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond);
+
+/**
+ * Signals all threads blocking on the given condition variable.
+ * Each thread that was signaled is then scheduled to wake up and acquire
+ * the associated mutex. This will happen in a serialized manner.
+ * @param cond the condition variable on which to produce the broadcast.
+ * @remark If no threads are waiting on the condition variable, nothing happens.
+ */
+APR_DECLARE(apr_status_t) apr_thread_cond_broadcast(apr_thread_cond_t *cond);
+
+/**
+ * Destroy the condition variable and free the associated memory.
+ * @param cond the condition variable to destroy.
+ */
+APR_DECLARE(apr_status_t) apr_thread_cond_destroy(apr_thread_cond_t *cond);
+
+/**
+ * Get the pool used by this thread_cond.
+ * @return apr_pool_t the pool
+ */
+APR_POOL_DECLARE_ACCESSOR(thread_cond);
+
+#endif /* APR_HAS_THREADS */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_THREAD_COND_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_mutex.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_mutex.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_mutex.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,110 @@
+/* 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.
+ */
+
+#ifndef APR_THREAD_MUTEX_H
+#define APR_THREAD_MUTEX_H
+
+/**
+ * @file apr_thread_mutex.h
+ * @brief APR Thread Mutex Routines
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if APR_HAS_THREADS || defined(DOXYGEN)
+
+/**
+ * @defgroup apr_thread_mutex Thread Mutex Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/** Opaque thread-local mutex structure */
+typedef struct apr_thread_mutex_t apr_thread_mutex_t;
+
+#define APR_THREAD_MUTEX_DEFAULT  0x0   /**< platform-optimal lock behavior */
+#define APR_THREAD_MUTEX_NESTED   0x1   /**< enable nested (recursive) locks */
+#define APR_THREAD_MUTEX_UNNESTED 0x2   /**< disable nested locks */
+
+/* Delayed the include to avoid a circular reference */
+#include "apr_pools.h"
+
+/**
+ * Create and initialize a mutex that can be used to synchronize threads.
+ * @param mutex the memory address where the newly created mutex will be
+ *        stored.
+ * @param flags Or'ed value of:
+ * <PRE>
+ *           APR_THREAD_MUTEX_DEFAULT   platform-optimal lock behavior.
+ *           APR_THREAD_MUTEX_NESTED    enable nested (recursive) locks.
+ *           APR_THREAD_MUTEX_UNNESTED  disable nested locks (non-recursive).
+ * </PRE>
+ * @param pool the pool from which to allocate the mutex.
+ * @warning Be cautious in using APR_THREAD_MUTEX_DEFAULT.  While this is the
+ * most optimial mutex based on a given platform's performance charateristics,
+ * it will behave as either a nested or an unnested lock.
+ */
+APR_DECLARE(apr_status_t) apr_thread_mutex_create(apr_thread_mutex_t **mutex,
+                                                  unsigned int flags,
+                                                  apr_pool_t *pool);
+/**
+ * Acquire the lock for the given mutex. If the mutex is already locked,
+ * the current thread will be put to sleep until the lock becomes available.
+ * @param mutex the mutex on which to acquire the lock.
+ */
+APR_DECLARE(apr_status_t) apr_thread_mutex_lock(apr_thread_mutex_t *mutex);
+
+/**
+ * Attempt to acquire the lock for the given mutex. If the mutex has already
+ * been acquired, the call returns immediately with APR_EBUSY. Note: it
+ * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
+ * if the return value was APR_EBUSY, for portability reasons.
+ * @param mutex the mutex on which to attempt the lock acquiring.
+ */
+APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex);
+
+/**
+ * Release the lock for the given mutex.
+ * @param mutex the mutex from which to release the lock.
+ */
+APR_DECLARE(apr_status_t) apr_thread_mutex_unlock(apr_thread_mutex_t *mutex);
+
+/**
+ * Destroy the mutex and free the memory associated with the lock.
+ * @param mutex the mutex to destroy.
+ */
+APR_DECLARE(apr_status_t) apr_thread_mutex_destroy(apr_thread_mutex_t *mutex);
+
+/**
+ * Get the pool used by this thread_mutex.
+ * @return apr_pool_t the pool
+ */
+APR_POOL_DECLARE_ACCESSOR(thread_mutex);
+
+#endif /* APR_HAS_THREADS */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_THREAD_MUTEX_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_pool.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_pool.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_pool.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,299 @@
+/*
+ * 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.
+ */
+
+#ifndef APU_THREAD_POOL_H
+#define APU_THREAD_POOL_H
+
+#include "apu.h"
+#include "apr_thread_proc.h"
+
+/**
+ * @file apr_thread_pool.h
+ * @brief APR Thread Pool Library
+
+ * @remarks This library implements a thread pool using apr_thread_t. A thread
+ * pool is a set of threads that can be created in advance or on demand until a
+ * maximum number. When a task is scheduled, the thread pool will find an idle
+ * thread to handle the task. In case all existing threads are busy and the
+ * number of tasks in the queue is higher than the adjustable threshold, the
+ * pool will try to create a new thread to serve the task if the maximum number
+ * has not been reached. Otherwise, the task will be put into a queue based on
+ * priority, which can be valued from 0 to 255, with higher values being served
+ * first. If there are tasks with the same priority, the new task might be put at
+ * the top or at the bottom - it depends on which function is used to put the task.
+ *
+ * @remarks There may be the case where the thread pool can use up to the maximum
+ * number of threads at peak load, but having those threads idle afterwards. A
+ * maximum number of idle threads can be set so that the extra idling threads will
+ * be terminated to save system resources.
+ */
+#if APR_HAS_THREADS
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup APR_Util_TP Thread Pool routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+/** Opaque Thread Pool structure. */
+typedef struct apr_thread_pool apr_thread_pool_t;
+
+#define APR_THREAD_TASK_PRIORITY_LOWEST 0
+#define APR_THREAD_TASK_PRIORITY_LOW 63
+#define APR_THREAD_TASK_PRIORITY_NORMAL 127
+#define APR_THREAD_TASK_PRIORITY_HIGH 191
+#define APR_THREAD_TASK_PRIORITY_HIGHEST 255
+
+/**
+ * Create a thread pool
+ * @param me The pointer in which to return the newly created apr_thread_pool
+ * object, or NULL if thread pool creation fails.
+ * @param init_threads The number of threads to be created initially, this number
+ * will also be used as the initial value for the maximum number of idle threads.
+ * @param max_threads The maximum number of threads that can be created
+ * @param pool The pool to use
+ * @return APR_SUCCESS if the thread pool was created successfully. Otherwise,
+ * the error code.
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_create(apr_thread_pool_t **me,
+                                                 apr_size_t init_threads,
+                                                 apr_size_t max_threads,
+                                                 apr_pool_t *pool);
+
+/**
+ * Destroy the thread pool and stop all the threads
+ * @return APR_SUCCESS if all threads are stopped.
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_destroy(apr_thread_pool_t *me);
+
+/**
+ * Schedule a task to the bottom of the tasks of same priority.
+ * @param me The thread pool
+ * @param func The task function
+ * @param param The parameter for the task function
+ * @param priority The priority of the task.
+ * @param owner Owner of this task.
+ * @return APR_SUCCESS if the task had been scheduled successfully
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_push(apr_thread_pool_t *me,
+                                               apr_thread_start_t func,
+                                               void *param,
+                                               apr_byte_t priority,
+                                               void *owner);
+/**
+ * Schedule a task to be run after a delay
+ * @param me The thread pool
+ * @param func The task function
+ * @param param The parameter for the task function
+ * @param time Time in microseconds
+ * @param owner Owner of this task.
+ * @return APR_SUCCESS if the task had been scheduled successfully
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_schedule(apr_thread_pool_t *me,
+                                                   apr_thread_start_t func,
+                                                   void *param,
+                                                   apr_interval_time_t time,
+                                                   void *owner);
+
+/**
+ * Schedule a task to the top of the tasks of same priority.
+ * @param me The thread pool
+ * @param func The task function
+ * @param param The parameter for the task function
+ * @param priority The priority of the task.
+ * @param owner Owner of this task.
+ * @return APR_SUCCESS if the task had been scheduled successfully
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_top(apr_thread_pool_t *me,
+                                              apr_thread_start_t func,
+                                              void *param,
+                                              apr_byte_t priority,
+                                              void *owner);
+
+/**
+ * Cancel tasks submitted by the owner. If there is any task from the owner that
+ * is currently running, the function will spin until the task finished.
+ * @param me The thread pool
+ * @param owner Owner of the task
+ * @return APR_SUCCESS if the task has been cancelled successfully
+ * @note The task function should not be calling cancel, otherwise the function
+ * may get stuck forever. The function assert if it detect such a case.
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_tasks_cancel(apr_thread_pool_t *me,
+                                                       void *owner);
+
+/**
+ * Get the current number of tasks waiting in the queue
+ * @param me The thread pool
+ * @return Number of tasks in the queue
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_tasks_count(apr_thread_pool_t *me);
+
+/**
+ * Get the current number of scheduled tasks waiting in the queue
+ * @param me The thread pool
+ * @return Number of scheduled tasks in the queue
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_scheduled_tasks_count(apr_thread_pool_t *me);
+
+/**
+ * Get the current number of threads
+ * @param me The thread pool
+ * @return Total number of threads
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_threads_count(apr_thread_pool_t *me);
+
+/**
+ * Get the current number of busy threads
+ * @param me The thread pool
+ * @return Number of busy threads
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_busy_count(apr_thread_pool_t *me);
+
+/**
+ * Get the current number of idle threads
+ * @param me The thread pool
+ * @return Number of idle threads
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_idle_count(apr_thread_pool_t *me);
+
+/**
+ * Access function for the maximum number of idle threads. Number of current
+ * idle threads will be reduced to the new limit.
+ * @param me The thread pool
+ * @param cnt The number
+ * @return The number of threads that were stopped.
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_idle_max_set(apr_thread_pool_t *me,
+                                                     apr_size_t cnt);
+
+/**
+ * Get number of tasks that have run
+ * @param me The thread pool
+ * @return Number of tasks that have run
+ */
+APU_DECLARE(apr_size_t)
+    apr_thread_pool_tasks_run_count(apr_thread_pool_t * me);
+
+/**
+ * Get high water mark of the number of tasks waiting to run
+ * @param me The thread pool
+ * @return High water mark of tasks waiting to run
+ */
+APU_DECLARE(apr_size_t)
+    apr_thread_pool_tasks_high_count(apr_thread_pool_t * me);
+
+/**
+ * Get high water mark of the number of threads
+ * @param me The thread pool
+ * @return High water mark of threads in thread pool
+ */
+APU_DECLARE(apr_size_t)
+    apr_thread_pool_threads_high_count(apr_thread_pool_t * me);
+
+/**
+ * Get the number of idle threads that were destroyed after timing out
+ * @param me The thread pool
+ * @return Number of idle threads that timed out
+ */
+APU_DECLARE(apr_size_t)
+    apr_thread_pool_threads_idle_timeout_count(apr_thread_pool_t * me);
+
+/**
+ * Access function for the maximum number of idle threads
+ * @param me The thread pool
+ * @return The current maximum number
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_idle_max_get(apr_thread_pool_t *me);
+
+/**
+ * Access function for the maximum number of threads.
+ * @param me The thread pool
+ * @param cnt Number of threads
+ * @return The original maximum number of threads
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_thread_max_set(apr_thread_pool_t *me,
+                                                       apr_size_t cnt);
+
+/**
+ * Access function for the maximum wait time (in microseconds) of an
+ * idling thread that exceeds the maximum number of idling threads.
+ * A non-zero value allows for the reaping of idling threads to shrink
+ * over time.  Which helps reduce thrashing.
+ * @param me The thread pool
+ * @param timeout The number of microseconds an idle thread should wait
+ * till it reaps itself
+ * @return The original maximum wait time
+ */
+APU_DECLARE(apr_interval_time_t)
+    apr_thread_pool_idle_wait_set(apr_thread_pool_t * me,
+                                  apr_interval_time_t timeout);
+
+/**
+ * Access function for the maximum wait time (in microseconds) of an
+ * idling thread that exceeds the maximum number of idling threads
+ * @param me The thread pool
+ * @return The current maximum wait time
+ */
+APU_DECLARE(apr_interval_time_t)
+    apr_thread_pool_idle_wait_get(apr_thread_pool_t * me);
+
+/**
+ * Access function for the maximum number of threads
+ * @param me The thread pool
+ * @return The current maximum number
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_thread_max_get(apr_thread_pool_t *me);
+
+/**
+ * Access function for the threshold of tasks in queue to trigger a new thread.
+ * @param me The thread pool
+ * @param cnt The new threshold
+ * @return The original threshold
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_threshold_set(apr_thread_pool_t *me,
+                                                      apr_size_t val);
+
+/**
+ * Access function for the threshold of tasks in queue to trigger a new thread.
+ * @param me The thread pool
+ * @return The current threshold
+ */
+APU_DECLARE(apr_size_t) apr_thread_pool_threshold_get(apr_thread_pool_t * me);
+
+/**
+ * Get owner of the task currently been executed by the thread.
+ * @param thd The thread is executing a task
+ * @param owner Pointer to receive owner of the task.
+ * @return APR_SUCCESS if the owner is retrieved successfully
+ */
+APU_DECLARE(apr_status_t) apr_thread_pool_task_owner_get(apr_thread_t *thd,
+                                                         void **owner);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_HAS_THREADS */
+#endif /* !APR_THREAD_POOL_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_proc.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_proc.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_proc.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,824 @@
+/* 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.
+ */
+
+#ifndef APR_THREAD_PROC_H
+#define APR_THREAD_PROC_H
+
+/**
+ * @file apr_thread_proc.h
+ * @brief APR Thread and Process Library
+ */
+
+#include "apr.h"
+#include "apr_file_io.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#if APR_HAVE_STRUCT_RLIMIT
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_thread_proc Threads and Process Functions
+ * @ingroup APR 
+ * @{
+ */
+
+typedef enum {
+    APR_SHELLCMD,           /**< use the shell to invoke the program */
+    APR_PROGRAM,            /**< invoke the program directly, no copied env */
+    APR_PROGRAM_ENV,        /**< invoke the program, replicating our environment */
+    APR_PROGRAM_PATH,       /**< find program on PATH, use our environment */
+    APR_SHELLCMD_ENV        /**< use the shell to invoke the program,
+                             *   replicating our environment
+                             */
+} apr_cmdtype_e;
+
+typedef enum {
+    APR_WAIT,           /**< wait for the specified process to finish */
+    APR_NOWAIT          /**< do not wait -- just see if it has finished */
+} apr_wait_how_e;
+
+/* I am specifically calling out the values so that the macros below make
+ * more sense.  Yes, I know I don't need to, but I am hoping this makes what
+ * I am doing more clear.  If you want to add more reasons to exit, continue
+ * to use bitmasks.
+ */
+typedef enum {
+    APR_PROC_EXIT = 1,          /**< process exited normally */
+    APR_PROC_SIGNAL = 2,        /**< process exited due to a signal */
+    APR_PROC_SIGNAL_CORE = 4    /**< process exited and dumped a core file */
+} apr_exit_why_e;
+
+/** did we exit the process */
+#define APR_PROC_CHECK_EXIT(x)        (x & APR_PROC_EXIT)
+/** did we get a signal */
+#define APR_PROC_CHECK_SIGNALED(x)    (x & APR_PROC_SIGNAL)
+/** did we get core */
+#define APR_PROC_CHECK_CORE_DUMP(x)   (x & APR_PROC_SIGNAL_CORE)
+
+/** @see apr_procattr_io_set */
+#define APR_NO_PIPE          0
+/** @see apr_procattr_io_set and apr_file_pipe_create_ex */
+#define APR_FULL_BLOCK       1
+/** @see apr_procattr_io_set and apr_file_pipe_create_ex */
+#define APR_FULL_NONBLOCK    2
+/** @see apr_procattr_io_set */
+#define APR_PARENT_BLOCK     3
+/** @see apr_procattr_io_set */
+#define APR_CHILD_BLOCK      4
+/** @see apr_procattr_io_set */
+#define APR_NO_FILE          8
+
+/** @see apr_file_pipe_create_ex */
+#define APR_READ_BLOCK       3
+/** @see apr_file_pipe_create_ex */
+#define APR_WRITE_BLOCK      4
+
+/** @see apr_procattr_io_set 
+ * @note Win32 only effective with version 1.2.12, portably introduced in 1.3.0
+ */
+#define APR_NO_FILE          8
+
+/** @see apr_procattr_limit_set */
+#define APR_LIMIT_CPU        0
+/** @see apr_procattr_limit_set */
+#define APR_LIMIT_MEM        1
+/** @see apr_procattr_limit_set */
+#define APR_LIMIT_NPROC      2
+/** @see apr_procattr_limit_set */
+#define APR_LIMIT_NOFILE     3
+
+/**
+ * @defgroup APR_OC Other Child Flags
+ * @{
+ */
+#define APR_OC_REASON_DEATH         0     /**< child has died, caller must call
+                                           * unregister still */
+#define APR_OC_REASON_UNWRITABLE    1     /**< write_fd is unwritable */
+#define APR_OC_REASON_RESTART       2     /**< a restart is occuring, perform
+                                           * any necessary cleanup (including
+                                           * sending a special signal to child)
+                                           */
+#define APR_OC_REASON_UNREGISTER    3     /**< unregister has been called, do
+                                           * whatever is necessary (including
+                                           * kill the child) */
+#define APR_OC_REASON_LOST          4     /**< somehow the child exited without
+                                           * us knowing ... buggy os? */
+#define APR_OC_REASON_RUNNING       5     /**< a health check is occuring, 
+                                           * for most maintainence functions
+                                           * this is a no-op.
+                                           */
+/** @} */
+
+/** The APR process type */
+typedef struct apr_proc_t {
+    /** The process ID */
+    pid_t pid;
+    /** Parent's side of pipe to child's stdin */
+    apr_file_t *in;
+    /** Parent's side of pipe to child's stdout */
+    apr_file_t *out;
+    /** Parent's side of pipe to child's stdouterr */
+    apr_file_t *err;
+#if APR_HAS_PROC_INVOKED || defined(DOXYGEN)
+    /** Diagnositics/debugging string of the command invoked for 
+     *  this process [only present if APR_HAS_PROC_INVOKED is true]
+     * @remark Only enabled on Win32 by default.
+     * @bug This should either always or never be present in release
+     * builds - since it breaks binary compatibility.  We may enable
+     * it always in APR 1.0 yet leave it undefined in most cases.
+     */
+    char *invoked;
+#endif
+#if defined(WIN32) || defined(DOXYGEN)
+    /** (Win32 only) Creator's handle granting access to the process
+     * @remark This handle is closed and reset to NULL in every case
+     * corresponding to a waitpid() on Unix which returns the exit status.
+     * Therefore Win32 correspond's to Unix's zombie reaping characteristics
+     * and avoids potential handle leaks.
+     */
+    HANDLE hproc;
+#endif
+} apr_proc_t;
+
+/**
+ * The prototype for APR child errfn functions.  (See the description
+ * of apr_procattr_child_errfn_set() for more information.)
+ * It is passed the following parameters:
+ * @param pool Pool associated with the apr_proc_t.  If your child
+ *             error function needs user data, associate it with this
+ *             pool.
+ * @param err APR error code describing the error
+ * @param description Text description of type of processing which failed
+ */
+typedef void (apr_child_errfn_t)(apr_pool_t *proc, apr_status_t err,
+                                 const char *description);
+
+/** Opaque Thread structure. */
+typedef struct apr_thread_t           apr_thread_t;
+
+/** Opaque Thread attributes structure. */
+typedef struct apr_threadattr_t       apr_threadattr_t;
+
+/** Opaque Process attributes structure. */
+typedef struct apr_procattr_t         apr_procattr_t;
+
+/** Opaque control variable for one-time atomic variables.  */
+typedef struct apr_thread_once_t      apr_thread_once_t;
+
+/** Opaque thread private address space. */
+typedef struct apr_threadkey_t        apr_threadkey_t;
+
+/** Opaque record of child process. */
+typedef struct apr_other_child_rec_t  apr_other_child_rec_t;
+
+/**
+ * The prototype for any APR thread worker functions.
+ */
+typedef void *(APR_THREAD_FUNC *apr_thread_start_t)(apr_thread_t*, void*);
+
+typedef enum {
+    APR_KILL_NEVER,             /**< process is never sent any signals */
+    APR_KILL_ALWAYS,            /**< process is sent SIGKILL on apr_pool_t cleanup */
+    APR_KILL_AFTER_TIMEOUT,     /**< SIGTERM, wait 3 seconds, SIGKILL */
+    APR_JUST_WAIT,              /**< wait forever for the process to complete */
+    APR_KILL_ONLY_ONCE          /**< send SIGTERM and then wait */
+} apr_kill_conditions_e;
+
+/* Thread Function definitions */
+
+#if APR_HAS_THREADS
+
+/**
+ * Create and initialize a new threadattr variable
+ * @param new_attr The newly created threadattr.
+ * @param cont The pool to use
+ */
+APR_DECLARE(apr_status_t) apr_threadattr_create(apr_threadattr_t **new_attr, 
+                                                apr_pool_t *cont);
+
+/**
+ * Set if newly created threads should be created in detached state.
+ * @param attr The threadattr to affect 
+ * @param on Non-zero if detached threads should be created.
+ */
+APR_DECLARE(apr_status_t) apr_threadattr_detach_set(apr_threadattr_t *attr, 
+                                                    apr_int32_t on);
+
+/**
+ * Get the detach state for this threadattr.
+ * @param attr The threadattr to reference
+ * @return APR_DETACH if threads are to be detached, or APR_NOTDETACH
+ * if threads are to be joinable. 
+ */
+APR_DECLARE(apr_status_t) apr_threadattr_detach_get(apr_threadattr_t *attr);
+
+/**
+ * Set the stack size of newly created threads.
+ * @param attr The threadattr to affect 
+ * @param stacksize The stack size in bytes
+ */
+APR_DECLARE(apr_status_t) apr_threadattr_stacksize_set(apr_threadattr_t *attr,
+                                                       apr_size_t stacksize);
+
+/**
+ * Set the stack guard area size of newly created threads.
+ * @param attr The threadattr to affect 
+ * @param guardsize The stack guard area size in bytes
+ * @note Thread library implementations commonly use a "guard area"
+ * after each thread's stack which is not readable or writable such that
+ * stack overflows cause a segfault; this consumes e.g. 4K of memory
+ * and increases memory management overhead.  Setting the guard area
+ * size to zero hence trades off reliable behaviour on stack overflow
+ * for performance. */
+APR_DECLARE(apr_status_t) apr_threadattr_guardsize_set(apr_threadattr_t *attr,
+                                                       apr_size_t guardsize);
+
+/**
+ * Create a new thread of execution
+ * @param new_thread The newly created thread handle.
+ * @param attr The threadattr to use to determine how to create the thread
+ * @param func The function to start the new thread in
+ * @param data Any data to be passed to the starting function
+ * @param cont The pool to use
+ */
+APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new_thread, 
+                                            apr_threadattr_t *attr, 
+                                            apr_thread_start_t func, 
+                                            void *data, apr_pool_t *cont);
+
+/**
+ * stop the current thread
+ * @param thd The thread to stop
+ * @param retval The return value to pass back to any thread that cares
+ */
+APR_DECLARE(apr_status_t) apr_thread_exit(apr_thread_t *thd, 
+                                          apr_status_t retval);
+
+/**
+ * block until the desired thread stops executing.
+ * @param retval The return value from the dead thread.
+ * @param thd The thread to join
+ */
+APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, 
+                                          apr_thread_t *thd); 
+
+/**
+ * force the current thread to yield the processor
+ */
+APR_DECLARE(void) apr_thread_yield(void);
+
+/**
+ * Initialize the control variable for apr_thread_once.  If this isn't
+ * called, apr_initialize won't work.
+ * @param control The control variable to initialize
+ * @param p The pool to allocate data from.
+ */
+APR_DECLARE(apr_status_t) apr_thread_once_init(apr_thread_once_t **control,
+                                               apr_pool_t *p);
+
+/**
+ * Run the specified function one time, regardless of how many threads
+ * call it.
+ * @param control The control variable.  The same variable should
+ *                be passed in each time the function is tried to be
+ *                called.  This is how the underlying functions determine
+ *                if the function has ever been called before.
+ * @param func The function to call.
+ */
+APR_DECLARE(apr_status_t) apr_thread_once(apr_thread_once_t *control,
+                                          void (*func)(void));
+
+/**
+ * detach a thread
+ * @param thd The thread to detach 
+ */
+APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd);
+
+/**
+ * Return user data associated with the current thread.
+ * @param data The user data associated with the thread.
+ * @param key The key to associate with the data
+ * @param thread The currently open thread.
+ */
+APR_DECLARE(apr_status_t) apr_thread_data_get(void **data, const char *key,
+                                             apr_thread_t *thread);
+
+/**
+ * Set user data associated with the current 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 cleanup The cleanup routine to use when the thread is destroyed.
+ * @param thread The currently open thread.
+ */
+APR_DECLARE(apr_status_t) apr_thread_data_set(void *data, const char *key,
+                                             apr_status_t (*cleanup) (void *),
+                                             apr_thread_t *thread);
+
+/**
+ * Create and initialize a new thread private address space
+ * @param key The thread private handle.
+ * @param dest The destructor to use when freeing the private memory.
+ * @param cont The pool to use
+ */
+APR_DECLARE(apr_status_t) apr_threadkey_private_create(apr_threadkey_t **key, 
+                                                    void (*dest)(void *),
+                                                    apr_pool_t *cont);
+
+/**
+ * Get a pointer to the thread private memory
+ * @param new_mem The data stored in private memory 
+ * @param key The handle for the desired thread private memory 
+ */
+APR_DECLARE(apr_status_t) apr_threadkey_private_get(void **new_mem, 
+                                                 apr_threadkey_t *key);
+
+/**
+ * Set the data to be stored in thread private memory
+ * @param priv The data to be stored in private memory 
+ * @param key The handle for the desired thread private memory 
+ */
+APR_DECLARE(apr_status_t) apr_threadkey_private_set(void *priv, 
+                                                 apr_threadkey_t *key);
+
+/**
+ * Free the thread private memory
+ * @param key The handle for the desired thread private memory 
+ */
+APR_DECLARE(apr_status_t) apr_threadkey_private_delete(apr_threadkey_t *key);
+
+/**
+ * Return the pool associated with the current threadkey.
+ * @param data The user data associated with the threadkey.
+ * @param key The key associated with the data
+ * @param threadkey The currently open threadkey.
+ */
+APR_DECLARE(apr_status_t) apr_threadkey_data_get(void **data, const char *key,
+                                                apr_threadkey_t *threadkey);
+
+/**
+ * Return the pool associated with the current threadkey.
+ * @param data The data to set.
+ * @param key The key to associate with the data.
+ * @param cleanup The cleanup routine to use when the file is destroyed.
+ * @param threadkey The currently open threadkey.
+ */
+APR_DECLARE(apr_status_t) apr_threadkey_data_set(void *data, const char *key,
+                                                apr_status_t (*cleanup) (void *),
+                                                apr_threadkey_t *threadkey);
+
+#endif
+
+/**
+ * Create and initialize a new procattr variable
+ * @param new_attr The newly created procattr. 
+ * @param cont The pool to use
+ */
+APR_DECLARE(apr_status_t) apr_procattr_create(apr_procattr_t **new_attr,
+                                                  apr_pool_t *cont);
+
+/**
+ * Determine if any of stdin, stdout, or stderr should be linked to pipes 
+ * when starting a child process.
+ * @param attr The procattr we care about. 
+ * @param in Should stdin be a pipe back to the parent?
+ * @param out Should stdout be a pipe back to the parent?
+ * @param err Should stderr be a pipe back to the parent?
+ * @note If APR_NO_PIPE, there will be no special channel, the child
+ * inherits the parent's corresponding stdio stream.  If APR_NO_FILE is 
+ * specified, that corresponding stream is closed in the child (and will
+ * be INVALID_HANDLE_VALUE when inspected on Win32). This can have ugly 
+ * side effects, as the next file opened in the child on Unix will fall
+ * into the stdio stream fd slot!
+ */
+APR_DECLARE(apr_status_t) apr_procattr_io_set(apr_procattr_t *attr, 
+                                             apr_int32_t in, apr_int32_t out,
+                                             apr_int32_t err);
+
+/**
+ * Set the child_in and/or parent_in values to existing apr_file_t values.
+ * @param attr The procattr we care about. 
+ * @param child_in apr_file_t value to use as child_in. Must be a valid file.
+ * @param parent_in apr_file_t value to use as parent_in. Must be a valid file.
+ * @remark  This is NOT a required initializer function. This is
+ *          useful if you have already opened a pipe (or multiple files)
+ *          that you wish to use, perhaps persistently across multiple
+ *          process invocations - such as a log file. You can save some 
+ *          extra function calls by not creating your own pipe since this
+ *          creates one in the process space for you.
+ * @bug Note that calling this function with two NULL files on some platforms
+ * creates an APR_FULL_BLOCK pipe, but this behavior is neither portable nor
+ * is it supported.  @see apr_procattr_io_set instead for simple pipes.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_child_in_set(struct apr_procattr_t *attr,
+                                                  apr_file_t *child_in,
+                                                  apr_file_t *parent_in);
+
+/**
+ * Set the child_out and parent_out values to existing apr_file_t values.
+ * @param attr The procattr we care about. 
+ * @param child_out apr_file_t value to use as child_out. Must be a valid file.
+ * @param parent_out apr_file_t value to use as parent_out. Must be a valid file.
+ * @remark This is NOT a required initializer function. This is
+ *         useful if you have already opened a pipe (or multiple files)
+ *         that you wish to use, perhaps persistently across multiple
+ *         process invocations - such as a log file. 
+ * @bug Note that calling this function with two NULL files on some platforms
+ * creates an APR_FULL_BLOCK pipe, but this behavior is neither portable nor
+ * is it supported.  @see apr_procattr_io_set instead for simple pipes.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_child_out_set(struct apr_procattr_t *attr,
+                                                   apr_file_t *child_out,
+                                                   apr_file_t *parent_out);
+
+/**
+ * Set the child_err and parent_err values to existing apr_file_t values.
+ * @param attr The procattr we care about. 
+ * @param child_err apr_file_t value to use as child_err. Must be a valid file.
+ * @param parent_err apr_file_t value to use as parent_err. Must be a valid file.
+ * @remark This is NOT a required initializer function. This is
+ *         useful if you have already opened a pipe (or multiple files)
+ *         that you wish to use, perhaps persistently across multiple
+ *         process invocations - such as a log file. 
+ * @bug Note that calling this function with two NULL files on some platforms
+ * creates an APR_FULL_BLOCK pipe, but this behavior is neither portable nor
+ * is it supported.  @see apr_procattr_io_set instead for simple pipes.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_child_err_set(struct apr_procattr_t *attr,
+                                                   apr_file_t *child_err,
+                                                   apr_file_t *parent_err);
+
+/**
+ * Set which directory the child process should start executing in.
+ * @param attr The procattr we care about. 
+ * @param dir Which dir to start in.  By default, this is the same dir as
+ *            the parent currently resides in, when the createprocess call
+ *            is made. 
+ */
+APR_DECLARE(apr_status_t) apr_procattr_dir_set(apr_procattr_t *attr, 
+                                              const char *dir);
+
+/**
+ * Set what type of command the child process will call.
+ * @param attr The procattr we care about. 
+ * @param cmd The type of command.  One of:
+ * <PRE>
+ *            APR_SHELLCMD     --  Anything that the shell can handle
+ *            APR_PROGRAM      --  Executable program   (default) 
+ *            APR_PROGRAM_ENV  --  Executable program, copy environment
+ *            APR_PROGRAM_PATH --  Executable program on PATH, copy env
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_procattr_cmdtype_set(apr_procattr_t *attr,
+                                                  apr_cmdtype_e cmd);
+
+/**
+ * Determine if the child should start in detached state.
+ * @param attr The procattr we care about. 
+ * @param detach Should the child start in detached state?  Default is no. 
+ */
+APR_DECLARE(apr_status_t) apr_procattr_detach_set(apr_procattr_t *attr, 
+                                                 apr_int32_t detach);
+
+#if APR_HAVE_STRUCT_RLIMIT
+/**
+ * Set the Resource Utilization limits when starting a new process.
+ * @param attr The procattr we care about. 
+ * @param what Which limit to set, one of:
+ * <PRE>
+ *                 APR_LIMIT_CPU
+ *                 APR_LIMIT_MEM
+ *                 APR_LIMIT_NPROC
+ *                 APR_LIMIT_NOFILE
+ * </PRE>
+ * @param limit Value to set the limit to.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_limit_set(apr_procattr_t *attr, 
+                                                apr_int32_t what,
+                                                struct rlimit *limit);
+#endif
+
+/**
+ * Specify an error function to be called in the child process if APR
+ * encounters an error in the child prior to running the specified program.
+ * @param attr The procattr describing the child process to be created.
+ * @param errfn The function to call in the child process.
+ * @remark At the present time, it will only be called from apr_proc_create()
+ *         on platforms where fork() is used.  It will never be called on other
+ *         platforms, on those platforms apr_proc_create() will return the error
+ *         in the parent process rather than invoke the callback in the now-forked
+ *         child process.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_child_errfn_set(apr_procattr_t *attr,
+                                                       apr_child_errfn_t *errfn);
+
+/**
+ * Specify that apr_proc_create() should do whatever it can to report
+ * failures to the caller of apr_proc_create(), rather than find out in
+ * the child.
+ * @param attr The procattr describing the child process to be created.
+ * @param chk Flag to indicate whether or not extra work should be done
+ *            to try to report failures to the caller.
+ * @remark This flag only affects apr_proc_create() on platforms where
+ *         fork() is used.  This leads to extra overhead in the calling
+ *         process, but that may help the application handle such
+ *         errors more gracefully.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_error_check_set(apr_procattr_t *attr,
+                                                       apr_int32_t chk);
+
+/**
+ * Determine if the child should start in its own address space or using the 
+ * current one from its parent
+ * @param attr The procattr we care about. 
+ * @param addrspace Should the child start in its own address space?  Default
+ *                  is no on NetWare and yes on other platforms.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_addrspace_set(apr_procattr_t *attr,
+                                                       apr_int32_t addrspace);
+
+/**
+ * Set the username used for running process
+ * @param attr The procattr we care about. 
+ * @param username The username used
+ * @param password User password if needed. Password is needed on WIN32
+ *                 or any other platform having
+ *                 APR_PROCATTR_USER_SET_REQUIRES_PASSWORD set.
+ */
+APR_DECLARE(apr_status_t) apr_procattr_user_set(apr_procattr_t *attr,
+                                                const char *username,
+                                                const char *password);
+
+/**
+ * Set the group used for running process
+ * @param attr The procattr we care about. 
+ * @param groupname The group name  used
+ */
+APR_DECLARE(apr_status_t) apr_procattr_group_set(apr_procattr_t *attr,
+                                                 const char *groupname);
+
+
+#if APR_HAS_FORK
+/**
+ * This is currently the only non-portable call in APR.  This executes 
+ * a standard unix fork.
+ * @param proc The resulting process handle. 
+ * @param cont The pool to use. 
+ * @remark returns APR_INCHILD for the child, and APR_INPARENT for the parent
+ * or an error.
+ */
+APR_DECLARE(apr_status_t) apr_proc_fork(apr_proc_t *proc, apr_pool_t *cont);
+#endif
+
+/**
+ * Create a new process and execute a new program within that process.
+ * @param new_proc The resulting process handle.
+ * @param progname The program to run 
+ * @param args the arguments to pass to the new program.  The first 
+ *             one should be the program name.
+ * @param env The new environment table for the new process.  This 
+ *            should be a list of NULL-terminated strings. This argument
+ *            is ignored for APR_PROGRAM_ENV, APR_PROGRAM_PATH, and
+ *            APR_SHELLCMD_ENV types of commands.
+ * @param attr the procattr we should use to determine how to create the new
+ *         process
+ * @param pool The pool to use.
+ * @note This function returns without waiting for the new process to terminate;
+ * use apr_proc_wait for that.
+ */
+APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new_proc,
+                                          const char *progname,
+                                          const char * const *args,
+                                          const char * const *env, 
+                                          apr_procattr_t *attr, 
+                                          apr_pool_t *pool);
+
+/**
+ * Wait for a child process to die
+ * @param proc The process handle that corresponds to the desired child process 
+ * @param exitcode The returned exit status of the child, if a child process 
+ *                 dies, or the signal that caused the child to die.
+ *                 On platforms that don't support obtaining this information, 
+ *                 the status parameter will be returned as APR_ENOTIMPL.
+ * @param exitwhy Why the child died, the bitwise or of:
+ * <PRE>
+ *            APR_PROC_EXIT         -- process terminated normally
+ *            APR_PROC_SIGNAL       -- process was killed by a signal
+ *            APR_PROC_SIGNAL_CORE  -- process was killed by a signal, and
+ *                                     generated a core dump.
+ * </PRE>
+ * @param waithow How should we wait.  One of:
+ * <PRE>
+ *            APR_WAIT   -- block until the child process dies.
+ *            APR_NOWAIT -- return immediately regardless of if the 
+ *                          child is dead or not.
+ * </PRE>
+ * @remark The childs status is in the return code to this process.  It is one of:
+ * <PRE>
+ *            APR_CHILD_DONE     -- child is no longer running.
+ *            APR_CHILD_NOTDONE  -- child is still running.
+ * </PRE>
+ */
+APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc,
+                                        int *exitcode, apr_exit_why_e *exitwhy,
+                                        apr_wait_how_e waithow);
+
+/**
+ * Wait for any current child process to die and return information 
+ * about that child.
+ * @param proc Pointer to NULL on entry, will be filled out with child's 
+ *             information 
+ * @param exitcode The returned exit status of the child, if a child process 
+ *                 dies, or the signal that caused the child to die.
+ *                 On platforms that don't support obtaining this information, 
+ *                 the status parameter will be returned as APR_ENOTIMPL.
+ * @param exitwhy Why the child died, the bitwise or of:
+ * <PRE>
+ *            APR_PROC_EXIT         -- process terminated normally
+ *            APR_PROC_SIGNAL       -- process was killed by a signal
+ *            APR_PROC_SIGNAL_CORE  -- process was killed by a signal, and
+ *                                     generated a core dump.
+ * </PRE>
+ * @param waithow How should we wait.  One of:
+ * <PRE>
+ *            APR_WAIT   -- block until the child process dies.
+ *            APR_NOWAIT -- return immediately regardless of if the 
+ *                          child is dead or not.
+ * </PRE>
+ * @param p Pool to allocate child information out of.
+ * @bug Passing proc as a *proc rather than **proc was an odd choice
+ * for some platforms... this should be revisited in 1.0
+ */
+APR_DECLARE(apr_status_t) apr_proc_wait_all_procs(apr_proc_t *proc,
+                                                  int *exitcode,
+                                                  apr_exit_why_e *exitwhy,
+                                                  apr_wait_how_e waithow,
+                                                  apr_pool_t *p);
+
+#define APR_PROC_DETACH_FOREGROUND 0    /**< Do not detach */
+#define APR_PROC_DETACH_DAEMONIZE 1     /**< Detach */
+
+/**
+ * Detach the process from the controlling terminal.
+ * @param daemonize set to non-zero if the process should daemonize
+ *                  and become a background process, else it will
+ *                  stay in the foreground.
+ */
+APR_DECLARE(apr_status_t) apr_proc_detach(int daemonize);
+
+/**
+ * Register an other_child -- a child associated to its registered 
+ * maintence callback.  This callback is invoked when the process
+ * dies, is disconnected or disappears.
+ * @param proc The child process to register.
+ * @param maintenance maintenance is a function that is invoked with a 
+ *                    reason and the data pointer passed here.
+ * @param data Opaque context data passed to the maintenance function.
+ * @param write_fd An fd that is probed for writing.  If it is ever unwritable
+ *                 then the maintenance is invoked with reason 
+ *                 OC_REASON_UNWRITABLE.
+ * @param p The pool to use for allocating memory.
+ * @bug write_fd duplicates the proc->out stream, it's really redundant
+ * and should be replaced in the APR 1.0 API with a bitflag of which
+ * proc->in/out/err handles should be health checked.
+ * @bug no platform currently tests the pipes health.
+ */
+APR_DECLARE(void) apr_proc_other_child_register(apr_proc_t *proc, 
+                                           void (*maintenance) (int reason, 
+                                                                void *, 
+                                                                int status),
+                                           void *data, apr_file_t *write_fd,
+                                           apr_pool_t *p);
+
+/**
+ * Stop watching the specified other child.  
+ * @param data The data to pass to the maintenance function.  This is
+ *             used to find the process to unregister.
+ * @warning Since this can be called by a maintenance function while we're
+ *          scanning the other_children list, all scanners should protect 
+ *          themself by loading ocr->next before calling any maintenance 
+ *          function.
+ */
+APR_DECLARE(void) apr_proc_other_child_unregister(void *data);
+
+/**
+ * Notify the maintenance callback of a registered other child process
+ * that application has detected an event, such as death.
+ * @param proc The process to check
+ * @param reason The reason code to pass to the maintenance function
+ * @param status The status to pass to the maintenance function
+ * @remark An example of code using this behavior;
+ * <pre>
+ * rv = apr_proc_wait_all_procs(&proc, &exitcode, &status, APR_WAIT, p);
+ * if (APR_STATUS_IS_CHILD_DONE(rv)) {
+ * \#if APR_HAS_OTHER_CHILD
+ *     if (apr_proc_other_child_alert(&proc, APR_OC_REASON_DEATH, status)
+ *             == APR_SUCCESS) {
+ *         ;  (already handled)
+ *     }
+ *     else
+ * \#endif
+ *         [... handling non-otherchild processes death ...]
+ * </pre>
+ */
+APR_DECLARE(apr_status_t) apr_proc_other_child_alert(apr_proc_t *proc, 
+                                                     int reason,
+                                                     int status);
+
+/**
+ * Test one specific other child processes and invoke the maintenance callback 
+ * with the appropriate reason code, if still running, or the appropriate reason 
+ * code if the process is no longer healthy.
+ * @param ocr The registered other child
+ * @param reason The reason code (e.g. APR_OC_REASON_RESTART) if still running
+ */
+APR_DECLARE(void) apr_proc_other_child_refresh(apr_other_child_rec_t *ocr,
+                                               int reason);
+
+/**
+ * Test all registered other child processes and invoke the maintenance callback 
+ * with the appropriate reason code, if still running, or the appropriate reason 
+ * code if the process is no longer healthy.
+ * @param reason The reason code (e.g. APR_OC_REASON_RESTART) to running processes
+ */
+APR_DECLARE(void) apr_proc_other_child_refresh_all(int reason);
+
+/** 
+ * Terminate a process.
+ * @param proc The process to terminate.
+ * @param sig How to kill the process.
+ */
+APR_DECLARE(apr_status_t) apr_proc_kill(apr_proc_t *proc, int sig);
+
+/**
+ * Register a process to be killed when a pool dies.
+ * @param a The pool to use to define the processes lifetime 
+ * @param proc The process to register
+ * @param how How to kill the process, one of:
+ * <PRE>
+ *         APR_KILL_NEVER         -- process is never sent any signals
+ *         APR_KILL_ALWAYS        -- process is sent SIGKILL on apr_pool_t cleanup
+ *         APR_KILL_AFTER_TIMEOUT -- SIGTERM, wait 3 seconds, SIGKILL
+ *         APR_JUST_WAIT          -- wait forever for the process to complete
+ *         APR_KILL_ONLY_ONCE     -- send SIGTERM and then wait
+ * </PRE>
+ */
+APR_DECLARE(void) apr_pool_note_subprocess(apr_pool_t *a, apr_proc_t *proc,
+                                           apr_kill_conditions_e how);
+
+#if APR_HAS_THREADS 
+
+#if (APR_HAVE_SIGWAIT || APR_HAVE_SIGSUSPEND) && !defined(OS2)
+
+/**
+ * Setup the process for a single thread to be used for all signal handling.
+ * @warning This must be called before any threads are created
+ */
+APR_DECLARE(apr_status_t) apr_setup_signal_thread(void);
+
+/**
+ * Make the current thread listen for signals.  This thread will loop
+ * forever, calling a provided function whenever it receives a signal.  That
+ * functions should return 1 if the signal has been handled, 0 otherwise.
+ * @param signal_handler The function to call when a signal is received
+ * apr_status_t apr_signal_thread((int)(*signal_handler)(int signum))
+ */
+APR_DECLARE(apr_status_t) apr_signal_thread(int(*signal_handler)(int signum));
+
+#endif /* (APR_HAVE_SIGWAIT || APR_HAVE_SIGSUSPEND) && !defined(OS2) */
+
+/**
+ * Get the child-pool used by the thread from the thread info.
+ * @return apr_pool_t the pool
+ */
+APR_POOL_DECLARE_ACCESSOR(thread);
+
+#endif /* APR_HAS_THREADS */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_THREAD_PROC_H */
+

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_rwlock.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_rwlock.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_thread_rwlock.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,129 @@
+/* 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.
+ */
+
+#ifndef APR_THREAD_RWLOCK_H
+#define APR_THREAD_RWLOCK_H
+
+/**
+ * @file apr_thread_rwlock.h
+ * @brief APR Reader/Writer Lock Routines
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if APR_HAS_THREADS
+
+/**
+ * @defgroup apr_thread_rwlock Reader/Writer Lock Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/** Opaque read-write thread-safe lock. */
+typedef struct apr_thread_rwlock_t apr_thread_rwlock_t;
+
+/**
+ * Note: The following operations have undefined results: unlocking a
+ * read-write lock which is not locked in the calling thread; write
+ * locking a read-write lock which is already locked by the calling
+ * thread; destroying a read-write lock more than once; clearing or
+ * destroying the pool from which a <b>locked</b> read-write lock is
+ * allocated.
+ */
+
+/**
+ * Create and initialize a read-write lock that can be used to synchronize
+ * threads.
+ * @param rwlock the memory address where the newly created readwrite lock
+ *        will be stored.
+ * @param pool the pool from which to allocate the mutex.
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_create(apr_thread_rwlock_t **rwlock,
+                                                   apr_pool_t *pool);
+/**
+ * Acquire a shared-read lock on the given read-write lock. This will allow
+ * multiple threads to enter the same critical section while they have acquired
+ * the read lock.
+ * @param rwlock the read-write lock on which to acquire the shared read.
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_rdlock(apr_thread_rwlock_t *rwlock);
+
+/**
+ * Attempt to acquire the shared-read lock on the given read-write lock. This
+ * is the same as apr_thread_rwlock_rdlock(), only that the function fails
+ * if there is another thread holding the write lock, or if there are any
+ * write threads blocking on the lock. If the function fails for this case,
+ * APR_EBUSY will be returned. Note: it is important that the
+ * APR_STATUS_IS_EBUSY(s) macro be used to determine if the return value was
+ * APR_EBUSY, for portability reasons.
+ * @param rwlock the rwlock on which to attempt the shared read.
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_tryrdlock(apr_thread_rwlock_t *rwlock);
+
+/**
+ * Acquire an exclusive-write lock on the given read-write lock. This will
+ * allow only one single thread to enter the critical sections. If there
+ * are any threads currently holding the read-lock, this thread is put to
+ * sleep until it can have exclusive access to the lock.
+ * @param rwlock the read-write lock on which to acquire the exclusive write.
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_wrlock(apr_thread_rwlock_t *rwlock);
+
+/**
+ * Attempt to acquire the exclusive-write lock on the given read-write lock. 
+ * This is the same as apr_thread_rwlock_wrlock(), only that the function fails
+ * if there is any other thread holding the lock (for reading or writing),
+ * in which case the function will return APR_EBUSY. Note: it is important
+ * that the APR_STATUS_IS_EBUSY(s) macro be used to determine if the return
+ * value was APR_EBUSY, for portability reasons.
+ * @param rwlock the rwlock on which to attempt the exclusive write.
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_trywrlock(apr_thread_rwlock_t *rwlock);
+
+/**
+ * Release either the read or write lock currently held by the calling thread
+ * associated with the given read-write lock.
+ * @param rwlock the read-write lock to be released (unlocked).
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_unlock(apr_thread_rwlock_t *rwlock);
+
+/**
+ * Destroy the read-write lock and free the associated memory.
+ * @param rwlock the rwlock to destroy.
+ */
+APR_DECLARE(apr_status_t) apr_thread_rwlock_destroy(apr_thread_rwlock_t *rwlock);
+
+/**
+ * Get the pool used by this thread_rwlock.
+ * @return apr_pool_t the pool
+ */
+APR_POOL_DECLARE_ACCESSOR(thread_rwlock);
+
+#endif  /* APR_HAS_THREADS */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_THREAD_RWLOCK_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_time.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_time.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_time.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,235 @@
+/* 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.
+ */
+
+#ifndef APR_TIME_H
+#define APR_TIME_H
+
+/**
+ * @file apr_time.h
+ * @brief APR Time Library
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_time Time Routines
+ * @ingroup APR 
+ * @{
+ */
+
+/** month names */
+APR_DECLARE_DATA extern const char apr_month_snames[12][4];
+/** day names */
+APR_DECLARE_DATA extern const char apr_day_snames[7][4];
+
+
+/** number of microseconds since 00:00:00 january 1, 1970 UTC */
+typedef apr_int64_t apr_time_t;
+
+
+/** mechanism to properly type apr_time_t literals */
+#define APR_TIME_C(val) APR_INT64_C(val)
+
+/** mechanism to properly print apr_time_t values */
+#define APR_TIME_T_FMT APR_INT64_T_FMT
+
+/** intervals for I/O timeouts, in microseconds */
+typedef apr_int64_t apr_interval_time_t;
+/** short interval for I/O timeouts, in microseconds */
+typedef apr_int32_t apr_short_interval_time_t;
+
+/** number of microseconds per second */
+#define APR_USEC_PER_SEC APR_TIME_C(1000000)
+
+/** @return apr_time_t as a second */
+#define apr_time_sec(time) ((time) / APR_USEC_PER_SEC)
+
+/** @return apr_time_t as a usec */
+#define apr_time_usec(time) ((time) % APR_USEC_PER_SEC)
+
+/** @return apr_time_t as a msec */
+#define apr_time_msec(time) (((time) / 1000) % 1000)
+
+/** @return apr_time_t as a msec */
+#define apr_time_as_msec(time) ((time) / 1000)
+
+/** @return milliseconds as an apr_time_t */
+#define apr_time_from_msec(msec) ((apr_time_t)(msec) * 1000)
+
+/** @return seconds as an apr_time_t */
+#define apr_time_from_sec(sec) ((apr_time_t)(sec) * APR_USEC_PER_SEC)
+
+/** @return a second and usec combination as an apr_time_t */
+#define apr_time_make(sec, usec) ((apr_time_t)(sec) * APR_USEC_PER_SEC \
+                                + (apr_time_t)(usec))
+
+/**
+ * @return the current time
+ */
+APR_DECLARE(apr_time_t) apr_time_now(void);
+
+/** @see apr_time_exp_t */
+typedef struct apr_time_exp_t apr_time_exp_t;
+
+/**
+ * a structure similar to ANSI struct tm with the following differences:
+ *  - tm_usec isn't an ANSI field
+ *  - tm_gmtoff isn't an ANSI field (it's a bsdism)
+ */
+struct apr_time_exp_t {
+    /** microseconds past tm_sec */
+    apr_int32_t tm_usec;
+    /** (0-61) seconds past tm_min */
+    apr_int32_t tm_sec;
+    /** (0-59) minutes past tm_hour */
+    apr_int32_t tm_min;
+    /** (0-23) hours past midnight */
+    apr_int32_t tm_hour;
+    /** (1-31) day of the month */
+    apr_int32_t tm_mday;
+    /** (0-11) month of the year */
+    apr_int32_t tm_mon;
+    /** year since 1900 */
+    apr_int32_t tm_year;
+    /** (0-6) days since sunday */
+    apr_int32_t tm_wday;
+    /** (0-365) days since jan 1 */
+    apr_int32_t tm_yday;
+    /** daylight saving time */
+    apr_int32_t tm_isdst;
+    /** seconds east of UTC */
+    apr_int32_t tm_gmtoff;
+};
+
+/**
+ * convert an ansi time_t to an apr_time_t
+ * @param result the resulting apr_time_t
+ * @param input the time_t to convert
+ */
+APR_DECLARE(apr_status_t) apr_time_ansi_put(apr_time_t *result, 
+                                                    time_t input);
+
+/**
+ * convert a time to its human readable components using an offset
+ * from GMT
+ * @param result the exploded time
+ * @param input the time to explode
+ * @param offs the number of seconds offset to apply
+ */
+APR_DECLARE(apr_status_t) apr_time_exp_tz(apr_time_exp_t *result,
+                                          apr_time_t input,
+                                          apr_int32_t offs);
+
+/**
+ * convert a time to its human readable components in GMT timezone
+ * @param result the exploded time
+ * @param input the time to explode
+ */
+APR_DECLARE(apr_status_t) apr_time_exp_gmt(apr_time_exp_t *result, 
+                                           apr_time_t input);
+
+/**
+ * convert a time to its human readable components in local timezone
+ * @param result the exploded time
+ * @param input the time to explode
+ */
+APR_DECLARE(apr_status_t) apr_time_exp_lt(apr_time_exp_t *result, 
+                                          apr_time_t input);
+
+/**
+ * Convert time value from human readable format to a numeric apr_time_t 
+ * e.g. elapsed usec since epoch
+ * @param result the resulting imploded time
+ * @param input the input exploded time
+ */
+APR_DECLARE(apr_status_t) apr_time_exp_get(apr_time_t *result, 
+                                           apr_time_exp_t *input);
+
+/**
+ * Convert time value from human readable format to a numeric apr_time_t that
+ * always represents GMT
+ * @param result the resulting imploded time
+ * @param input the input exploded time
+ */
+APR_DECLARE(apr_status_t) apr_time_exp_gmt_get(apr_time_t *result, 
+                                               apr_time_exp_t *input);
+
+/**
+ * Sleep for the specified number of micro-seconds.
+ * @param t desired amount of time to sleep.
+ * @warning May sleep for longer than the specified time. 
+ */
+APR_DECLARE(void) apr_sleep(apr_interval_time_t t);
+
+/** length of a RFC822 Date */
+#define APR_RFC822_DATE_LEN (30)
+/**
+ * apr_rfc822_date formats dates in the RFC822
+ * format in an efficient manner.  It is a fixed length
+ * format which requires the indicated amount of storage,
+ * including the trailing NUL terminator.
+ * @param date_str String to write to.
+ * @param t the time to convert 
+ */
+APR_DECLARE(apr_status_t) apr_rfc822_date(char *date_str, apr_time_t t);
+
+/** length of a CTIME date */
+#define APR_CTIME_LEN (25)
+/**
+ * apr_ctime formats dates in the ctime() format
+ * in an efficient manner.  it is a fixed length format
+ * and requires the indicated amount of storage including
+ * the trailing NUL terminator.
+ * Unlike ANSI/ISO C ctime(), apr_ctime() does not include
+ * a \n at the end of the string.
+ * @param date_str String to write to.
+ * @param t the time to convert 
+ */
+APR_DECLARE(apr_status_t) apr_ctime(char *date_str, apr_time_t t);
+
+/**
+ * formats the exploded time according to the format specified
+ * @param s string to write to
+ * @param retsize The length of the returned string
+ * @param max The maximum length of the string
+ * @param format The format for the time string
+ * @param tm The time to convert
+ */
+APR_DECLARE(apr_status_t) apr_strftime(char *s, apr_size_t *retsize, 
+                                       apr_size_t max, const char *format, 
+                                       apr_time_exp_t *tm);
+
+/**
+ * Improve the clock resolution for the lifetime of the given pool.
+ * Generally this is only desireable on benchmarking and other very
+ * time-sensitive applications, and has no impact on most platforms.
+ * @param p The pool to associate the finer clock resolution 
+ */
+APR_DECLARE(void) apr_time_clock_hires(apr_pool_t *p);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_TIME_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uri.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uri.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uri.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,178 @@
+/* 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.
+ */
+
+/*
+ * apr_uri.h: External Interface of apr_uri.c
+ */
+
+/**
+ * @file apr_uri.h
+ * @brief APR-UTIL URI Routines
+ */
+
+#ifndef APR_URI_H
+#define APR_URI_H
+
+#include "apu.h"
+
+#include "apr_network_io.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup APR_Util_URI URI
+ * @ingroup APR_Util
+ * @{
+ */
+
+#define APR_URI_FTP_DEFAULT_PORT         21 /**< default FTP port */
+#define APR_URI_SSH_DEFAULT_PORT         22 /**< default SSH port */
+#define APR_URI_TELNET_DEFAULT_PORT      23 /**< default telnet port */
+#define APR_URI_GOPHER_DEFAULT_PORT      70 /**< default Gopher port */
+#define APR_URI_HTTP_DEFAULT_PORT        80 /**< default HTTP port */
+#define APR_URI_POP_DEFAULT_PORT        110 /**< default POP port */
+#define APR_URI_NNTP_DEFAULT_PORT       119 /**< default NNTP port */
+#define APR_URI_IMAP_DEFAULT_PORT       143 /**< default IMAP port */
+#define APR_URI_PROSPERO_DEFAULT_PORT   191 /**< default Prospero port */
+#define APR_URI_WAIS_DEFAULT_PORT       210 /**< default WAIS port */
+#define APR_URI_LDAP_DEFAULT_PORT       389 /**< default LDAP port */
+#define APR_URI_HTTPS_DEFAULT_PORT      443 /**< default HTTPS port */
+#define APR_URI_RTSP_DEFAULT_PORT       554 /**< default RTSP port */
+#define APR_URI_SNEWS_DEFAULT_PORT      563 /**< default SNEWS port */
+#define APR_URI_ACAP_DEFAULT_PORT       674 /**< default ACAP port */
+#define APR_URI_NFS_DEFAULT_PORT       2049 /**< default NFS port */
+#define APR_URI_TIP_DEFAULT_PORT       3372 /**< default TIP port */
+#define APR_URI_SIP_DEFAULT_PORT       5060 /**< default SIP port */
+
+/** Flags passed to unparse_uri_components(): */
+/** suppress "scheme://user\@site:port" */
+#define APR_URI_UNP_OMITSITEPART    (1U<<0)
+/** Just omit user */
+#define APR_URI_UNP_OMITUSER        (1U<<1)
+/** Just omit password */
+#define APR_URI_UNP_OMITPASSWORD    (1U<<2)
+/** omit "user:password\@" part */
+#define APR_URI_UNP_OMITUSERINFO    (APR_URI_UNP_OMITUSER | \
+                                     APR_URI_UNP_OMITPASSWORD)
+/** Show plain text password (default: show XXXXXXXX) */
+#define APR_URI_UNP_REVEALPASSWORD  (1U<<3)
+/** Show "scheme://user\@site:port" only */
+#define APR_URI_UNP_OMITPATHINFO    (1U<<4)
+/** Omit the "?queryarg" from the path */
+#define APR_URI_UNP_OMITQUERY       (1U<<5)
+
+/** @see apr_uri_t */
+typedef struct apr_uri_t apr_uri_t;
+
+/**
+ * A structure to encompass all of the fields in a uri
+ */
+struct apr_uri_t {
+    /** scheme ("http"/"ftp"/...) */
+    char *scheme;
+    /** combined [user[:password]\@]host[:port] */
+    char *hostinfo;
+    /** user name, as in http://user:passwd\@host:port/ */
+    char *user;
+    /** password, as in http://user:passwd\@host:port/ */
+    char *password;
+    /** hostname from URI (or from Host: header) */
+    char *hostname;
+    /** port string (integer representation is in "port") */
+    char *port_str;
+    /** the request path (or NULL if only scheme://host was given) */
+    char *path;
+    /** Everything after a '?' in the path, if present */
+    char *query;
+    /** Trailing "#fragment" string, if present */
+    char *fragment;
+
+    /** structure returned from gethostbyname() */
+    struct hostent *hostent;
+
+    /** The port number, numeric, valid only if port_str != NULL */
+    apr_port_t port;
+    
+    /** has the structure been initialized */
+    unsigned is_initialized:1;
+
+    /** has the DNS been looked up yet */
+    unsigned dns_looked_up:1;
+    /** has the dns been resolved yet */
+    unsigned dns_resolved:1;
+};
+
+/* apr_uri.c */
+/**
+ * Return the default port for a given scheme.  The schemes recognized are
+ * http, ftp, https, gopher, wais, nntp, snews, and prospero
+ * @param scheme_str The string that contains the current scheme
+ * @return The default port for this scheme
+ */ 
+APU_DECLARE(apr_port_t) apr_uri_port_of_scheme(const char *scheme_str);
+
+/**
+ * Unparse a apr_uri_t structure to an URI string.  Optionally 
+ * suppress the password for security reasons.
+ * @param p The pool to allocate out of
+ * @param uptr All of the parts of the uri
+ * @param flags How to unparse the uri.  One of:
+ * <PRE>
+ *    APR_URI_UNP_OMITSITEPART        Suppress "scheme://user\@site:port" 
+ *    APR_URI_UNP_OMITUSER            Just omit user 
+ *    APR_URI_UNP_OMITPASSWORD        Just omit password 
+ *    APR_URI_UNP_OMITUSERINFO        Omit "user:password\@" part
+ *    APR_URI_UNP_REVEALPASSWORD      Show plain text password (default: show XXXXXXXX)
+ *    APR_URI_UNP_OMITPATHINFO        Show "scheme://user\@site:port" only 
+ *    APR_URI_UNP_OMITQUERY           Omit "?queryarg" or "#fragment" 
+ * </PRE>
+ * @return The uri as a string
+ */
+APU_DECLARE(char *) apr_uri_unparse(apr_pool_t *p, 
+                                    const apr_uri_t *uptr,
+                                    unsigned flags);
+
+/**
+ * Parse a given URI, fill in all supplied fields of a apr_uri_t
+ * structure. This eliminates the necessity of extracting host, port,
+ * path, query info repeatedly in the modules.
+ * @param p The pool to allocate out of
+ * @param uri The uri to parse
+ * @param uptr The apr_uri_t to fill out
+ * @return APR_SUCCESS for success or error code
+ */
+APU_DECLARE(apr_status_t) apr_uri_parse(apr_pool_t *p, const char *uri, 
+                                        apr_uri_t *uptr);
+
+/**
+ * Special case for CONNECT parsing: it comes with the hostinfo part only
+ * @param p The pool to allocate out of
+ * @param hostinfo The hostinfo string to parse
+ * @param uptr The apr_uri_t to fill out
+ * @return APR_SUCCESS for success or error code
+ */
+APU_DECLARE(apr_status_t) apr_uri_parse_hostinfo(apr_pool_t *p, 
+                                                 const char *hostinfo, 
+                                                 apr_uri_t *uptr);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_URI_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_user.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_user.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_user.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,158 @@
+/* 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.
+ */
+
+#ifndef APR_USER_H
+#define APR_USER_H
+
+/**
+ * @file apr_user.h
+ * @brief APR User ID Services 
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+#include "apr_pools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_user User and Group ID Services
+ * @ingroup APR 
+ * @{
+ */
+
+/**
+ * Structure for determining user ownership.
+ */
+#ifdef WIN32
+typedef PSID                      apr_uid_t;
+#else
+typedef uid_t                     apr_uid_t;
+#endif
+
+/**
+ * Structure for determining group ownership.
+ */
+#ifdef WIN32
+typedef PSID                      apr_gid_t;
+#else
+typedef gid_t                     apr_gid_t;
+#endif
+
+#if APR_HAS_USER 
+
+/**
+ * Get the userid (and groupid) of the calling process
+ * @param userid   Returns the user id
+ * @param groupid  Returns the user's group id
+ * @param p The pool from which to allocate working space
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+APR_DECLARE(apr_status_t) apr_uid_current(apr_uid_t *userid,
+                                          apr_gid_t *groupid,
+                                          apr_pool_t *p);
+
+/**
+ * Get the user name for a specified userid
+ * @param username Pointer to new string containing user name (on output)
+ * @param userid The userid
+ * @param p The pool from which to allocate the string
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+APR_DECLARE(apr_status_t) apr_uid_name_get(char **username, apr_uid_t userid,
+                                           apr_pool_t *p);
+
+/**
+ * Get the userid (and groupid) for the specified username
+ * @param userid   Returns the user id
+ * @param groupid  Returns the user's group id
+ * @param username The username to lookup
+ * @param p The pool from which to allocate working space
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+APR_DECLARE(apr_status_t) apr_uid_get(apr_uid_t *userid, apr_gid_t *groupid,
+                                      const char *username, apr_pool_t *p);
+
+/**
+ * Get the home directory for the named user
+ * @param dirname Pointer to new string containing directory name (on output)
+ * @param username The named user
+ * @param p The pool from which to allocate the string
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+APR_DECLARE(apr_status_t) apr_uid_homepath_get(char **dirname, 
+                                               const char *username, 
+                                               apr_pool_t *p);
+
+/**
+ * Compare two user identifiers for equality.
+ * @param left One uid to test
+ * @param right Another uid to test
+ * @return APR_SUCCESS if the apr_uid_t strutures identify the same user,
+ * APR_EMISMATCH if not, APR_BADARG if an apr_uid_t is invalid.
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+#if defined(WIN32)
+APR_DECLARE(apr_status_t) apr_uid_compare(apr_uid_t left, apr_uid_t right);
+#else
+#define apr_uid_compare(left,right) (((left) == (right)) ? APR_SUCCESS : APR_EMISMATCH)
+#endif
+
+/**
+ * Get the group name for a specified groupid
+ * @param groupname Pointer to new string containing group name (on output)
+ * @param groupid The groupid
+ * @param p The pool from which to allocate the string
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+APR_DECLARE(apr_status_t) apr_gid_name_get(char **groupname, 
+                                             apr_gid_t groupid, apr_pool_t *p);
+
+/**
+ * Get the groupid for a specified group name
+ * @param groupid Pointer to the group id (on output)
+ * @param groupname The group name to look up
+ * @param p The pool from which to allocate the string
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+APR_DECLARE(apr_status_t) apr_gid_get(apr_gid_t *groupid, 
+                                      const char *groupname, apr_pool_t *p);
+
+/**
+ * Compare two group identifiers for equality.
+ * @param left One gid to test
+ * @param right Another gid to test
+ * @return APR_SUCCESS if the apr_gid_t strutures identify the same group,
+ * APR_EMISMATCH if not, APR_BADARG if an apr_gid_t is invalid.
+ * @remark This function is available only if APR_HAS_USER is defined.
+ */
+#if defined(WIN32)
+APR_DECLARE(apr_status_t) apr_gid_compare(apr_gid_t left, apr_gid_t right);
+#else
+#define apr_gid_compare(left,right) (((left) == (right)) ? APR_SUCCESS : APR_EMISMATCH)
+#endif
+
+#endif  /* ! APR_HAS_USER */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_USER_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uuid.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uuid.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_uuid.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,76 @@
+/* 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.
+ */
+
+/**
+ * @file apr_uuid.h
+ * @brief APR UUID library
+ */
+#ifndef APR_UUID_H
+#define APR_UUID_H
+
+#include "apu.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup APR_UUID UUID Handling
+ * @ingroup APR
+ * @{
+ */
+
+/**
+ * we represent a UUID as a block of 16 bytes.
+ */
+
+typedef struct {
+    unsigned char data[16]; /**< the actual UUID */
+} apr_uuid_t;
+
+/** UUIDs are formatted as: 00112233-4455-6677-8899-AABBCCDDEEFF */
+#define APR_UUID_FORMATTED_LENGTH 36
+
+
+/**
+ * Generate and return a (new) UUID
+ * @param uuid The resulting UUID
+ */ 
+APU_DECLARE(void) apr_uuid_get(apr_uuid_t *uuid);
+
+/**
+ * Format a UUID into a string, following the standard format
+ * @param buffer The buffer to place the formatted UUID string into. It must
+ *               be at least APR_UUID_FORMATTED_LENGTH + 1 bytes long to hold
+ *               the formatted UUID and a null terminator
+ * @param uuid The UUID to format
+ */ 
+APU_DECLARE(void) apr_uuid_format(char *buffer, const apr_uuid_t *uuid);
+
+/**
+ * Parse a standard-format string into a UUID
+ * @param uuid The resulting UUID
+ * @param uuid_str The formatted UUID
+ */ 
+APU_DECLARE(apr_status_t) apr_uuid_parse(apr_uuid_t *uuid, const char *uuid_str);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_UUID_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_version.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_version.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_version.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,164 @@
+/* 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.
+ */
+
+#ifndef APR_VERSION_H
+#define APR_VERSION_H
+
+/**
+ * @file apr_version.h
+ * @brief APR Versioning Interface
+ * 
+ * APR's Version
+ *
+ * There are several different mechanisms for accessing the version. There
+ * is a string form, and a set of numbers; in addition, there are constants
+ * which can be compiled into your application, and you can query the library
+ * being used for its actual version.
+ *
+ * Note that it is possible for an application to detect that it has been
+ * compiled against a different version of APR by use of the compile-time
+ * constants and the use of the run-time query function.
+ *
+ * APR version numbering follows the guidelines specified in:
+ *
+ *     http://apr.apache.org/versioning.html
+ */
+
+
+#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
+ * authoritative version numbers for APR. 
+ */
+
+/** major version 
+ * Major API changes that could cause compatibility problems for older
+ * programs such as structure size changes.  No binary compatibility is
+ * possible across a change in the major version.
+ */
+#define APR_MAJOR_VERSION       1
+
+/** minor version
+ * Minor API changes that do not cause binary compatibility problems.
+ * Reset to 0 when upgrading APR_MAJOR_VERSION
+ */
+#define APR_MINOR_VERSION       4
+
+/** patch level 
+ * The Patch Level never includes API changes, simply bug fixes.
+ * Reset to 0 when upgrading APR_MINOR_VERSION
+ */
+#define APR_PATCH_VERSION       8
+
+/** 
+ * The symbol APR_IS_DEV_VERSION is only defined for internal,
+ * "development" copies of APR.  It is undefined for released versions
+ * of APR.
+ */
+/* #define APR_IS_DEV_VERSION */
+
+/**
+ * Check at compile time if the APR version is at least a certain
+ * level.
+ * @param major The major version component of the version checked
+ * for (e.g., the "1" of "1.3.0").
+ * @param minor The minor version component of the version checked
+ * for (e.g., the "3" of "1.3.0").
+ * @param patch The patch level component of the version checked
+ * for (e.g., the "0" of "1.3.0").
+ * @remark This macro is available with APR versions starting with
+ * 1.3.0.
+ */
+#define APR_VERSION_AT_LEAST(major,minor,patch)                    \
+(((major) < APR_MAJOR_VERSION)                                     \
+ || ((major) == APR_MAJOR_VERSION && (minor) < APR_MINOR_VERSION) \
+ || ((major) == APR_MAJOR_VERSION && (minor) == APR_MINOR_VERSION && (patch) <= APR_PATCH_VERSION))
+
+#if defined(APR_IS_DEV_VERSION) || defined(DOXYGEN)
+/** Internal: string form of the "is dev" flag */
+#ifndef APR_IS_DEV_STRING
+#define APR_IS_DEV_STRING "-dev"
+#endif
+#else
+#define APR_IS_DEV_STRING ""
+#endif
+
+/* APR_STRINGIFY is defined here, and also in apr_general.h, so wrap it */
+#ifndef APR_STRINGIFY
+/** Properly quote a value as a string in the C preprocessor */
+#define APR_STRINGIFY(n) APR_STRINGIFY_HELPER(n)
+/** Helper macro for APR_STRINGIFY */
+#define APR_STRINGIFY_HELPER(n) #n
+#endif
+
+/** The formatted string of APR's version */
+#define APR_VERSION_STRING \
+     APR_STRINGIFY(APR_MAJOR_VERSION) "." \
+     APR_STRINGIFY(APR_MINOR_VERSION) "." \
+     APR_STRINGIFY(APR_PATCH_VERSION) \
+     APR_IS_DEV_STRING
+
+/** An alternative formatted string of APR's version */
+/* macro for Win32 .rc files using numeric csv representation */
+#define APR_VERSION_STRING_CSV APR_MAJOR_VERSION ##, \
+                             ##APR_MINOR_VERSION ##, \
+                             ##APR_PATCH_VERSION
+
+
+#ifndef APR_VERSION_ONLY
+
+/* The C language API to access the version at run time, 
+ * as opposed to compile time.  APR_VERSION_ONLY may be defined 
+ * externally when preprocessing apr_version.h to obtain strictly 
+ * the C Preprocessor macro declarations.
+ */
+
+#include "apr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** 
+ * The numeric version information is broken out into fields within this 
+ * structure. 
+ */
+typedef struct {
+    int major;      /**< major number */
+    int minor;      /**< minor number */
+    int patch;      /**< patch number */
+    int is_dev;     /**< is development (1 or 0) */
+} apr_version_t;
+
+/**
+ * Return APR's version information information in a numeric form.
+ *
+ *  @param pvsn Pointer to a version structure for returning the version
+ *              information.
+ */
+APR_DECLARE(void) apr_version(apr_version_t *pvsn);
+
+/** Return APR's version information as a string. */
+APR_DECLARE(const char *) apr_version_string(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef APR_VERSION_ONLY */
+
+#endif /* ndef APR_VERSION_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_want.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_want.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_want.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,128 @@
+/* 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"        /* configuration data */
+/**
+ * @file apr_want.h
+ * @brief APR Standard Headers Support
+ *
+ * <PRE>
+ * Features:
+ *
+ *   APR_WANT_STRFUNC:  strcmp, strcat, strcpy, etc
+ *   APR_WANT_MEMFUNC:  memcmp, memcpy, etc
+ *   APR_WANT_STDIO:    <stdio.h> and related bits
+ *   APR_WANT_IOVEC:    struct iovec
+ *   APR_WANT_BYTEFUNC: htons, htonl, ntohl, ntohs
+ *
+ * Typical usage:
+ *
+ *   \#define APR_WANT_STRFUNC
+ *   \#define APR_WANT_MEMFUNC
+ *   \#include "apr_want.h"
+ *
+ * The appropriate headers will be included.
+ *
+ * Note: it is safe to use this in a header (it won't interfere with other
+ *       headers' or source files' use of apr_want.h)
+ * </PRE>
+ */
+
+/* --------------------------------------------------------------------- */
+
+#ifdef APR_WANT_STRFUNC
+
+#if APR_HAVE_STRING_H
+#include <string.h>
+#endif
+#if APR_HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+#undef APR_WANT_STRFUNC
+#endif
+
+/* --------------------------------------------------------------------- */
+
+#ifdef APR_WANT_MEMFUNC
+
+#if APR_HAVE_STRING_H
+#include <string.h>
+#endif
+
+#undef APR_WANT_MEMFUNC
+#endif
+
+/* --------------------------------------------------------------------- */
+
+#ifdef APR_WANT_STDIO
+
+#if APR_HAVE_STDIO_H
+#include <stdio.h>
+#endif
+
+#undef APR_WANT_STDIO
+#endif
+
+/* --------------------------------------------------------------------- */
+
+#ifdef APR_WANT_IOVEC
+
+#if APR_HAVE_IOVEC
+
+#if APR_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#else
+
+#ifndef APR_IOVEC_DEFINED
+#define APR_IOVEC_DEFINED
+/* MapGuide change: Only define structu iovec if ACE hasn't */
+#if !defined (ACE_OS_INCLUDE_SYS_OS_UIO_H)
+struct iovec
+{
+    void *iov_base;
+    size_t iov_len;
+};
+#endif /* ACE_OS_INCLUDE_SYS_OS_UIO_H */
+
+#endif /* !APR_IOVEC_DEFINED */
+
+#endif /* APR_HAVE_IOVEC */
+
+#undef APR_WANT_IOVEC
+#endif
+
+/* --------------------------------------------------------------------- */
+
+#ifdef APR_WANT_BYTEFUNC
+
+/* Single Unix says they are in arpa/inet.h.  Linux has them in
+ * netinet/in.h.  FreeBSD has them in arpa/inet.h but requires that
+ * netinet/in.h be included first.
+ */
+#if APR_HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if APR_HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#undef APR_WANT_BYTEFUNC
+#endif
+
+/* --------------------------------------------------------------------- */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xlate.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xlate.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xlate.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,163 @@
+/* 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.
+ */
+
+#ifndef APR_XLATE_H
+#define APR_XLATE_H
+
+#include "apu.h"
+#include "apr_pools.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @file apr_xlate.h
+ * @brief APR I18N translation library
+ */
+
+/**
+ * @defgroup APR_XLATE I18N translation library
+ * @ingroup APR
+ * @{
+ */
+/** Opaque translation buffer */
+typedef struct apr_xlate_t            apr_xlate_t;
+
+/**
+ * Set up for converting text from one charset to another.
+ * @param convset The handle to be filled in by this function
+ * @param topage The name of the target charset
+ * @param frompage The name of the source charset
+ * @param pool The pool to use
+ * @remark
+ *  Specify APR_DEFAULT_CHARSET for one of the charset
+ *  names to indicate the charset of the source code at
+ *  compile time.  This is useful if there are literal
+ *  strings in the source code which must be translated
+ *  according to the charset of the source code.
+ *  APR_DEFAULT_CHARSET is not useful if the source code
+ *  of the caller was not encoded in the same charset as
+ *  APR at compile time.
+ *
+ * @remark
+ *  Specify APR_LOCALE_CHARSET for one of the charset
+ *  names to indicate the charset of the current locale.
+ *
+ * @remark
+ *  Return APR_EINVAL if unable to procure a convset, or APR_ENOTIMPL
+ *  if charset transcoding is not available in this instance of
+ *  apr-util at all (i.e., APR_HAS_XLATE is undefined).
+ */
+APU_DECLARE(apr_status_t) apr_xlate_open(apr_xlate_t **convset, 
+                                         const char *topage, 
+                                         const char *frompage, 
+                                         apr_pool_t *pool);
+
+/** 
+ * This is to indicate the charset of the sourcecode at compile time
+ * names to indicate the charset of the source code at
+ * compile time.  This is useful if there are literal
+ * strings in the source code which must be translated
+ * according to the charset of the source code.
+ */
+#define APR_DEFAULT_CHARSET (const char *)0
+/**
+ * To indicate charset names of the current locale 
+ */
+#define APR_LOCALE_CHARSET (const char *)1
+
+/**
+ * Find out whether or not the specified conversion is single-byte-only.
+ * @param convset The handle allocated by apr_xlate_open, specifying the 
+ *                parameters of conversion
+ * @param onoff Output: whether or not the conversion is single-byte-only
+ * @remark
+ *  Return APR_ENOTIMPL if charset transcoding is not available
+ *  in this instance of apr-util (i.e., APR_HAS_XLATE is undefined).
+ */
+APU_DECLARE(apr_status_t) apr_xlate_sb_get(apr_xlate_t *convset, int *onoff);
+
+/**
+ * Convert a buffer of text from one codepage to another.
+ * @param convset The handle allocated by apr_xlate_open, specifying 
+ *                the parameters of conversion
+ * @param inbuf The address of the source buffer
+ * @param inbytes_left Input: the amount of input data to be translated
+ *                     Output: the amount of input data not yet translated    
+ * @param outbuf The address of the destination buffer
+ * @param outbytes_left Input: the size of the output buffer
+ *                      Output: the amount of the output buffer not yet used
+ * @remark
+ * Returns APR_ENOTIMPL if charset transcoding is not available
+ * in this instance of apr-util (i.e., APR_HAS_XLATE is undefined).
+ * Returns APR_INCOMPLETE if the input buffer ends in an incomplete
+ * multi-byte character.
+ *
+ * To correctly terminate the output buffer for some multi-byte
+ * character set encodings, a final call must be made to this function
+ * after the complete input string has been converted, passing
+ * the inbuf and inbytes_left parameters as NULL.  (Note that this
+ * mode only works from version 1.1.0 onwards)
+ */
+APU_DECLARE(apr_status_t) apr_xlate_conv_buffer(apr_xlate_t *convset, 
+                                                const char *inbuf, 
+                                                apr_size_t *inbytes_left, 
+                                                char *outbuf,
+                                                apr_size_t *outbytes_left);
+
+/* @see apr_file_io.h the comment in apr_file_io.h about this hack */
+#ifdef APR_NOT_DONE_YET
+/**
+ * The purpose of apr_xlate_conv_char is to translate one character
+ * at a time.  This needs to be written carefully so that it works
+ * with double-byte character sets. 
+ * @param convset The handle allocated by apr_xlate_open, specifying the
+ *                parameters of conversion
+ * @param inchar The character to convert
+ * @param outchar The converted character
+ */
+APU_DECLARE(apr_status_t) apr_xlate_conv_char(apr_xlate_t *convset, 
+                                              char inchar, char outchar);
+#endif
+
+/**
+ * Convert a single-byte character from one charset to another.
+ * @param convset The handle allocated by apr_xlate_open, specifying the 
+ *                parameters of conversion
+ * @param inchar The single-byte character to convert.
+ * @warning This only works when converting between single-byte character sets.
+ *          -1 will be returned if the conversion can't be performed.
+ */
+APU_DECLARE(apr_int32_t) apr_xlate_conv_byte(apr_xlate_t *convset, 
+                                             unsigned char inchar);
+
+/**
+ * Close a codepage translation handle.
+ * @param convset The codepage translation handle to close
+ * @remark
+ *  Return APR_ENOTIMPL if charset transcoding is not available
+ *  in this instance of apr-util (i.e., APR_HAS_XLATE is undefined).
+ */
+APU_DECLARE(apr_status_t) apr_xlate_close(apr_xlate_t *convset);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APR_XLATE_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xml.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xml.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apr_xml.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,356 @@
+/* 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.
+ */
+/**
+ * @file apr_xml.h
+ * @brief APR-UTIL XML Library
+ */
+#ifndef APR_XML_H
+#define APR_XML_H
+
+/**
+ * @defgroup APR_Util_XML XML 
+ * @ingroup APR_Util
+ * @{
+ */
+#include "apr_pools.h"
+#include "apr_tables.h"
+#include "apr_file_io.h"
+
+#include "apu.h"
+#if APR_CHARSET_EBCDIC
+#include "apr_xlate.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @package Apache XML library
+ */
+
+/* -------------------------------------------------------------------- */
+
+/* ### these will need to move at some point to a more logical spot */
+
+/** @see apr_text */
+typedef struct apr_text apr_text;
+
+/** Structure to keep a linked list of pieces of text */
+struct apr_text {
+    /** The current piece of text */
+    const char *text;
+    /** a pointer to the next piece of text */
+    struct apr_text *next;
+};
+
+/** @see apr_text_header */
+typedef struct apr_text_header apr_text_header;
+
+/** A list of pieces of text */
+struct apr_text_header {
+    /** The first piece of text in the list */
+    apr_text *first;
+    /** The last piece of text in the list */
+    apr_text *last;
+};
+
+/**
+ * Append a piece of text to the end of a list
+ * @param p The pool to allocate out of
+ * @param hdr The text header to append to
+ * @param text The new text to append
+ */
+APU_DECLARE(void) apr_text_append(apr_pool_t *p, apr_text_header *hdr,
+                                  const char *text);
+
+
+/* --------------------------------------------------------------------
+**
+** XML PARSING
+*/
+
+/*
+** Qualified namespace values
+**
+** APR_XML_NS_DAV_ID
+**    We always insert the "DAV:" namespace URI at the head of the
+**    namespace array. This means that it will always be at ID==0,
+**    making it much easier to test for.
+**
+** APR_XML_NS_NONE
+**    This special ID is used for two situations:
+**
+**    1) The namespace prefix begins with "xml" (and we do not know
+**       what it means). Namespace prefixes with "xml" (any case) as
+**       their first three characters are reserved by the XML Namespaces
+**       specification for future use. mod_dav will pass these through
+**       unchanged. When this identifier is used, the prefix is LEFT in
+**       the element/attribute name. Downstream processing should not
+**       prepend another prefix.
+**
+**    2) The element/attribute does not have a namespace.
+**
+**       a) No prefix was used, and a default namespace has not been
+**          defined.
+**       b) No prefix was used, and the default namespace was specified
+**          to mean "no namespace". This is done with a namespace
+**          declaration of:  xmlns=""
+**          (this declaration is typically used to override a previous
+**          specification for the default namespace)
+**
+**       In these cases, we need to record that the elem/attr has no
+**       namespace so that we will not attempt to prepend a prefix.
+**       All namespaces that are used will have a prefix assigned to
+**       them -- mod_dav will never set or use the default namespace
+**       when generating XML. This means that "no prefix" will always
+**       mean "no namespace".
+**
+**    In both cases, the XML generation will avoid prepending a prefix.
+**    For the first case, this means the original prefix/name will be
+**    inserted into the output stream. For the latter case, it means
+**    the name will have no prefix, and since we never define a default
+**    namespace, this means it will have no namespace.
+**
+** Note: currently, mod_dav understands the "xmlns" prefix and the
+**     "xml:lang" attribute. These are handled specially (they aren't
+**     left within the XML tree), so the APR_XML_NS_NONE value won't ever
+**     really apply to these values.
+*/
+#define APR_XML_NS_DAV_ID	0	/**< namespace ID for "DAV:" */
+#define APR_XML_NS_NONE		-10	/**< no namespace for this elem/attr */
+
+#define APR_XML_NS_ERROR_BASE	-100	/**< used only during processing */
+/** Is this namespace an error? */
+#define APR_XML_NS_IS_ERROR(e)	((e) <= APR_XML_NS_ERROR_BASE)
+
+/** @see apr_xml_attr */
+typedef struct apr_xml_attr apr_xml_attr;
+/** @see apr_xml_elem */
+typedef struct apr_xml_elem apr_xml_elem;
+/** @see apr_xml_doc */
+typedef struct apr_xml_doc apr_xml_doc;
+
+/** apr_xml_attr: holds a parsed XML attribute */
+struct apr_xml_attr {
+    /** attribute name */
+    const char *name;
+    /** index into namespace array */
+    int ns;
+
+    /** attribute value */
+    const char *value;
+
+    /** next attribute */
+    struct apr_xml_attr *next;
+};
+
+/** apr_xml_elem: holds a parsed XML element */
+struct apr_xml_elem {
+    /** element name */
+    const char *name;
+    /** index into namespace array */
+    int ns;
+    /** xml:lang for attrs/contents */
+    const char *lang;
+
+    /** cdata right after start tag */
+    apr_text_header first_cdata;
+    /** cdata after MY end tag */
+    apr_text_header following_cdata;
+
+    /** parent element */
+    struct apr_xml_elem *parent;	
+    /** next (sibling) element */
+    struct apr_xml_elem *next;	
+    /** first child element */
+    struct apr_xml_elem *first_child;
+    /** first attribute */
+    struct apr_xml_attr *attr;		
+
+    /* used only during parsing */
+    /** last child element */
+    struct apr_xml_elem *last_child;
+    /** namespaces scoped by this elem */
+    struct apr_xml_ns_scope *ns_scope;
+
+    /* used by modules during request processing */
+    /** Place for modules to store private data */
+    void *priv;
+};
+
+/** Is this XML element empty? */
+#define APR_XML_ELEM_IS_EMPTY(e) ((e)->first_child == NULL && \
+                                  (e)->first_cdata.first == NULL)
+
+/** apr_xml_doc: holds a parsed XML document */
+struct apr_xml_doc {
+    /** root element */
+    apr_xml_elem *root;	
+    /** array of namespaces used */
+    apr_array_header_t *namespaces;
+};
+
+/** Opaque XML parser structure */
+typedef struct apr_xml_parser apr_xml_parser;
+
+/**
+ * Create an XML parser
+ * @param pool The pool for allocating the parser and the parse results.
+ * @return The new parser.
+ */
+APU_DECLARE(apr_xml_parser *) apr_xml_parser_create(apr_pool_t *pool);
+
+/**
+ * Parse a File, producing a xml_doc
+ * @param p      The pool for allocating the parse results.
+ * @param parser A pointer to *parser (needed so calling function can get
+ *               errors), will be set to NULL on successful completion.
+ * @param ppdoc  A pointer to *apr_xml_doc (which has the parsed results in it)
+ * @param xmlfd  A file to read from.
+ * @param buffer_length Buffer length which would be suitable 
+ * @return Any errors found during parsing.
+ */
+APU_DECLARE(apr_status_t) apr_xml_parse_file(apr_pool_t *p,
+                                             apr_xml_parser **parser,
+                                             apr_xml_doc **ppdoc,
+                                             apr_file_t *xmlfd,
+                                             apr_size_t buffer_length);
+
+
+/**
+ * Feed input into the parser
+ * @param parser The XML parser for parsing this data.
+ * @param data The data to parse.
+ * @param len The length of the data.
+ * @return Any errors found during parsing.
+ * @remark Use apr_xml_parser_geterror() to get more error information.
+ */
+APU_DECLARE(apr_status_t) apr_xml_parser_feed(apr_xml_parser *parser,
+                                              const char *data,
+                                              apr_size_t len);
+
+/**
+ * Terminate the parsing and return the result
+ * @param parser The XML parser for parsing this data.
+ * @param pdoc The resulting parse information. May be NULL to simply
+ *             terminate the parsing without fetching the info.
+ * @return Any errors found during the final stage of parsing.
+ * @remark Use apr_xml_parser_geterror() to get more error information.
+ */
+APU_DECLARE(apr_status_t) apr_xml_parser_done(apr_xml_parser *parser,
+                                              apr_xml_doc **pdoc);
+
+/**
+ * Fetch additional error information from the parser.
+ * @param parser The XML parser to query for errors.
+ * @param errbuf A buffer for storing error text.
+ * @param errbufsize The length of the error text buffer.
+ * @return The error buffer
+ */
+APU_DECLARE(char *) apr_xml_parser_geterror(apr_xml_parser *parser,
+                                            char *errbuf,
+                                            apr_size_t errbufsize);
+
+
+/**
+ * Converts an XML element tree to flat text 
+ * @param p The pool to allocate out of
+ * @param elem The XML element to convert
+ * @param style How to covert the XML.  One of:
+ * <PRE>
+ *     APR_XML_X2T_FULL                start tag, contents, end tag 
+ *     APR_XML_X2T_INNER               contents only 
+ *     APR_XML_X2T_LANG_INNER          xml:lang + inner contents 
+ *     APR_XML_X2T_FULL_NS_LANG        FULL + ns defns + xml:lang 
+ * </PRE>
+ * @param namespaces The namespace of the current XML element
+ * @param ns_map Namespace mapping
+ * @param pbuf Buffer to put the converted text into
+ * @param psize Size of the converted text
+ */
+APU_DECLARE(void) apr_xml_to_text(apr_pool_t *p, const apr_xml_elem *elem,
+                                  int style, apr_array_header_t *namespaces,
+                                  int *ns_map, const char **pbuf,
+                                  apr_size_t *psize);
+
+/* style argument values: */
+#define APR_XML_X2T_FULL         0	/**< start tag, contents, end tag */
+#define APR_XML_X2T_INNER        1	/**< contents only */
+#define APR_XML_X2T_LANG_INNER   2	/**< xml:lang + inner contents */
+#define APR_XML_X2T_FULL_NS_LANG 3	/**< FULL + ns defns + xml:lang */
+
+/**
+ * empty XML element
+ * @param p The pool to allocate out of
+ * @param elem The XML element to empty
+ * @return the string that was stored in the XML element
+ */
+APU_DECLARE(const char *) apr_xml_empty_elem(apr_pool_t *p,
+                                             const apr_xml_elem *elem);
+
+/**
+ * quote an XML string
+ * Replace '\<', '\>', and '\&' with '\<', '\>', and '\&'.
+ * @param p The pool to allocate out of
+ * @param s The string to quote
+ * @param quotes If quotes is true, then replace '"' with '\"'.
+ * @return The quoted string
+ * @note If the string does not contain special characters, it is not
+ * duplicated into the pool and the original string is returned.
+ */
+APU_DECLARE(const char *) apr_xml_quote_string(apr_pool_t *p, const char *s,
+                                               int quotes);
+
+/**
+ * Quote an XML element
+ * @param p The pool to allocate out of
+ * @param elem The element to quote
+ */
+APU_DECLARE(void) apr_xml_quote_elem(apr_pool_t *p, apr_xml_elem *elem);
+
+/* manage an array of unique URIs: apr_xml_insert_uri() and APR_XML_URI_ITEM() */
+
+/**
+ * return the URI's (existing) index, or insert it and return a new index 
+ * @param uri_array array to insert into
+ * @param uri The uri to insert
+ * @return int The uri's index
+ */
+APU_DECLARE(int) apr_xml_insert_uri(apr_array_header_t *uri_array,
+                                    const char *uri);
+
+/** Get the URI item for this XML element */
+#define APR_XML_GET_URI_ITEM(ary, i) (((const char * const *)(ary)->elts)[i])
+
+#if APR_CHARSET_EBCDIC
+/**
+ * Convert parsed tree in EBCDIC 
+ * @param p The pool to allocate out of
+ * @param pdoc The apr_xml_doc to convert.
+ * @param xlate The translation handle to use.
+ * @return Any errors found during conversion.
+ */
+APU_DECLARE(apr_status_t) apr_xml_parser_convert_doc(apr_pool_t *p,
+                                                     apr_xml_doc *pdoc,
+                                                     apr_xlate_t *convset);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+/** @} */
+#endif /* APR_XML_H */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apu.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apu.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/apu.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,140 @@
+/* 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.
+ */
+
+/* 
+ * apu.h is duplicated from apu.hw at build time -- do not edit apu.h
+ */
+/* @file apu.h
+ * @brief APR-Utility main file
+ */
+/**
+ * @defgroup APR_Util APR Utility Functions
+ * @{
+ */
+
+
+#ifndef APU_H
+#define APU_H
+
+/**
+ * APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
+ * so that all public symbols are exported.
+ *
+ * APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
+ * to provide static linkage when the dynamic library may be unavailable.
+ *
+ * APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
+ * including the APR-UTIL public headers, to import and link the symbols from 
+ * the dynamic APR-UTIL library and assure appropriate indirection and calling
+ * conventions at compile time.
+ */
+
+#if defined(DOXYGEN) || !defined(WIN32)
+/**
+ * The public APR-UTIL functions are declared with APU_DECLARE(), so they may
+ * use the most appropriate calling convention.  Public APR functions with 
+ * variable arguments must use APU_DECLARE_NONSTD().
+ *
+ * @fn APU_DECLARE(rettype) apr_func(args);
+ */
+#define APU_DECLARE(type)            type
+/**
+ * The public APR-UTIL functions using variable arguments are declared with 
+ * APU_DECLARE_NONSTD(), as they must use the C language calling convention.
+ *
+ * @fn APU_DECLARE_NONSTD(rettype) apr_func(args, ...);
+ */
+#define APU_DECLARE_NONSTD(type)     type
+/**
+ * The public APR-UTIL variables are declared with APU_DECLARE_DATA.
+ * This assures the appropriate indirection is invoked at compile time.
+ *
+ * @fn APU_DECLARE_DATA type apr_variable;
+ * @note extern APU_DECLARE_DATA type apr_variable; syntax is required for
+ * declarations within headers to properly import the variable.
+ */
+#define APU_DECLARE_DATA
+#elif defined(APU_DECLARE_STATIC)
+#define APU_DECLARE(type)            type __stdcall
+#define APU_DECLARE_NONSTD(type)     type __cdecl
+#define APU_DECLARE_DATA
+#elif defined(APU_DECLARE_EXPORT)
+#define APU_DECLARE(type)            __declspec(dllexport) type __stdcall
+#define APU_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
+#define APU_DECLARE_DATA             __declspec(dllexport)
+#else
+#define APU_DECLARE(type)            __declspec(dllimport) type __stdcall
+#define APU_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
+#define APU_DECLARE_DATA             __declspec(dllimport)
+#endif
+
+#if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC)
+/**
+ * Declare a dso module's exported module structure as APU_MODULE_DECLARE_DATA.
+ *
+ * Unless APU_MODULE_DECLARE_STATIC is defined at compile time, symbols 
+ * declared with APU_MODULE_DECLARE_DATA are always exported.
+ * @code
+ * module APU_MODULE_DECLARE_DATA mod_tag
+ * @endcode
+ */
+#define APU_MODULE_DECLARE_DATA
+#else
+#define APU_MODULE_DECLARE_DATA           __declspec(dllexport)
+#endif
+
+/*
+ * we always have SDBM (it's in our codebase)
+ */
+#define APU_HAVE_SDBM           1
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_GDBM           0
+#define APU_HAVE_NDBM           0
+#define APU_HAVE_DB             0
+
+#if APU_HAVE_DB
+#define APU_HAVE_DB_VERSION     0
+#endif
+#endif
+
+/* 
+ * we always enable dynamic driver loads within apr_dbd
+ * Win32 always has odbc (it's always installed)
+ */
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_PGSQL          0
+#define APU_HAVE_MYSQL          0
+#define APU_HAVE_SQLITE3        0
+#define APU_HAVE_SQLITE2        0
+#define APU_HAVE_ORACLE         0
+#define APU_HAVE_FREETDS        0
+#define APU_HAVE_ODBC           1
+#endif
+
+#define APU_HAVE_CRYPTO         1
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_OPENSSL        0
+#define APU_HAVE_NSS            0
+#endif
+
+#define APU_HAVE_APR_ICONV      1
+#define APU_HAVE_ICONV          0
+#define APR_HAS_XLATE           (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
+
+#endif /* APU_H */
+/** @} */

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/os.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/os.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/include/os.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,139 @@
+/* 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.
+ */
+
+/**
+ * @file win32/os.h
+ * @brief This file in included in all Apache source code. It contains definitions
+ * of facilities available on _this_ operating system (HAVE_* macros),
+ * and prototypes of OS specific functions defined in os.c or os-inline.c
+ *
+ * @defgroup APACHE_OS_WIN32 win32
+ * @ingroup  APACHE_OS
+ * @{
+ */
+
+#ifdef WIN32
+
+#ifndef AP_OS_H
+#define AP_OS_H
+/* Delegate windows include to the apr.h header, if USER or GDI declarations
+ * are required (for a window rather than console application), include
+ * windows.h prior to any other Apache header files.
+ */
+#include "apr_pools.h"
+
+#include <io.h>
+#include <fcntl.h>
+
+#ifdef _WIN64
+#define PLATFORM "Win64"
+#else
+#define PLATFORM "Win32"
+#endif
+
+/* Define command-line rewriting for this platform, handled by core.
+ * For Windows, this is currently handled inside the WinNT MPM.
+ * XXX To support a choice of MPMs, extract common platform behavior
+ * into a function specified here.
+ */
+#define AP_PLATFORM_REWRITE_ARGS_HOOK NULL
+
+/* going away shortly... */
+#define HAVE_DRIVE_LETTERS
+#define HAVE_UNC_PATHS
+#define CASE_BLIND_FILESYSTEM
+
+#include <stddef.h>
+#include <stdlib.h> /* for exit() */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* BIG RED WARNING: exit() is mapped to allow us to capture the exit
+ * status.  This header must only be included from modules linked into
+ * the ApacheCore.dll - since it's a horrible behavior to exit() from
+ * any module outside the main() block, and we -will- assume it's a
+ * fatal error.
+ */
+
+AP_DECLARE_DATA extern int ap_real_exit_code;
+
+#define exit(status) ((exit)((ap_real_exit_code==2) \
+                                ? (ap_real_exit_code = (status)) \
+                                : ((ap_real_exit_code = 0), (status))))
+
+#ifdef AP_DECLARE_EXPORT
+
+/* Defined in util_win32.c and available only to the core module for
+ * win32 MPM design.
+ */
+
+AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p);
+
+typedef enum {
+    AP_DLL_WINBASEAPI = 0,    /* kernel32 From WinBase.h      */
+    AP_DLL_WINADVAPI = 1,     /* advapi32 From WinBase.h      */
+    AP_DLL_WINSOCKAPI = 2,    /* mswsock  From WinSock.h      */
+    AP_DLL_WINSOCK2API = 3,   /* ws2_32   From WinSock2.h     */
+    AP_DLL_defined = 4        /* must define as last idx_ + 1 */
+} ap_dlltoken_e;
+
+FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal);
+
+PSECURITY_ATTRIBUTES GetNullACL(void);
+void CleanNullACL(void *sa);
+
+#define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
+    typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
+    static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
+    static APR_INLINE rettype ap_winapi_##fn args \
+    {   if (!ap_winapi_pfn_##fn) \
+            ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
+        return (*(ap_winapi_pfn_##fn)) names; }; \
+
+/* Win2K kernel only */
+AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINADVAPI, BOOL, WINAPI, ChangeServiceConfig2A, 0, (
+    SC_HANDLE hService,
+    DWORD dwInfoLevel,
+    LPVOID lpInfo),
+    (hService, dwInfoLevel, lpInfo));
+#undef ChangeServiceConfig2
+#define ChangeServiceConfig2 ap_winapi_ChangeServiceConfig2A
+
+/* WinNT kernel only */
+AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
+    IN HANDLE hFile),
+    (hFile));
+#undef CancelIo
+#define CancelIo ap_winapi_CancelIo
+
+/* Win9x kernel only */
+AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, DWORD, WINAPI, RegisterServiceProcess, 0, (
+    DWORD dwProcessId,
+    DWORD dwType),
+    (dwProcessId, dwType));
+#define RegisterServiceProcess ap_winapi_RegisterServiceProcess
+
+#endif /* def AP_DECLARE_EXPORT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ndef AP_OS_H */
+#endif  /* def WIN32 */
+/** @} */


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib
___________________________________________________________________
Added: bugtraq:number
   + true

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/apr-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/apr-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/aprutil-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/aprutil-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapr-1.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapr-1.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapr-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapr-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapriconv-1.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapriconv-1.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapriconv-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libapriconv-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libaprutil-1.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libaprutil-1.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libaprutil-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libaprutil-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libhttpd.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libhttpd.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libhttpd.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/libhttpd.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/mod_dav.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/mod_dav.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/mod_dav.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/mod_dav.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/xml.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib/xml.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64
___________________________________________________________________
Added: bugtraq:number
   + true

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/apr-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/apr-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/aprutil-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/aprutil-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapr-1.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapr-1.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapr-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapr-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapriconv-1.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapriconv-1.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapriconv-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libapriconv-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libaprutil-1.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libaprutil-1.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libaprutil-1.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libaprutil-1.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libhttpd.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libhttpd.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libhttpd.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/libhttpd.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/mod_dav.exp
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/mod_dav.exp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/mod_dav.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/mod_dav.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/xml.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/httpd/lib64/xml.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/CHANGES.TXT
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/CHANGES.TXT	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/CHANGES.TXT	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,7 @@
+main/win95nt.h:
+
+    Add ACE define checks to prevent redefinition of uid_t, gid_t and pid_t
+
+TSRM/readdir.h:
+
+    Add ACE define check to prevent redefinition of struct dirent

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/PROVENANCE.TXT
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/PROVENANCE.TXT	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/PROVENANCE.TXT	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,20 @@
+main\config.w32.h
+
+	Generated by running buildconf and configure on the official PHP 5.5.3 source
+
+Release_TS
+x64\Release_TS
+
+	php5ts.lib extracted from official VC11 binary distribution of PHP 5.5.3 (http://windows.php.net/download/)
+
+main\win95nt.h
+
+	Extracted from official PHP 5.5.3 source tarball (http://www.php.net/downloads.php)
+
+	Patched for compatibility with ACE
+
+TSRM\readdir.h
+
+	Extracted from official PHP 5.5.3 source tarball (http://www.php.net/downloads.php)
+
+	Patched for compatibility with ACE


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/Release_TS
___________________________________________________________________
Added: bugtraq:number
   + true

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/Release_TS/php5ts.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/Release_TS/php5ts.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/TSRM
___________________________________________________________________
Added: bugtraq:number
   + true

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/TSRM/readdir.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/TSRM/readdir.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/TSRM/readdir.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,49 @@
+#ifndef READDIR_H
+#define READDIR_H
+
+
+/*
+ * Structures and types used to implement opendir/readdir/closedir
+ * on Windows 95/NT.
+ *
+ * MapGuide-changes: Only define struct dirent if ACE hasn't already
+ */
+
+#include <windows.h>
+
+#include <io.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <direct.h>
+
+/* struct dirent - same as Unix */
+
+#if !defined (ACE_LACKS_STRUCT_DIR)
+struct dirent {
+	long d_ino;					/* inode (always 1 in WIN32) */
+	off_t d_off;				/* offset to this dirent */
+	unsigned short d_reclen;	/* length of d_name */
+	char d_name[_MAX_FNAME + 1];	/* filename (null terminated) */
+};
+#endif
+
+
+/* typedef DIR - not the same as Unix */
+typedef struct {
+	HANDLE handle;				/* _findfirst/_findnext handle */
+	short offset;				/* offset into directory */
+	short finished;				/* 1 if there are not more files */
+	WIN32_FIND_DATA fileinfo;	/* from _findfirst/_findnext */
+	char *dir;					/* the dir we are reading */
+	struct dirent dent;			/* the dirent to return */
+} DIR;
+
+/* Function prototypes */
+DIR *opendir(const char *);
+struct dirent *readdir(DIR *);
+int readdir_r(DIR *, struct dirent *, struct dirent **);
+int closedir(DIR *);
+int rewinddir(DIR *);
+
+#endif /* READDIR_H */


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main
___________________________________________________________________
Added: bugtraq:number
   + true

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/config.w32.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/config.w32.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/config.w32.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,263 @@
+/*
+	Build Configuration Template for Win32.
+	$Id$
+*/
+
+/* Define the minimum supported version */
+#undef _WIN32_WINNT
+#undef NTDDI_VERSION
+#define _WIN32_WINNT 0x0600
+#define NTDDI_VERSION  0x06000100
+
+/* Default PHP / PEAR directories */
+#define PHP_CONFIG_FILE_PATH (getenv("SystemRoot"))?getenv("SystemRoot"):""
+#define CONFIGURATION_FILE_PATH "php.ini"
+#define PEAR_INSTALLDIR "C:\\php\\pear"
+#define PHP_BINDIR "C:\\php"
+#define PHP_DATADIR "C:\\php"
+#define PHP_EXTENSION_DIR "C:\\php"
+#define PHP_INCLUDE_PATH	".;C:\\php\\pear"
+#define PHP_LIBDIR "C:\\php"
+#define PHP_LOCALSTATEDIR "C:\\php"
+#define PHP_PREFIX "C:\\php"
+#define PHP_SYSCONFDIR "C:\\php"
+
+/* Enable / Disable crypt() function (default: enabled) */
+#define HAVE_CRYPT 1
+#define PHP_STD_DES_CRYPT 1
+#define PHP_EXT_DES_CRYPT 1
+#define PHP_MD5_CRYPT 1
+#define PHP_BLOWFISH_CRYPT 1
+#define PHP_SHA512_CRYPT 1
+#define PHP_SHA256_CRYPT 1
+
+/* PHP Runtime Configuration */
+#define PHP_URL_FOPEN 1
+#define USE_CONFIG_FILE 1
+#define DEFAULT_SHORT_OPEN_TAG "1"
+
+/* Platform-Specific Configuration. Should not be changed. */
+#define PHP_SIGCHILD 0
+#define HAVE_LIBBIND 1
+#define HAVE_GETSERVBYNAME 1
+#define HAVE_GETSERVBYPORT 1
+#define HAVE_GETPROTOBYNAME 1
+#define HAVE_GETPROTOBYNUMBER 1
+#define HAVE_GETHOSTNAME 1
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+#define HAVE_ERRMSG_H 0
+#undef HAVE_ADABAS
+#undef HAVE_SOLID
+#undef HAVE_LINK
+#undef HAVE_SYMLINK
+
+/* its in win32/time.c */
+#define HAVE_USLEEP 1
+#define HAVE_NANOSLEEP 1
+#define PHP_SLEEP_NON_VOID 1
+
+#define HAVE_GETHOSTNAME 1
+#define HAVE_GETCWD 1
+#define HAVE_POSIX_READDIR_R 1
+#define NEED_ISBLANK 1
+#define DISCARD_PATH 0
+#undef HAVE_SETITIMER
+#undef HAVE_SIGSETJMP
+#undef HAVE_IODBC
+#define HAVE_LIBDL 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_PUTENV 1
+#define HAVE_LIMITS_H 1
+#define HAVE_TZSET 1
+#define HAVE_TZNAME 1
+#undef HAVE_FLOCK
+#define HAVE_ALLOCA 1
+#undef HAVE_SYS_TIME_H
+#define HAVE_SIGNAL_H 1
+#undef HAVE_ST_BLKSIZE
+#undef HAVE_ST_BLOCKS
+#define HAVE_ST_RDEV 1
+#define HAVE_UTIME_NULL 1
+#define HAVE_VPRINTF 1
+#define STDC_HEADERS 1
+#define REGEX 1
+#define HSREGEX 1
+#define HAVE_GCVT 1
+#define HAVE_GETLOGIN 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_MEMCPY 1
+#define HAVE_MEMMOVE 1
+#define HAVE_PUTENV 1
+#define HAVE_REGCOMP 1
+#define HAVE_SETLOCALE 1
+#define HAVE_LOCALECONV 1
+#define HAVE_LOCALE_H 1
+#ifndef HAVE_LIBBIND
+# define HAVE_SETVBUF 1
+#endif
+#define HAVE_SHUTDOWN 1
+#define HAVE_SNPRINTF 1
+#define HAVE_VSNPRINTF 1
+#define HAVE_STRCASECMP 1
+#define HAVE_STRDUP 1
+#define HAVE_STRERROR 1
+#define HAVE_STRSTR 1
+#define HAVE_TEMPNAM 1
+#define HAVE_UTIME 1
+#undef HAVE_DIRENT_H
+#define HAVE_ASSERT_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_GRP_H 0
+#undef HAVE_PWD_H
+#define HAVE_STRING_H 1
+#undef HAVE_SYS_FILE_H
+#undef HAVE_SYS_SOCKET_H
+#undef HAVE_SYS_WAIT_H
+#define HAVE_SYSLOG_H 1
+#undef HAVE_UNISTD_H
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_STDARG_H 1
+#undef HAVE_ALLOCA_H
+#undef HAVE_KILL
+#define HAVE_GETPID 1
+#define HAVE_LIBM 1
+#define HAVE_CUSERID 0
+#undef HAVE_RINT
+#define HAVE_STRFTIME 1
+#define SIZEOF_SHORT 2
+/* int and long are stll 32bit in 64bit compiles */
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+/* MSVC.6/NET don't allow 'long long' or know 'intmax_t' */
+#define SIZEOF_LONG_LONG_INT 0
+#define SIZEOF_LONG_LONG 8 /* defined as __int64 */
+#define SIZEOF_INTMAX_T 0
+#define ssize_t SSIZE_T
+#ifdef _WIN64
+# define SIZEOF_SIZE_T 8
+# define SIZEOF_PTRDIFF_T 8
+#else
+# define SIZEOF_SIZE_T 4
+# define SIZEOF_PTRDIFF_T 4
+#endif
+#define HAVE_FNMATCH
+#define HAVE_GLOB
+#define PHP_SHLIB_SUFFIX "dll"
+#define HAVE_SQLDATASOURCES
+
+/* Win32 supports strcoll */
+#define HAVE_STRCOLL 1
+
+/* Win32 supports socketpair by the emulation in win32/sockets.c */
+#define HAVE_SOCKETPAIR 1
+#define HAVE_SOCKLEN_T 1
+
+/* Win32 support proc_open */
+#define PHP_CAN_SUPPORT_PROC_OPEN 1
+
+/* inet_ntop() / inet_pton() */
+#define HAVE_INET_PTON 1
+#define HAVE_INET_NTOP 1
+
+#define HAVE_MBLEN
+
+#undef HAVE_ATOF_ACCEPTS_NAN
+#undef HAVE_ATOF_ACCEPTS_INF
+#define HAVE_HUGE_VAL_NAN 0
+
+/* vs.net 2005 has a 64-bit time_t.  This will likely break
+ * 3rdParty libs that were built with older compilers; switch
+ * back to 32-bit */
+#ifndef _WIN64
+# define _USE_32BIT_TIME_T 1
+#endif
+#define HAVE_STDLIB_H 1
+
+/* values determined by configure.js */
+
+/* Configure line */
+#define CONFIGURE_COMMAND "cscript /nologo configure.js "
+
+/* Detected compiler version */
+#define COMPILER "MSVC11 (Visual C++ 2012)"
+
+/* Compiler compatibility ID */
+#define PHP_COMPILER_ID "VC11"
+
+/* Detected compiler architecture */
+#define ARCHITECTURE "x86"
+
+#define HAVE_STRNLEN 1
+
+/* have the wspiapi.h header file */
+#define HAVE_WSPIAPI_H 1
+
+#define HAVE_GETADDRINFO 1
+
+#define HAVE_GAI_STRERROR 1
+
+#define HAVE_IPV6 1
+
+#define HAVE_USLEEP 1
+
+#define HAVE_STRCOLL 1
+
+/* Have BCMATH library */
+#define HAVE_BCMATH 1
+
+/* Have calendar */
+#define HAVE_CALENDAR 1
+
+/* Have COM_DOTNET support */
+#define HAVE_COM_DOTNET 1
+
+/* Have ctype */
+#define HAVE_CTYPE 1
+
+/* Have date/time support */
+#define HAVE_DATE 1
+
+/* Bundled regex */
+#define REGEX 1
+
+/* Bundled regex */
+#define HSREGEX 1
+
+/* Have FTP support */
+#define HAVE_FTP 1
+
+#define HAVE_HASH_EXT 1
+
+/* Compression support */
+#define MYSQLND_COMPRESSION_ENABLED 1
+
+/* SSL support */
+#define MYSQLND_SSL_SUPPORTED 1
+
+/* ODBC support */
+#define HAVE_UODBC 1
+
+/* Using bundled PCRE library */
+#define HAVE_BUNDLED_PCRE 1
+
+/* Have PCRE library */
+#define HAVE_PCRE 1
+
+/* Reflection support enabled */
+#define HAVE_REFLECTION 1
+
+/* Session support */
+#define HAVE_PHP_SESSION 1
+
+#define HAVE_SPL 1
+
+#define PHP_CONFIG_FILE_SCAN_DIR ""
+
+#define PHP_USE_PHP_CRYPT_R 1
+
+/* Tokenizer support */
+#define HAVE_TOKENIZER 1
+
+#define PHAR_HASH_OK 1

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/win95nt.h
===================================================================
--- sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/win95nt.h	                        (rev 0)
+++ sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/main/win95nt.h	2013-08-30 08:52:25 UTC (rev 7821)
@@ -0,0 +1,98 @@
+/*
+  +----------------------------------------------------------------------+
+  | PHP Version 5                                                        |
+  +----------------------------------------------------------------------+
+  | Copyright (c) 1997-2013 The PHP Group                                |
+  +----------------------------------------------------------------------+
+  | This source file is subject to version 3.01 of the PHP license,      |
+  | that is bundled with this package in the file LICENSE, and is        |
+  | available through the world-wide-web at the following url:           |
+  | http://www.php.net/license/3_01.txt                                  |
+  | If you did not receive a copy of the PHP license and are unable to   |
+  | obtain it through the world-wide-web, please send a note to          |
+  | license at php.net so we can mail you a copy immediately.               |
+  +----------------------------------------------------------------------+
+  | Author:                                                              |
+  +----------------------------------------------------------------------+
+  | MapGuide-changes: Only define uid_t, gid_t and pid_t if ACE hasn't   |
+  +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+
+/* Defines and types for Windows 95/NT */
+#define HAVE_DECLARED_TIMEZONE
+#define WIN32_LEAN_AND_MEAN
+#include <io.h>
+#include <malloc.h>
+#include <direct.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <process.h>
+
+#if !defined (ACE_LACKS_UID_T)
+typedef int uid_t;
+#endif
+
+#if !defined (ACE_LACKS_GID_T)
+typedef int gid_t;
+#endif
+typedef char * caddr_t;
+#define lstat(x, y) php_sys_lstat(x, y)
+#define		_IFIFO	0010000	/* fifo */
+#define		_IFBLK	0060000	/* block special */
+#define		_IFLNK	0120000	/* symbolic link */
+#define S_IFIFO		_IFIFO
+#define S_IFBLK		_IFBLK
+#define	S_IFLNK		_IFLNK
+#ifndef S_ISREG 
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+#define chdir(path) _chdir(path)
+#define mkdir(a, b)	_mkdir(a)
+#define rmdir(a)	_rmdir(a)
+#define getpid		_getpid
+#define php_sleep(t)	SleepEx(t*1000, TRUE)
+#ifndef getcwd
+# define getcwd(a, b)		_getcwd(a, b)
+#endif
+#define off_t		_off_t
+typedef unsigned int uint;
+typedef unsigned long ulong;
+#if !NSAPI
+#if !defined (ACE_WIN32)
+typedef long pid_t;
+#endif
+#endif
+
+/* missing in vc5 math.h */
+#define M_PI             3.14159265358979323846
+#define M_TWOPI         (M_PI * 2.0)
+#define M_PI_2           1.57079632679489661923
+#ifndef M_PI_4
+#define M_PI_4           0.78539816339744830962
+#endif
+
+#if !defined(PHP_DEBUG)
+#ifdef inline
+#undef inline
+#endif
+#define inline  __inline
+#endif
+
+/* General Windows stuff */
+#ifndef WINDOWS
+# define WINDOWS 1
+#endif
+
+
+/* Prevent use of VC5 OpenFile function */
+#define NOOPENFILE
+
+/* sendmail is built-in */
+#ifdef PHP_PROG_SENDMAIL
+#undef PHP_PROG_SENDMAIL
+#define PHP_PROG_SENDMAIL "Built in mailer"
+#endif


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64
___________________________________________________________________
Added: bugtraq:number
   + true


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64/Release_TS
___________________________________________________________________
Added: bugtraq:number
   + true

Added: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64/Release_TS/php5ts.lib
===================================================================
(Binary files differ)


Property changes on: sandbox/jng/webtier_upgrade_v2/MgDev/Oem/php/x64/Release_TS/php5ts.lib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream



More information about the mapguide-commits mailing list