Changes with APR b1 *) Disable SHMEM_MMAP_ZERO on HPUX 11.x where it is not supported. Use SHMEM_SHMGET_ANON instead. [Aaron Bannert] *) Fix a few attempts to add to a void * ptr in the Unix shared memory support code. PR #9710 Per Ekman [pek@pdc.kth.se] *) In the Linux apr_sendfile(), fix the types of some parameters to apr_send() and apr_recv(). Breakage was seen in 64-bit mode on s/390. PR #9712 [Neale.Ferguson@SoftwareAG-usa.coom] *) added APR_PROGRAM_ENV and APR_PROGRAM_PATH options for starting processes via apr_proc_create() [Greg Stein] *) Deprecated apr_pool_free_blocks_num_bytes() [Sander Striker] *) Add --enable-pool-debug to make it easier for people to enable pool debug mode. Removed the APR_POOL_DEBUG_VERBOSE define that was previously being used. [Sander Striker] *) Changed the apr_file_dup2() function prototype. It can only take and reuse an apr_file_t*, and will no longer create one if *new_file == NULL (use apr_file_dup() for that). [Aaron Bannert] *) Implemented name-based shared memory on Unix. [Aaron Bannert] *) Fix spelling mistakes in APRDesign. [Blair Zajac ] *) Ensure that apr_file_mktemp creates the temp file if it isn't there. [John Sterling ] *) Make sure to pre-mark anon SysV shared memory segments as removed. [Jim Jagielski] *) Add --with-efence to allow usage of Electric Fence. [Justin Erenkrantz] *) Updated the pools debug code. Check if a pool is still valid on the most common apr_pool_xxx functions. Fix the way APR_POOL_DEBUG_VERBOSE was using stderr. Make the output somewhat nicer in this debug mode. [Sander Striker] *) Add new define APR_POOL_DEBUG_VERBOSE which spits out info about pool creation/destruction [Ian Holsman] *) Fix GMT offset adjustments for platforms that do not have native GMT offset adjustments. [Jon Travis ] *) Add new apr_shm_t API and remove old apr_shmem_t API. The new API handles both anonymous and name-based shared memory. Anonymous shared memory segments are only usable on systems with process inheritance, and so the new API with name-based segments is usable on platforms like Win32. [Aaron Bannert and William Rowe with much help from Justin Erenkrantz and Sander Striker] *) Add --with-egd to support EGD-compatible entropy gatherers for those platforms without native support. [Justin Erenkrantz] *) apr_lock_create() and apr_proc_mutex_create() now have an additional parameter for specifying the lock mechanism. apr_lock_create_np() and apr_proc_mutex_create_np() have been removed. [Jeff Trawick] *) Change the prototype of apr_thread_exit() so that the apr_status_t is no longer a pointer. It was difficult and sometimes hazardous to return a apr_status_t* at times, and this allows us to return the APR_* error codes directly. [Aaron Bannert] *) Add apr_sockaddr_equal() for comparing APR sockaddrs. [Jeff Trawick] *) Win32: apr_sendfile() should return APR_ENOTIMPL if oslevel < WINNT. [Bill Stoddard] *) Put new pools code in place which allows applications to switch off locking on pools operations in case a pool is guaranteed to never being used in more than one thread at the same time. We've seen a significant performance improvement over the old code. [Sander Striker] *) Add apr-config - a shell script to allow third-party programs easy access to APR configuration parameters. [Justin Erenkrantz] *) Add find_apr.m4 to allow third-party programs that use APR to have a standard m4 macro for detection. [Greg Stein] *) SEGV in apr_table_overlap [Brian Pane] *) apr_array_copy speedup by removing the zero-fill [Brian Pane] *) Fix build breakage on systems with getaddrinfo() but not gai_strerror() (e.g., RedHat 5.2). [Jeff Trawick] *) Fix a problem in Unix apr_file_dup() which caused 0 to be returned by the first read. [Stas Bekman ] *) Fix a buglet that caused APR_FILE_BASED_SHM to be set inadvertently on some platforms (e.g., Linux, AIX). [Jeff Trawick] *) Speed up apr_table operations by using a cache/checksum and a red-black tree in the overlay. [Brian Pane , Cliff Woolley] *) Speed up apr_pool_userdata_set[n] by letting hash_set figure out the strings length. [Brian Pane ] *) New function apr_mmap_dup. This is called in the mmap_setaside. [Brian Pane ] *) Speed up the apr_hash_t implementation's handling of APR_HASH_KEY_STRING. [Brian Pane ] *) Tweak apr_gethostname() so that it detects truncation of the name and returns an error. [Jeff Trawick] *) Fix bug in Darwin DSO code. [Sander Temme ] *) Fix apr_setup_signal_thread() to grab the right error code from a sigprocmask() failure. This only affects platforms that use sigprocmask() in lieu of pthread_sigmask(). [Jeff Trawick] *) Fix the Unix HAVE_POLL flavor of apr_poll_socket_mask() so that it doesn't segfault. Avoid some wasted storage in a poll-related APR structure. [INOUE Seiichiro ] *) Fix apr_setup_signal_thread() so that threads don't block synchronous signals (e.g., SIGSEGV). It is a programming error to do so, and some platforms (e.g., Solaris, AIX) don't call any registered signal handler when such signals are blocked. [Jeff Trawick] *) Change the apr_table_elts macro so that it provides access via a const pointer instead of a non-const pointer. [Brian Pane ] *) Use strerror_r() where available, since strerror() isn't always thread-safe. Example systems where strerror() isn't thread-safe: Linux+glibc, AIX [Jeff Trawick] *) Fix some file cleanup problems in apr_proc_create() which could result in the pipes for stdin/stdout/stderr being closed immediately. [Jeff Trawick] *) New functions apr_hash_[merge|copy], change to overlay fn so that it calls merge, which does a inline iteration instead of calling the iterator function. [Brian Pane ] *) Introduce the apr_pool_userdata_setn() variant that doesn't strdup the key. Allows both the _setn() and _set() variant to accept NULL for the cleanup. [Brian Pane ] *) Re-vamp the apr_proc_wait and apr_proc_wait_all functions. We now return the exit code from the program and a reason that the program died, either normal exit or signalled. [Jeff Trawick and Ryan Bloom] *) Implement portable accessors for proc mutex. These are equivalent to apr_os_lock_get/set, but they work for apr_proc_mutex_t types instead. [Aaron Bannert] *) Added a new parameter to apr_thread_mutex_init(). Now, by default, thread mutexes are not nested (sometimes called "recursive"). To enable nested mutexes, a flag must be passed to the init script. Non-nested mutexes are much faster than nested ones. [Aaron Bannert] *) read_with_timeout in apr/file_io/win32/readwrite.c incorrectly returned APR_SUCCESS instead of APR_EOF when PeekNamedPipe failed and the result from GetLastError() was ERROR_BROKEN_PIPE. Because of this, the pipe wasn't closed as soon as it could be. [Tim Costello ] *) Fix a problem in the Win32 pipe creation code called by apr_proc_create(): It didn't register cleanups for either the read or the write ends of the pipe, so file handles (and event handles for pipes with asynchronous I/O mode set) are never closed. [Tim Costello ] *) Add support for QNX 6. [J.T. Conklin ] *) We now create exports.c and export_vars.h, which in turn create exports.c. From this we generate two more files with different purposes: apr.exp - list of exported symbols; and exports.lo (exports.o) - an object file that can be linked with an executable to force resolution of all apr symbols. [Aaron Bannert] *) Add the apr_thread_cond_timedwait function to the condition variable API. [Aaron Bannert] *) Fixed apr_file_mktemp on systems without mkstemp (Win32, etc). [Mladen Turk, Cliff Woolley] *) Fix a segfault in apr_poll_clear on Unix. Also fix the logic for the case where there are multiple events ORed together in the events list. [Jamshid Mahdavi ] *) Files opened on Unix with the flag APR_DELONCLOSE are now not unlinked until they are actually closed, rather than as soon as they're opened. The old approach worked but made handling temp files harder. [Cliff Woolley] *) Fix potential segfault when closing a file on Unix. If apr_file_close() was called and it failed, it would not deregister the file cleanup. Therefore the cleanup would be run again later on a now-invalid descriptor. [Cliff Woolley] *) Introduce apr_pool_lock for debugging, in combination with ALLOC_USE_MALLOC + DEBUG_WITH_MPROTECT. Only implemented on Win32 today, very effective for debugging pool constness. [William Rowe] *) Optimize apr_pstrcat by caching lengths of first 6 strings [Brian Pane ] *) Add pool accessors to the apr_thread_mutex_t datatype. [Aaron Bannert ] *) Add the apr_file_mktemp function. This creates and opens a temporary file, for use by the program. This file is created delete_on_close. The initial implementation only works on Unix, but Windows is coming soon. [Ryan Bloom] *) Make the unix version of apr_proc_wait_all_procs a simple wrapper around apr_proc_wait, and which extracts the exit code from the status returned by waitpid. [Kevin Pilch-Bisson ] *) Add process locking API to APR. [Aaron Bannert ] *) Add condition variables for Windows. [Ryan Bloom] *) Add condition variables to the APR set of locking functions. This does Unix, and provides stubs for all other platforms. [Aaron Bannert ] *) Don't search for IPv6 names in apr_sockaddr_info_get() if the application doesn't specify the family (i.e., the application passes in AF_UNSPEC) and APR isn't built with IPv6 support. [Jeff Trawick] *) Fix the API for the apr_proc_create() call on Win32. Several bad assumptions are gone, including a mismatch between unix and win32, where win32 was defaulting to create detached. Also fixes the apr_proc_t's pid member to a real pid (identity that works across processes) instead of the handle (which is a new hproc member value.) [William Rowe] *) Modify the external apr_filepath_get() fn to take a flags arg, currently only for APR_FILEPATH_NATIVE. This returns c:\foo format on Win32, and should do the same on OS2, or sys\vol:\foo on Netware. Primarily for internals, but possibly useful to others (and it mirrors some of the other apr_filepath_*() calls.) [William Rowe] *) Add the new thread read/write lock API to APR. [Aaron Bannert ] *) Add the new thread mutex lock API to APR. [Aaron Bannert ] *) Cache GMT offset on platforms that don't store it in the tm struct. This offset is normalized to be independent of daylight savings time. [Brian Pane ] *) Initial support for cygwin. [Stipe Tolj ] *) Fix a problem with buffered files on Unix. [Brian Havard] *) Fix the bungling of getaddrinfo() error codes. [Jeff Trawick] *) Add an apr_thread_once function to APR. This allows a program to ensure that a function is only called once. [Ryan Bloom] *) APR Documentation is now in Doxygen format. [Ian Holsman] *) Get apr_ungetc() to work with buffered files on Unix. [Jeff Trawick] *) Fixed apr_filepath_root on Unix [William Rowe, Cliff Woolley]. *) Rename XtOffset to APR_XtOffset. This namespace protection is important to keep from conflicting with other packages. [Perl] *) Introduce a new --disable-ipv6 option to disable IPv6 support. [Sterling Hughes , Jeff Trawick] *) Fix the new shared memory code. We need to pass a pointer to an apr_file_t to apr_file_open. Also, apr_os_file_get returns a status value, not the OS file descriptor. [Ryan Bloom] *) Fix the new shared memory configure script. The APR_DECIDE macros go in order, so the last set of dependancies that are met are the ones used. That means that when using those macros, options should be listed with the least desirable option first, and the most desirable last. The new shared memory routines did the opposite, so we chose the wrong shared memory option on Linux. [Ryan Bloom] *) Move the necessary shared memory code from MM into APR and remove our dependency upon MM. [Justin Erenkrantz] *) Get apr_lock_file and apr_unlock_file working on Windows 9x. [Mladen Turk, Bill Stoddard] *) Make all APR pools be allocated out of the permanent pool. This brings APR pools back to a tree structure. There are no longer any way to create a pool that is not a decendant of the permanent_pool. [Ryan Bloom] *) Wrap all functions in APR_DECLARE macro. [Sterling Hughes ] *) Non-blocking connects shouldn't be calling connect a second time. According to Single Unix, a non-blocking connect has succeeded when the select pops successfully. It has failed if the select failed. The second connect was causing 502's in the httpd-proxy. [John Barbee barbee@veribox.net] *) Fix apr_dir_rewind() for Win32 to avoid returning a bogus error. [Jeff Trawick, William Rowe] *) Detect required libraries first. This minimizes the libraries needed in apr_hints.m4. [Justin Erenkrantz] *) Support the AIX, glibc2, and Solaris variants of gethostby{name|addr}_r. Use gethostbyaddr_r function when available. [Sterling Hughes ] *) Add new socket option, APR_INCOMPLETE_READ, that should be set when you expect the first non-blocking read to fail with EAGAIN. Setting APR_INCOMPLETE_READ prior to calling apr_read will cause select() to be called first to wait for bytes to read. [Brian Pane, Dean Gaudet] *) Better installation. This makes us install the APRVARS file, as well as MM. [Ryan Bloom] *) Provide new number conversion functions apr_itoa, apr_ltoa, and apr_off_t_toa, and inline code in inet_ntop4, to reduce CPU consumption. [Brian Pane] *) Updated APR to pass the thread worker_function prototype (apr_thread_start_t) two parameters, the apr private data (apr_thread_t*) and the application private data (void*). Applications' worker_thread() routines may use apr_thread_pool_get to access the pool (implemented using APR_POOL_*_ACCESSOR() macros.) [Aaron Bannert ] *) Add Solaris 8's sendfilev() support. This requires the following patches from Sun: 111297 (Sparc), 111298 (x86). You'll need the other patches listed in the patch description. [Justin Erenkrantz] *) Close file descriptor when we are done with fcntl or flock-based cross-process lock. Otherwise, we leak descriptors. [Justin Erenkrantz] *) Fix a possible data corruption problem with the use of getpwnam_r() on all platforms where that function is used. Use getpwnam_r() and getgrgid_r() instead of getpwnam() and getgrgid() with threaded builds on glibc (2.1, at least) to avoid thread safety issues. [Jeff Trawick] *) Added apr_lock_tryacquire. It will attempt to acquire the lock, but will not block if it can not acquire the lock. Returns APR_EBUSY if acquistion can not happen. [Justin Erenkrantz] *) Added an inherit flag to apr_socket_create and other socket creation functions. This allows APR programs to specify that a socket should be passed to any child processes that are created. The inherit flag is only meaningful if programs use apr_process_create(). This also adds a couple of macros that allow APR types to set and unset the inherit flag. [Ryan Bloom] *) apr_connect()on Windows: Handle timeouts and returning the proper status code when a connect is in progress. [Bill Stoddard] *) apr_connect() on Unix: Handle EINTR during connect(). Handle timeouts. [Jeff Trawick] *) Handle the weird case where getpwnam() returns NULL but errno is zero. [Jeff Trawick] *) Add apr_file_flags_get() which returns the flags that were originally passed in to apr_file_open(). [Cliff Woolley] *) Added APR_HAS_XTHREAD_FILES macro that indicates whether or not the platform handles files opened in APR_XTHREAD mode natively. Currently only Win32 has such native support. [Cliff Woolley] *) Fix gmt offset handling on Solaris. Apache log messages now show local time again. PR #7902 [Taketo Kabe ] *) apr_pstrcat() optimizations [Doug MacEachern, Jeff Trawick] *) Make the apr_pool_is_ancestor logic public. This is required for some new logic that is going into HTTPD. I have left the join logic in that function debug only. [Ryan Bloom] *) Clean up Win32 locks when the pool goes away. [Justin Erenkrantz, Jeff Trawick] *) Implement apr_get_home_directory for Win32. [William Rowe] *) Complete the implementation of LARGEFILE support on Win32, although the mmap semantics still need a touch of work. [William Rowe] *) Fix the APR_XTHREAD support, and apr_sendfile mechanics, so we can handle cross-threaded file handles on Win32. [William Rowe] *) Implement APR_READWRITE locks on Unix with POSIX rwlocks. Introduce new apr_lock_acquire_rw() function which takes in APR_READER or APR_WRITER. [Justin Erenkrantz] *) Add apr_open_stdin. This mirrors apr_open_stderr, except it works on stdin. [Aaron Bannert ] *) Add apr_strtok(), a thread-safe flavor of strtok() which has the same interface as strtok_r(). [Jeff Trawick] *) Add other child support to Win32 [Bill Stoddard] *) Other-child registrations are automatically removed when the associated pool is destroyed. This avoids garbage in the list of registrations when a pool with a registration is freed. [Jeff Trawick] *) Allow LTFLAGS to be overridden by the configure command-line (default="--silent") and introduce LT_LDFLAGS. [Roy Fielding] *) Add memory code kindly donated to APR by Elrond Luke Kenneth Casson Leighton Sander Striker [David Reid] *) Fix a problem with the FreeBSD flavor of apr_sendfile() where we could return APR_EAGAIN+bytes_sent. [Jeff Trawick] *) Fix a problem on unixware where clearing h_errno wouldn't work. Use set_h_errno() instead. PR #7651 [Jeff Trawick] *) Add the test and build directories (when present) to the recursive make process, being sure that they are run last. test is only done recursively for make *clean targets. [Roy Fielding] *) Make the apr_mmap_create() function use the native_flags variable. This allows us to actually create WRITEABLE MMAPs. [Ed Korthof ] *) Completely revamp configure so that it preserves the standard make variables CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS and LIBS by moving the configure additions to EXTRA_* variables. Also, allow the user to specify NOTEST_* values for all of the above, which eliminates the need for THREAD_CPPFLAGS, THREAD_CFLAGS, and OPTIM. Fix the setting of INCLUDES and EXTRA_INCLUDES. Check flags as they are added to avoid pointless duplications. Fix the order in which flags are given on the compile and link lines. [Roy Fielding] *) Fix DSO code on HP/UX. We have to use == not =, and it makes more sense to actually return errno, so that the return code means something. [Ryan Bloom] *) Clean up conditionals in unix DSO code so that we decide based on the dynamic loading implementation, which we noticed at configure time, instead of by operating system. [Wilfredo Sanchez] *) Add DSO support for dyld platforms (Darwin/Mac OS and OpenStep). [Wilfredo Sanchez] *) Amend the time code to better deal with time zones. [David Reid] *) Carefully select an appropriate native type for apr_int64_t and define its format as APR_INT64_T_FMT and literal using APR_INT64_C(). [Justin Erenkrantz, William Rowe] *) Make clean, distclean, and extraclean consistently according to the Gnu makefile guidelines. [Justin Erenkrantz ] *) Initial implementation of of apr_filepath (get/set/parse_root and merge) for Windows. [William Rowe] *) Cleaned up implementation of of apr_filepath (get/set/parse_root and merge) for Unix. [Greg Stein, William Rowe] *) Fixup the --enable-libtool option. This allows the test directory to compile again. The test directory still doesn't work when APR is configured without libtool. [Ryan Bloom] *) If we don't have sigwait() in the system, see if sigsuspend() is available, and use that instead. [Wilfredo Sanchez] *) Make libtool optional at configure time. This is done with --disable-libtool. [Ryan Bloom] *) Recognize systems where the TCP_NODELAY setting is inherited from the listening socket, and optimize apr_setsockopt(APR_TCP_NODELAY) accordingly. [Jeff Trawick] *) Recognize the presence of getnameinfo() on Tru64. [David Reid] *) Allow APR to be installed. [Ryan Bloom] *) Generate config.nice for easy re-run of configure. [Roy Fielding] *) Define preprocessor flags in CPPFLAGS instead of CFLAGS and bring some sanity to the compiler command-lines. [Roy Fielding] *) Use the dso/aix subdirectory for older versions of AIX and fix a number of bugs in the dso code in that directory. [Victor Orlikowski] *) Allow libtool 1.3b to be used. [Victor Orlikowski] *) Misc. Win32 fixes: Set the pool pointer in apr_sockaddr_t structures created with the apr_socket_t to prevent segfault in certain apps. Flush unwritten buffered data when the file is closed. [Jeff Trawick] *) Win32: Get APR to compile with MSVC 5.0 (a.k.a. VC97). PR #7489 [Jeff Trawick] *) First draft implementation of apr_filepath (get/set/parse_root and merge) for Unix. [William Rowe] *) Add apr_ipsubnet_create() and apr_ipsubnet_test() for testing whether or not an address is within a subnet. [Jeff Trawick] *) Add apr_sendto and apr_recvfrom for Unix. Start of adding UDP support. [David Reid] *) Add a method to get the password from the system for a given user. [John Barbee ] *) Change the include path order, so that we look for included files in the APR paths first, and the system paths second. [jean-frederic clere ] *) Add a with-sendfile option, so that people on platforms without a sendfile implementation for APR can easily disable it from the configure line. [Ryan Bloom] *) Change the check for netinet/tcp.h to work around an issue with that header file on IRIX 6.5 which prevented it from being detected. PR #6459 [Jeff Trawick] *) Introduce apr_get_userid to return a named user's apr_uid_t and apr_gid_t across platforms [Cliff Woolley, William Rowe] *) In apr_shm_init(), check the retcode from mm_malloc(). Previously, we segfaulted here if mm_malloc() failed to get a lock. An example error scenario is when the lock file lives on a filesystem which doesn't support locking. [Jeff Trawick] *) Name protected the autoconf macros defined by APR. Moved the REENTRANCY_FLAGS settings into apr_hints.m4. Inlined the APR_PREPARE_MM_DIR macro because it could only be used once. Removed the unused macros MY_TRY_RUN, MY_TRY_RUN_NATIVE, and AC_USE_FUNCTION. Added some macro comments. [Roy Fielding] *) Cope with BSDi installations where the default make has been replaced with GNU make. [Joe Orton ] *) Changed apr/helpers to apr/build to be consistent with other Apache source trees. Added make variables to rules.mk.in that point to the builders directory and its scripts. Updated buildconf, configure.in, and Makefile.in files to create and use the new scripts. Moved scandoc to scandoc.pl and its default.pl template to scandoc_template.pl. [Roy Fielding] *) Updated config.guess and config.sub to GNU libtool 1.3.5 features, with the Apache additions for OS/390 and OS/2 emx. [Roy Fielding] *) Moved hints.m4, apr_common.m4, and helpers/apr-conf.m4 into the new build directory as apr_hints.m4, apr_common.m4, apr_network.m4, and apr_threads.m4. [Roy Fielding] *) Get apr_sendfile() working on HP-UX. This gets APR to build on HP-UX without having to turn off APR_HAS_SENDFILE. [Jeff Trawick] *) Force FreeBSD to compile without threads by default. To enable threads, use --enable-threads on the configure line. [Ryan Bloom] *) Purge system password buffer before returning from apr_password_get. No longer abuses bufsize argument on return. [William Rowe] *) Moved the prototypes for apr_snprintf and apr_vsnprintf to the apr_strings.h header, from apr_lib.h. This location makes more sense. [Ryan Bloom] *) Added the APR_TRY_COMPILE_NO_WARNING configure macro for testing a compile with -Werror as well as the APR_CHECK_ICONV_INBUF macro to test for annoying iconv prototype differences. [Jeff Trawick, Roy Fielding] *) Fix a problem with configure on NetBSD. We must include sys/types.h for some platforms. [jun-ichiro hagino ] *) Some fixes in the Win32 time support. (IsLeapYear): New macro for quickly figgerin' out if a given year is a leap year. (SystemTimeToAprExpTime): Perform the calculation of tm_yday. Also, negate the sign of the tm_gmtoff field to be consistent with Unix platforms and APR header file comments. [Mike Pilato] *) Implement WinNT Unix'ish permissions. [William Rowe] *) Corrected an OS2'ism of apr_get_home_directory. OS2 now returns the proper directory, including the user's name. *) Removed private os2errno.h and integrated the OS2 network error codes into apr_errno.h for optimized error tests (APR_STATUS_IS_EFOO(rv)). [William Rowe] *) Moved inclusion of header from multiple modules into apr.h [William Rowe] *) Added apr_compare_users() and apr_compare_groups() for more complex apr_uid_t and apr_gid_t structures. Enabled both .user and .group results from WinNT/2000 stat/getfileinfo, but expect to find that .group is 'None' in most cases. [William Rowe] *) Replace configure --with-optim option by using the environment variable OPTIM instead. This is needed because configure options do not support multiple flags separated by spaces. [Roy Fielding] *) Eliminate the APR_SIG* aliases for standard signal names, since they serve no useful purpose. [Roy Fielding] *) Abstracted apr_get_username and apr_get_groupname for unix and win32. Modified Win32 apr_uid_t and apr_gid_t to use PSIDs, and elimintated the uid_t and gid_t definitions. [William Rowe] *) Radically refactored apr_stat/lstat/getfileinfo/dir_read for Win32 to assure we are retrieving what we expect to retrieve, and reporting the correct result (APR_SUCCESS or APR_INCOMPLETE). The potential for a bit more optimization still remains. [William Rowe] *) While we have the future opportunity to cache the apr_stat'ed file handle for a very fast open (dup handle) on Win32, patched to close that file after a stat always. Needs a new semantic before we leave handles dangling when the user intends to rm. [William Rowe] *) Correct Win32 apr_stat/lstat/getfileinfo/dir_read to all zero out the finfo buffer on success (or incomplete success). [William Rowe] *) Fix Win32/Unix apr_lstat to throw the .valid bit APR_FINFO_LINK to indicate we attempted to open the link. Only the .filetype APR_LNK reflects if the file found was, in fact, a link. [William Rowe] *) Fixed apr_open and apr_rename to function on Win9x. [Mike Pilato ] *) Add apr_open_stdout. This mirrors apr_open_stderr, except it works on stdout. [cmpilato@collab.net] *) Fix bug in file_io/unix/dir.c. There is no such thing as a dirent, it must be a struct dirent. [Kevin Pilch-Bisson ] *) Fix the configure script so that we can build from a different directory. [Kevin Pilch-Bisson ] *) Introduce the wanted flag argument to the apr_stat/lstat/getfileinfo family of functions. This change allows the user to determine what platform-specific file information is retrieved, to optimize both portability and performance. [William Rowe] *) Fix make depend. [Ryan Bloom] *) All dso implementations now register a cleanup to unload the DSO when it is loaded. If the pool is removed, we really do need to remove the DSO. In the past, different platforms behaved differently it this respect. [Ryan Bloom] *) Add linkage declarations to the DSO code. [Gregory Nicholls ] *) Some adjustment of hints.m4 setting flags (used to check if null first) and added some verbosity. [Jim Jagielski] *) Specify APR_DECLARE to some of the APR functions. This helps linking on some operating systems. [Gregory Nicholls ] *) Libtool'ized APR and converted all the makefiles to share rules from helpers/rules.mk. [Greg Stein] *) Remove a warning on FreeBSD. FreeBSD defines TCP_NO_PUSH, but we don't actually use it. This causes os_cork to be defined but not used. This patch keeps us from defining os_cork and os_uncork on FreeBSD. [Ryan Bloom] *) Keep apr_terminate from seg faulting on terminate. This is happening on systems that do not NULL out locks when they are destroyed. To keep this from happening, we set the locks to NULL after destroying them in apr_terminate, and we have to check for NULL in free_blocks. [Allan Edwards and Gregory Nicholls ] *) Remove the ability to allocate memory out of a NULL pool. [Ryan Bloom] *) Add an APR_GET_POOL macro to get a pool from any APR type that has a pool. This requires that ALL apr types put the pool as the first field in their structure. [Ryan Bloom] *) Begin to remove the ability to allocate out of NULL pools. The first problem to solve, is that we need an apr_lock in order to allocate pools, so that we can lock things out when allocating. So, how do we allocate locks without a pool to allocate from? The answer is to create a global_apr_pool, which is a bootstrapping pool. There should NEVER be a sub-pool off this pool, and it is static to an APR file. This is only used to allow us to allocate the locks cleanly, without using the NULL pool hack. [Ryan Bloom] *) Fix a logic error in the poll code when implemented using select. [Nick Caruso ] *) FreeBSD does not support sendfile() in combination with threads before version 4.2. We no longer even try to support it. [Ryan Bloom] *) On FreeBSD, it is possible for the first call to sendfile to get EAGAIN, but still send some data. This means that we cannot call sendfile and then check for EAGAIN, and then wait and call sendfile again. If we do that, then we are likely to send the first chunk of data twice, once in the first call and once in the second. If we are using a timed write, then we check to make sure we can send data before trying to send it. [Ryan Bloom] *) Cleanup to help Apache support programs build cleanly. [Cliff Woolley ] *) Cleanup some compiler warnings on Solaris [Dale Ghent ] *) apr_getaddrinfo() can now return multiple addresses for a host via the next field in apr_sockaddr_t. [Jeff Trawick] *) Tighten up the check for getaddrinfo(). If it can't figure out the appropriate address family for 127.0.0.1, it fails. Unfortunately, Tru64 fails this test so we won't do IPv6 on Tru64. [Jeff Trawick] *) Rename apr_opendir to apr_dir_open. [Ryan Bloom] *) apr_snprintf()'s %pI format string now takes apr_sockaddr_t * instead of sockaddr_in *. [Jeff Trawick] *) Fix a bug in apr_accept() for Win32 and Unix where the local apr_sockaddr_t in the new connected socket was not initialized properly. This could result in a bad string for apr_get_ipaddr(), among other things. [Jeff Trawick] *) Add apr_getnameinfo(), a replacement for apr_get_hostname() which supports IPv6 and will be friendlier for use with eventual SOCK_DGRAM support. apr_get_hostname() is gone. [Jeff Trawick] Changes with APR a9 *) Removed the iconv implementation from the i18n/unix/iconv branch. This now resides in the apr-iconv repository, and will be ported over time to use native apr types (e.g. apr_dso) for portability. *) Only support IPv6 if we have sockaddr_in and a working getaddrinfo(). [Jeff Trawick] *) Add apr_parse_addr_port() for parsing the hostname:port portion of URLs and similar strings. [Jeff Trawick] *) Add Win32 MMAP support [William Rowe] *) Allow the APR programmer to specify if the MMAP is read-only or write-able. [Ryan Bloom and Will Rowe] *) Check more carefully for getaddrinfo(). Accept those that require to be included (e.g., Tru64). Reject those that fail a very basic operational test (e.g., AIX). [Jeff Trawick] *) Add apr_make_os_sock() for constructing a fully-capable APR socket. [Jeff Trawick] *) Make APR's shared memory routines always allocate enough memory for the requested segment, the MM internal types, and the APR internal types. [Ryan Bloom] *) Add APR_SIZE_T_FMT. Get the other APR_xx_T_FMT variables defined properly on AIX. [Jeff Trawick] *) network API changes: get rid of apr_get_socket_inaddr(), apr_get_remote_name(), and apr_get_local_name() [Jeff Trawick] *) Add a step at configure time to create a file at the top-level, apr.exports, which lists every function exported by APR. The file is generated by a script in helpers, that reads each header file. [Ryan Bloom] *) Lock config changes: Detect SysV sem capability by the presence of sempaphore functions, not by the presence of union semun. New config variable apr_lock_method can override autodetection of the apr_lock implementation method. For now, hints.m4 uses it to select SysV semaphores for OS/390. New config variable apr_process_lock_is_global specifies that the selected inter-process lock method is sufficient for APR_LOCKALL (i.e., it blocks all threads and processes). For now, hints.m4 turns on this flag for OS/390. [Jeff Trawick] *) Get APR_OFF_T_FMT defined properly on Solaris Sparc. [Jeff Trawick] Changes with APR a8 *) Change the name of the sa_len field in apr_sockaddr_t to salen. Some platforms have a macro named sa_len. [Tony Finch] *) apr_set_port(), apr_get_port(), apr_set_ipaddr(), and apr_get_ipaddr() now take apr_sockaddr_t as a parameter instead of apr_socket_t + apr_interface_e. This will allow the same routines to be used with datagram APIs to be added later. Note that code which calls apr_set_ipaddr() should probably be changed to call apr_getaddrinfo() for protocol independence. [Jeff Trawick] *) apr_create_tcp_socket() has been removed. Use apr_create_socket() instead. [Jeff Trawick] *) Source was moved from the apache-2.0 repository. For all CHANGES prior to this time, please see the apache-2.0 repository