gstein      00/12/02 08:13:50

  Added:       .        .cvsignore Makefile.in STATUS buildconf.sh
                        configure.in
               build    .cvsignore Makefile.in install-sh rules.mk.in
               include  sdbm.h
               src      .cvsignore Makefile.in
               src/buckets .cvsignore Makefile.in
               src/crypto .cvsignore Makefile.in
               src/dbm  .cvsignore Makefile.in
               src/dbm/sdbm .cvsignore Makefile.in sdbm.c sdbm_hash.c
                        sdbm_lock.c sdbm_pair.c sdbm_pair.h sdbm_private.h
                        sdbm_tune.h
               src/encoding .cvsignore Makefile.in
               src/hooks .cvsignore Makefile.in
               src/uri  .cvsignore Makefile.in
               src/xml  .cvsignore Makefile.in
               test     .cvsignore Makefile.in
  Log:
  initial population of the APRUTIL module.
  
  *) add configure/build system
  *) add an initial directory layout (from email proposal)
  *) add the SDBM files as a quick test of the build
     [ these came from apache-2.0/src/lib/sdbm; no tag ]
  *) add an empty STATUS file for tracking the project
  
  Revision  Changes    Path
  1.1                  apr-util/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  .libs
  Makefile
  aclocal.m4
  config.cache
  config.log
  config.status
  configure
  libtool
  libaprutil.la
  
  
  
  1.1                  apr-util/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  #
  # Top-level Makefile for APRUTIL
  #
  
  TARGETS = libaprutil.la
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  SUBDIRS = src . test build
  DISTCLEAN_TARGETS = config.cache config.log config.status config.sub \
        include/apu_config.h
  EXTRACLEAN_TARGETS = configure libtool aclocal.m4 include/apu_config.h.in
  
  ### fix this up at some point (install location)
  libdir = /usr/local/lib
  
  libaprutil.la:
        @objects="`find src -name '*.lo'`" ; \
            echo $(LINK) $$objects ; \
            $(LINK) -rpath $(libdir) $$objects
  
  
  
  1.1                  apr-util/STATUS
  
  Index: STATUS
  ===================================================================
  APRUTIL LIBRARY STATUS:
  Last modified at [$Date: 2000/12/02 16:13:46 $]
  
  Release:
  
  RELEASE SHOWSTOPPERS:
  
      * Fill repository with code
  
  
  RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
  
  
  Documentation that needs writing:
  
      * API documentation
          Status:
  
  
  
  1.1                  apr-util/buildconf.sh
  
  Index: buildconf.sh
  ===================================================================
  #!/bin/sh
  
  #
  # Get a copy of libtool's libtool.m4 and copy it into our aclocal.m4
  #
  # If we ever have our own .m4 files, then we will want to concatenate
  # them altogether into aclocal.m4
  #
  ### we may need to get smarter with these two lines
  ltpath=`which libtoolize`
  ltpath=`dirname $ltpath`
  ltfile=`cd $ltpath/../share/aclocal ; pwd`/libtool.m4
  echo "Incorporating $ltfile into aclocal.m4 ..."
  cat $ltfile > aclocal.m4
  
  #
  # Create the libtool helper files
  #
  # Note: we always replace the files, and we copy (rather than link) them.
  #
  echo "Copying libtool helper files ..."
  $ltpath/libtoolize --force --copy
  
  #
  # Generate the autoconf header (include/apu_config.h) and ./configure
  #
  echo "Creating include/apu_config.h ..."
  autoheader
  
  echo "Creating configure ..."
  ### do some work to toss config.cache?
  autoconf
  
  
  
  1.1                  apr-util/configure.in
  
  Index: configure.in
  ===================================================================
  dnl
  dnl Process this file with autoconf to produce a configure script
  dnl
  
  AC_PREREQ(2.13)
  AC_INIT(build/rules.mk.in)
  
  AC_CONFIG_HEADER(include/apu_config.h)
  AC_CONFIG_AUX_DIR(build)
  
  AC_PROG_CC
  AC_CHECK_PROG(RM, rm, rm)
  
  dnl
  dnl figure out where APR is located
  dnl
  AC_MSG_CHECKING(for APR)
  AC_ARG_WITH(apr,
  [  --with-apr=DIR         path to APR source or the APR includes.],
  [
      if test "$withval" = "yes"; then
          AC_MSG_ERROR(You need to specify a directory with --with-apr)
      fi
      absdir="`cd $withval ; pwd`"
      if test -f "$absdir/apr_pools.h"; then
        APR_INCLUDES="$absdir"
      elif test -f "$absdir/include/apr_pools.h"; then
        APR_INCLUDES="$absdir/include"
      fi
  ],[
      dnl see if we can find APR
      if test -f "$srcdir/apr/include/apr_pools.h"; then
        APR_INCLUDES="$srcdir/apr/include"
      fi
  ])
  if test -z "$APR_INCLUDES"; then
      AC_MSG_RESULT(not found)
      AC_MSG_ERROR(APR could not be located. Please use the --with-apr option.)
  fi
  AC_MSG_RESULT($APR_INCLUDES)
  
  
  dnl
  dnl compute the top directory of the build
  dnl
  top_builddir="`cd $srcdir ; pwd`"
  AC_SUBST(top_builddir)
  
  dnl
  dnl prep libtool
  dnl
  echo "performing libtool configuration..."
  AC_PROG_LIBTOOL
  
  dnl
  dnl set up the compilation flags and stuff
  dnl
  INCLUDES="-I$APR_INCLUDES -I\$(top_builddir)/include"
  
  CFLAGS="$CFLAGS $INCLUDES"
  
  
  AC_OUTPUT([
        Makefile
        build/Makefile
        build/rules.mk
        src/Makefile
        src/buckets/Makefile
        src/crypto/Makefile
        src/dbm/Makefile
        src/dbm/sdbm/Makefile
        src/encoding/Makefile
        src/hooks/Makefile
        src/uri/Makefile
        src/xml/Makefile
        test/Makefile
        ])
  
  
  
  1.1                  apr-util/build/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  config.guess
  config.sub
  ltconfig
  ltmain.sh
  rules.mk
  
  
  
  1.1                  apr-util/build/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  EXTRACLEAN_TARGETS = config.guess config.sub ltconfig ltmain.sh rules.mk
  
  
  
  1.1                  apr-util/build/install-sh
  
  Index: install-sh
  ===================================================================
  #!/bin/sh
  ##
  ##  install.sh -- install a program, script or datafile
  ##
  ##  Based on `install-sh' from the X Consortium's X11R5 distribution
  ##  as of 89/12/18 which is freely available.
  ##  Cleaned up for Apache's Autoconf-style Interface (APACI)
  ##  by Ralf S. Engelschall <[EMAIL PROTECTED]>
  ##
  #
  # This script falls under the Apache License.
  # See http://www.apache.org/docs/LICENSE
  
  
  #
  #   put in absolute paths if you don't have them in your path; 
  #   or use env. vars.
  #
  mvprog="${MVPROG-mv}"
  cpprog="${CPPROG-cp}"
  chmodprog="${CHMODPROG-chmod}"
  chownprog="${CHOWNPROG-chown}"
  chgrpprog="${CHGRPPROG-chgrp}"
  stripprog="${STRIPPROG-strip}"
  rmprog="${RMPROG-rm}"
  
  #
  #   parse argument line
  #
  instcmd="$mvprog"
  chmodcmd=""
  chowncmd=""
  chgrpcmd=""
  stripcmd=""
  rmcmd="$rmprog -f"
  mvcmd="$mvprog"
  ext=""
  src=""
  dst=""
  while [ "x$1" != "x" ]; do
      case $1 in
          -c) instcmd="$cpprog"
              shift; continue
              ;;
          -m) chmodcmd="$chmodprog $2"
              shift; shift; continue
              ;;
          -o) chowncmd="$chownprog $2"
              shift; shift; continue
              ;;
          -g) chgrpcmd="$chgrpprog $2"
              shift; shift; continue
              ;;
          -s) stripcmd="$stripprog"
              shift; continue
              ;;
          -S) stripcmd="$stripprog $2"
              shift; shift; continue
              ;;
          -e) ext="$2"
              shift; shift; continue
              ;;
          *)  if [ "x$src" = "x" ]; then
                  src=$1
              else
                  dst=$1
              fi
              shift; continue
              ;;
      esac
  done
  if [ "x$src" = "x" ]; then
       echo "install.sh: no input file specified"
       exit 1
  fi
  if [ "x$dst" = "x" ]; then
       echo "install.sh: no destination specified"
       exit 1
  fi
  
  #
  #  If destination is a directory, append the input filename; if
  #  your system does not like double slashes in filenames, you may
  #  need to add some logic
  #
  if [ -d $dst ]; then
      dst="$dst/`basename $src`"
  fi
  
  #  Add a possible extension (such as ".exe") to src and dst
  src="$src$ext"
  dst="$dst$ext"
  
  #  Make a temp file name in the proper directory.
  dstdir=`dirname $dst`
  dsttmp=$dstdir/#inst.$$#
  
  #  Move or copy the file name to the temp name
  $instcmd $src $dsttmp
  
  #  And set any options; do chmod last to preserve setuid bits
  if [ "x$chowncmd" != "x" ]; then $chowncmd $dsttmp; fi
  if [ "x$chgrpcmd" != "x" ]; then $chgrpcmd $dsttmp; fi
  if [ "x$stripcmd" != "x" ]; then $stripcmd $dsttmp; fi
  if [ "x$chmodcmd" != "x" ]; then $chmodcmd $dsttmp; fi
  
  #  Now rename the file to the real destination.
  $rmcmd $dst
  $mvcmd $dsttmp $dst
  
  exit 0
  
  
  
  
  1.1                  apr-util/build/rules.mk.in
  
  Index: rules.mk.in
  ===================================================================
  # ====================================================================
  # The Apache Software License, Version 1.1
  #
  # Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
  #    if any, must include the following acknowledgment:
  #       "This product includes software developed by the
  #        Apache Software Foundation (http://www.apache.org/)."
  #    Alternately, this acknowledgment may appear in the software itself,
  #    if and wherever such third-party acknowledgments normally appear.
  #
  # 4. The names "Apache" and "Apache Software Foundation" must
  #    not be used to endorse or promote products derived from this
  #    software without prior written permission. For written
  #    permission, please contact [EMAIL PROTECTED]
  #
  # 5. Products derived from this software may not be called "Apache",
  #    nor may "Apache" appear in their name, without prior written
  #    permission of the Apache Software Foundation.
  #
  # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
  # ITS 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.
  # ====================================================================
  #
  # This software consists of voluntary contributions made by many
  # individuals on behalf of the Apache Software Foundation.  For more
  # information on the Apache Software Foundation, please see
  # <http://www.apache.org/>.
  #
  
  #
  # rules.mk: standard rules for APRUTIL
  #
  
  #
  # Configuration variables
  #
  [EMAIL PROTECTED]@
  
  [EMAIL PROTECTED]@
  [EMAIL PROTECTED]@
  
  [EMAIL PROTECTED]@
  [EMAIL PROTECTED]@
  [EMAIL PROTECTED]@
  
  [EMAIL PROTECTED]@
  [EMAIL PROTECTED]@
  
  ### make LTFLAGS somewhat variable?
  LTFLAGS = --silent
  
  #
  # Basic macro setup
  #
  COMPILE      = $(CC) $(CFLAGS)
  LT_COMPILE   = $(LIBTOOL) --mode=compile $(LTFLAGS) $(COMPILE) -c $< && touch 
$@
  
  LINK         = $(LIBTOOL) --mode=link $(LTFLAGS) $(COMPILE) $(LDFLAGS) -o $@
  
  #
  # Standard build rules
  #
  all: all-recursive
  depend: depend-recursive
  clean: clean-recursive
  distclean: distclean-recursive
  extraclean: extraclean-recursive
  
  install: all-recursive
  
  local-clean:
        $(RM) -f *.o *.lo *.a *.la *.so $(CLEAN_TARGETS)
        $(RM) -rf .libs
  
  
  all-recursive depend-recursive clean-recursive distclean-recursive \
    extraclean-recursive:
        @otarget=`echo $@|sed s/-recursive//`; \
        for i in $(SUBDIRS); do \
            target="$$otarget"; \
            echo "Making $$target in $$i"; \
            if test "$$i" = "."; then \
                made_local=yes; \
                target="local-$$target"; \
            fi; \
            (cd $$i && $(MAKE) $$target) || exit 1; \
        done; \
          if test "$$otarget" = "all" && test -z "$(TARGETS)"; then \
            made_local=n/a; \
        fi; \
        if test -z "$$made_local"; then \
            $(MAKE) "local-$$otarget" || exit 1; \
        fi
  
  # nothing to do for this target
  local-distclean: local-clean
        $(RM) -f Makefile $(DISTCLEAN_TARGETS)
  
  local-extraclean: local-distclean
        @if test -n "$(EXTRACLEAN_TARGETS)"; then \
            echo $(RM) -f $(EXTRACLEAN_TARGETS) ; \
            $(RM) -f $(EXTRACLEAN_TARGETS) ; \
        fi
  
  local-all: $(TARGETS)
  
  local-depend:
  ### need something here
  
  
  #
  # Implicit rules for creating outputs from input files
  #
  .SUFFIXES:
  .SUFFIXES: .c .lo .o
  
  .c.o:
        $(COMPILE) -c $<
  
  .c.lo:
        $(LT_COMPILE)
  
  .PHONY: all depend clean distclean install \
        all-recursive depend-recursive clean-recursive distclean-recursive \
        local-all local-depend local-clean local-distclean
  
  
  
  1.1                  apr-util/include/sdbm.h
  
  Index: sdbm.h
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * sdbm - ndbm work-alike hashed database library
   * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
   * author: [EMAIL PROTECTED]
   * status: ex-public domain
   */
  
  #ifndef SDBM_H
  #define SDBM_H
  
  #include "apr_errno.h"
  #include "apr_file_io.h"   /* for apr_fileperms_t */
  
  typedef struct SDBM SDBM;
  
  /* utility functions */
  int sdbm_rdonly(SDBM *db);
  int sdbm_error(SDBM *db);
  int sdbm_clearerr(SDBM *db);
  
  typedef struct {
      char *dptr;
      int dsize;
  } sdbm_datum;
  
  /* The extensions used for the database files */
  #define SDBM_DIRFEXT  ".dir"
  #define SDBM_PAGFEXT  ".pag"
  
  /* Standard dbm interface */
  
  apr_status_t sdbm_open(SDBM **db, const char *filename, apr_int32_t flags,
                         apr_fileperms_t perms, apr_pool_t *p);
  
  void sdbm_close(SDBM *db); /* ### should return value? */
  
  sdbm_datum sdbm_fetch(SDBM *db, sdbm_datum key);
  apr_status_t sdbm_delete(SDBM *db, const sdbm_datum key);
  
  /* * flags to sdbm_store */
  #define SDBM_INSERT   0
  #define SDBM_REPLACE  1
  apr_status_t sdbm_store(SDBM *db, sdbm_datum key, sdbm_datum value, int 
flags);
  sdbm_datum sdbm_firstkey(SDBM *db);
  sdbm_datum sdbm_nextkey(SDBM *db);
  
  /*
   * other
   */
  apr_status_t sdbm_prep(SDBM **db, const char *dirname, const char *pagname,
                         apr_int32_t flags, apr_fileperms_t perms,
                         apr_pool_t *pool);
  
  long sdbm_hash(const char *str, int len);
  
  #endif /* SDBM_H */
  
  
  
  1.1                  apr-util/src/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  
  
  
  1.1                  apr-util/src/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  SUBDIRS = buckets crypto dbm encoding hooks uri xml
  
  
  
  1.1                  apr-util/src/buckets/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/buckets/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/src/crypto/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/crypto/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/src/dbm/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/dbm/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  SUBDIRS = sdbm .
  
  
  
  1.1                  apr-util/src/dbm/sdbm/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/dbm/sdbm/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  TARGETS = sdbm.lo sdbm_hash.lo sdbm_lock.lo sdbm_pair.lo
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm.c
  
  Index: sdbm.c
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * sdbm - ndbm work-alike hashed database library
   * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
   * author: [EMAIL PROTECTED]
   * ex-public domain, ported to APR for Apache 2
   * core routines
   */
  
  
  #include "sdbm.h"
  #include "sdbm_tune.h"
  #include "sdbm_pair.h"
  #include "sdbm_private.h"
  
  #include "apr.h"
  #include "apr_file_io.h"
  #include "apr_strings.h"
  #include "apr_errno.h"
  
  #include <string.h>     /* for memset() */
  #include <stdlib.h>     /* for malloc() and free() */
  
  /*
   * forward
   */
  static int getdbit (SDBM *, long);
  static apr_status_t setdbit(SDBM *, long);
  static apr_status_t getpage(SDBM *db, long);
  static sdbm_datum getnext(SDBM *db);
  static apr_status_t makroom(SDBM *, long, int);
  
  /*
   * useful macros
   */
  #define SDBM_IOERR    0x2            /* data base I/O error */
  
  #define bad(x)                ((x).dptr == NULL || (x).dsize <= 0)
  #define exhash(item)  sdbm_hash((item).dptr, (item).dsize)
  #define ioerr(db)     ((db)->flags |= SDBM_IOERR)
  
  /* ### Does anything need these externally? */
  #define sdbm_dirfno(db)       ((db)->dirf)
  #define sdbm_pagfno(db)       ((db)->pagf)
  
  #define OFF_PAG(off)  (apr_off_t) (off) * PBLKSIZ
  #define OFF_DIR(off)  (apr_off_t) (off) * DBLKSIZ
  
  static long masks[] = {
        000000000000, 000000000001, 000000000003, 000000000007,
        000000000017, 000000000037, 000000000077, 000000000177,
        000000000377, 000000000777, 000000001777, 000000003777,
        000000007777, 000000017777, 000000037777, 000000077777,
        000000177777, 000000377777, 000000777777, 000001777777,
        000003777777, 000007777777, 000017777777, 000037777777,
        000077777777, 000177777777, 000377777777, 000777777777,
        001777777777, 003777777777, 007777777777, 017777777777
  };
  
  const sdbm_datum sdbm_nullitem = { NULL, 0 };
  
  static apr_status_t database_cleanup(void *data)
  {
      SDBM *db = data;
  
      (void) apr_close(db->dirf);
      (void) sdbm_unlock(db);
      (void) apr_close(db->pagf);
      free(db);
  
      return APR_SUCCESS;
  }
  
  apr_status_t
  sdbm_open(SDBM **db, const char *file, apr_int32_t flags, apr_fileperms_t 
perms, apr_pool_t *p)
  {
      char *dirname = apr_pstrcat(p, file, SDBM_DIRFEXT, NULL);
      char *pagname = apr_pstrcat(p, file, SDBM_PAGFEXT, NULL);
      
      return sdbm_prep(db, dirname, pagname, flags, perms, p);
  }
  
  apr_status_t
  sdbm_prep(SDBM **pdb, const char *dirname, const char *pagname, 
          apr_int32_t flags, apr_fileperms_t perms, apr_pool_t *p)
  {
          SDBM *db;
          apr_finfo_t finfo;
        apr_status_t status;
  
          *pdb = NULL;
  
        db = malloc(sizeof(*db));
          memset(db, 0, sizeof(*db));
  
        db->pool = p;
  
          /*
           * adjust user flags so that WRONLY becomes RDWR, 
           * as required by this package. Also set our internal
           * flag for RDONLY if needed.
           */
        if (!(flags & APR_WRITE)) {
            db->flags = SDBM_RDONLY;
        }
  
        flags |= APR_BINARY | APR_READ;
  
          /*
           * open the files in sequence, and stat the dirfile.
           * If we fail anywhere, undo everything, return NULL.
           */
  
        if ((status = apr_open(&db->pagf, pagname, flags, perms, p))
            != APR_SUCCESS)
              goto error;
  
          if ((status = sdbm_lock(db)) != APR_SUCCESS)
              goto error;
  
          if ((status = apr_open(&db->dirf, dirname, flags, perms, p))
              != APR_SUCCESS)
              goto error;
  
          /*
           * need the dirfile size to establish max bit number.
           */
          if ((status = apr_getfileinfo(&finfo, db->dirf)) != APR_SUCCESS)
              goto error;
  
          /*
           * zero size: either a fresh database, or one with a single,
           * unsplit data page: dirpage is all zeros.
           */
          db->dirbno = (!finfo.size) ? 0 : -1;
          db->pagbno = -1;
          db->maxbno = finfo.size * BYTESIZ;
  
          /* (apr_pcalloc zeroed the buffers) */
  
          /* make sure that we close the database at some point */
          apr_register_cleanup(p, db, database_cleanup, apr_null_cleanup);
  
          /* Done! */
          *pdb = db;
          return APR_SUCCESS;
  
    error:
          if (db->dirf != NULL)
              (void) apr_close(db->dirf);
          if (db->pagf != NULL) {
              (void) sdbm_unlock(db);
              (void) apr_close(db->dirf);
          }
          free(db);
          return status;
  }
  
  void
  sdbm_close(SDBM *db)
  {
      (void) apr_run_cleanup(db->pool, db, database_cleanup);
  }
  
  sdbm_datum
  sdbm_fetch(SDBM *db, sdbm_datum key)
  {
        if (db == NULL || bad(key))
                return sdbm_nullitem;
  
        if (getpage(db, exhash(key)) == APR_SUCCESS)
                return getpair(db->pagbuf, key);
  
        ioerr(db);
        return sdbm_nullitem;
  }
  
  static apr_status_t write_page(SDBM *db, const char *buf, long pagno)
  {
      apr_status_t status;
      apr_off_t off = OFF_PAG(pagno);
      
      if ((status = apr_seek(db->pagf, APR_SET, &off)) != APR_SUCCESS ||
        (status = apr_full_write(db->pagf, buf, PBLKSIZ, NULL)) != APR_SUCCESS) 
{
        ioerr(db);
        return status;
      }
      
      return APR_SUCCESS;
  }
  
  apr_status_t
  sdbm_delete(SDBM *db, const sdbm_datum key)
  {
        apr_status_t status;
  
        if (db == NULL || bad(key))
                return APR_EINVAL;
        if (sdbm_rdonly(db))
                return APR_EINVAL;
  
        if (getpage(db, exhash(key)) == APR_SUCCESS) {
                if (!delpair(db->pagbuf, key))
                        return -1;
  /*
   * update the page file
   */
                if ((status = write_page(db, db->pagbuf, db->pagbno)) != 
APR_SUCCESS)
                    return status;
  
  
                return APR_SUCCESS;
        }
  
        ioerr(db);
        return APR_EACCES;
  }
  
  apr_status_t sdbm_store(SDBM *db, sdbm_datum key, sdbm_datum val, int flags)
  {
        int need;
        register long hash;
        apr_status_t status;
  
        if (db == NULL || bad(key))
                return APR_EINVAL;
        if (sdbm_rdonly(db))
                return APR_EINVAL;
  
        need = key.dsize + val.dsize;
  /*
   * is the pair too big (or too small) for this database ??
   */
        if (need < 0 || need > PAIRMAX)
                return APR_EINVAL;
  
        if ((status = getpage(db, (hash = exhash(key)))) == APR_SUCCESS) {
  
  /*
   * if we need to replace, delete the key/data pair
   * first. If it is not there, ignore.
   */
                if (flags == SDBM_REPLACE)
                        (void) delpair(db->pagbuf, key);
  #ifdef SEEDUPS
                else if (duppair(db->pagbuf, key))
                        return APR_EEXIST;
  #endif
  /*
   * if we do not have enough room, we have to split.
   */
                if (!fitpair(db->pagbuf, need))
                    if ((status = makroom(db, hash, need)) != APR_SUCCESS)
                        return status;
  /*
   * we have enough room or split is successful. insert the key,
   * and update the page file.
   */
                (void) putpair(db->pagbuf, key, val);
  
                if ((status = write_page(db, db->pagbuf, db->pagbno)) != 
APR_SUCCESS)
                    return status;
  
        /*
         * success
         */
                return APR_SUCCESS;
        }
        
        ioerr(db);
        return status;
  }
  
  /*
   * makroom - make room by splitting the overfull page
   * this routine will attempt to make room for SPLTMAX times before
   * giving up.
   */
  static apr_status_t
  makroom(SDBM *db, long hash, int need)
  {
        long newp;
        char twin[PBLKSIZ];
        char *pag = db->pagbuf;
        char *new = twin;
        register int smax = SPLTMAX;
        apr_status_t status;
  
        do {
  /*
   * split the current page
   */
                (void) splpage(pag, new, db->hmask + 1);
  /*
   * address of the new page
   */
                newp = (hash & db->hmask) | (db->hmask + 1);
  
  /*
   * write delay, read avoidence/cache shuffle:
   * select the page for incoming pair: if key is to go to the new page,
   * write out the previous one, and copy the new one over, thus making
   * it the current page. If not, simply write the new page, and we are
   * still looking at the page of interest. current page is not updated
   * here, as sdbm_store will do so, after it inserts the incoming pair.
   */
                if (hash & (db->hmask + 1)) {
                    if ((status = write_page(db, db->pagbuf, db->pagbno)) != 
APR_SUCCESS)
                        return status;
                            
                    db->pagbno = newp;
                    (void) memcpy(pag, new, PBLKSIZ);
                }
                else {
                    if ((status = write_page(db, new, newp)) != APR_SUCCESS)
                        return status;
                }
  
                if ((status = setdbit(db, db->curbit)) != APR_SUCCESS)
                    return status;
  /*
   * see if we have enough room now
   */
                if (fitpair(pag, need))
                    return APR_SUCCESS;
  /*
   * try again... update curbit and hmask as getpage would have
   * done. because of our update of the current page, we do not
   * need to read in anything. BUT we have to write the current
   * [deferred] page out, as the window of failure is too great.
   */
                db->curbit = 2 * db->curbit +
                        ((hash & (db->hmask + 1)) ? 2 : 1);
                db->hmask |= db->hmask + 1;
                
                if ((status = write_page(db, db->pagbuf, db->pagbno))
                    != APR_SUCCESS)
                    return status;
                
        } while (--smax);
  /*
   * if we are here, this is real bad news. After SPLTMAX splits,
   * we still cannot fit the key. say goodnight.
   */
  #if 0
        (void) write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44);
  #endif
        /* ### ENOSPC not really appropriate but better than nothing */
        return APR_ENOSPC;
  
  }
  
  /* Reads 'len' bytes from file 'f' at offset 'off' into buf.
   * 'off' is given relative to the start of the file.
   * If EOF is returned while reading, this is taken as success.
   */
  static apr_status_t read_from(apr_file_t *f, void *buf, 
                             apr_off_t off, apr_size_t len)
  {
      apr_status_t status;
  
      if ((status = apr_seek(f, APR_SET, &off)) != APR_SUCCESS ||
        ((status = apr_full_read(f, buf, len, NULL)) != APR_SUCCESS)) {
        /* if EOF is reached, pretend we read all zero's */
        if (status == APR_EOF) {
            memset(buf, 0, len);
            status = APR_SUCCESS;
        }
        return status;
      }
  
      return APR_SUCCESS;
  }
  
  /*
   * the following two routines will break if
   * deletions aren't taken into account. (ndbm bug)
   */
  sdbm_datum
  sdbm_firstkey(SDBM *db)
  {
  /*
   * start at page 0
   */
        if (read_from(db->pagf, db->pagbuf, OFF_PAG(0), PBLKSIZ) != 
APR_SUCCESS) {
            ioerr(db);
            return sdbm_nullitem;
        }
  
        db->pagbno = 0;
        db->blkptr = 0;
        db->keyptr = 0;
  
        return getnext(db);
  }
  
  sdbm_datum
  sdbm_nextkey(SDBM *db)
  {
        return getnext(db);
  }
  
  /*
   * all important binary tree traversal
   */
  static apr_status_t
  getpage(SDBM *db, long hash)
  {
        register int hbit;
        register long dbit;
        register long pagb;
        apr_status_t status;
  
        dbit = 0;
        hbit = 0;
        while (dbit < db->maxbno && getdbit(db, dbit))
                dbit = 2 * dbit + ((hash & (1 << hbit++)) ? 2 : 1);
  
        debug(("dbit: %d...", dbit));
  
        db->curbit = dbit;
        db->hmask = masks[hbit];
  
        pagb = hash & db->hmask;
  /*
   * see if the block we need is already in memory.
   * note: this lookaside cache has about 10% hit rate.
   */
        if (pagb != db->pagbno) { 
  /*
   * note: here, we assume a "hole" is read as 0s.
   * if not, must zero pagbuf first.
   * ### joe: this assumption was surely never correct? but
   * ### we make it so in read_from anyway.
   */
                if ((status = read_from(db->pagf, db->pagbuf, OFF_PAG(pagb), 
PBLKSIZ)) 
                    != APR_SUCCESS) {
                    ioerr(db);              
                    return status;
                }
  
                if (!chkpage(db->pagbuf))
                    return APR_ENOSPC; /* ### better error? */
                db->pagbno = pagb;
  
                debug(("pag read: %d\n", pagb));
        }
        return APR_SUCCESS;
  }
  
  static int
  getdbit(SDBM *db, long dbit)
  {
        register long c;
        register long dirb;
  
        c = dbit / BYTESIZ;
        dirb = c / DBLKSIZ;
  
        if (dirb != db->dirbno) {
                if (read_from(db->dirf, db->dirbuf, OFF_DIR(dirb), DBLKSIZ)
                    != APR_SUCCESS)
                    return 0;
  
                db->dirbno = dirb;
  
                debug(("dir read: %d\n", dirb));
        }
  
        return db->dirbuf[c % DBLKSIZ] & (1 << dbit % BYTESIZ);
  }
  
  static apr_status_t
  setdbit(SDBM *db, long dbit)
  {
        register long c;
        register long dirb;
        apr_status_t status;
        apr_off_t off;
  
        c = dbit / BYTESIZ;
        dirb = c / DBLKSIZ;
  
        if (dirb != db->dirbno) {
            if ((status = read_from(db->dirf, db->dirbuf, OFF_DIR(dirb), 
DBLKSIZ))
                != APR_SUCCESS)
                return status;
  
            db->dirbno = dirb;
            
            debug(("dir read: %d\n", dirb));
        }
  
        db->dirbuf[c % DBLKSIZ] |= (1 << dbit % BYTESIZ);
  
        if (dbit >= db->maxbno)
                db->maxbno += DBLKSIZ * BYTESIZ;
  
        off = OFF_DIR(dirb);
        if (((status = apr_seek(db->dirf, APR_SET, &off)) != APR_SUCCESS)
            || (status = apr_full_write(db->dirf, db->dirbuf, DBLKSIZ,
                                         NULL)) != APR_SUCCESS) {
            return status;
          }
  
        return APR_SUCCESS;
  }
  
  /*
   * getnext - get the next key in the page, and if done with
   * the page, try the next page in sequence
   */
  static sdbm_datum
  getnext(SDBM *db)
  {
        sdbm_datum key;
  
        for (;;) {
                db->keyptr++;
                key = getnkey(db->pagbuf, db->keyptr);
                if (key.dptr != NULL)
                        return key;
  /*
   * we either run out, or there is nothing on this page..
   * try the next one... If we lost our position on the
   * file, we will have to seek.
   */
                db->keyptr = 0;
                if (db->pagbno != db->blkptr++) {
                    apr_off_t off = OFF_PAG(db->blkptr);
                    if (apr_seek(db->pagf, APR_SET, &off) != APR_SUCCESS)
                        break;
                }
  
                db->pagbno = db->blkptr;
                /* ### EOF acceptable here too? */
                if (apr_full_read(db->pagf, db->pagbuf, PBLKSIZ, NULL) != 
APR_SUCCESS)
                        break;
                if (!chkpage(db->pagbuf))
                        break;
        }
                
        ioerr(db);
        return sdbm_nullitem;
  }
  
  
  int sdbm_rdonly(SDBM *db)
  {
      return ((db)->flags & SDBM_RDONLY);
  }
  
  int sdbm_error(SDBM *db)
  {
      return ((db)->flags & SDBM_IOERR);
  }
  
  int sdbm_clearerr(SDBM *db)
  {
      return ((db)->flags &= ~SDBM_IOERR);  /* ouch */
  }
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm_hash.c
  
  Index: sdbm_hash.c
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * sdbm - ndbm work-alike hashed database library
   * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
   * author: [EMAIL PROTECTED]
   * status: ex-public domain. keep it that way.
   *
   * hashing routine
   */
  
  #include "sdbm.h"
  
  /*
   * polynomial conversion ignoring overflows
   * [this seems to work remarkably well, in fact better
   * then the ndbm hash function. Replace at your own risk]
   * use: 65599 nice.
   *      65587   even better. 
   */
  long sdbm_hash(const char *str, int len)
  {
        register unsigned long n = 0;
  
  #define DUFF  /* go ahead and use the loop-unrolled version */
  #ifdef DUFF
  
  #define HASHC n = *str++ + 65599 * n
  
        if (len > 0) {
                register int loop = (len + 8 - 1) >> 3;
  
                switch(len & (8 - 1)) {
                case 0: do {
                        HASHC;  case 7: HASHC;
                case 6: HASHC;  case 5: HASHC;
                case 4: HASHC;  case 3: HASHC;
                case 2: HASHC;  case 1: HASHC;
                        } while (--loop);
                }
  
        }
  #else
        while (len--)
                n = *str++ + 65599 * n;
  #endif
        return n;
  }
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm_lock.c
  
  Index: sdbm_lock.c
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  #include "apr_file_io.h"
  
  #include "sdbm.h"
  #include "sdbm_private.h"
  
  /* NOTE: this function blocks until it acquires the lock */
  apr_status_t sdbm_lock(SDBM *db)
  {
      int type;
  
      if ((db->flags & SDBM_RDONLY) == 0)
          type = APR_FLOCK_EXCLUSIVE;
      else
          type = APR_FLOCK_SHARED;
  
      return apr_lock_file(db->pagf, type);
  }
  
  apr_status_t sdbm_unlock(SDBM *db)
  {
      return apr_unlock_file(db->pagf);
  }
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm_pair.c
  
  Index: sdbm_pair.c
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * sdbm - ndbm work-alike hashed database library
   * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
   * author: [EMAIL PROTECTED]
   * status: ex-public domain.
   *
   * page-level routines
   */
  
  #include "sdbm.h"
  #include "sdbm_tune.h"
  #include "sdbm_pair.h"
  #include "sdbm_private.h"
  
  #include <string.h>   /* for memset() */
  
  
  #define exhash(item)  sdbm_hash((item).dptr, (item).dsize)
  
  /* 
   * forward 
   */
  static int seepair(char *, int, char *, int);
  
  /*
   * page format:
   *    +------------------------------+
   * ino        | n | keyoff | datoff | keyoff |
   *    +------------+--------+--------+
   *    | datoff | - - - ---->         |
   *    +--------+---------------------+
   *    |        F R E E A R E A       |
   *    +--------------+---------------+
   *    |  <---- - - - | data          |
   *    +--------+-----+----+----------+
   *    |  key   | data     | key      |
   *    +--------+----------+----------+
   *
   * calculating the offsets for free area:  if the number
   * of entries (ino[0]) is zero, the offset to the END of
   * the free area is the block size. Otherwise, it is the
   * nth (ino[ino[0]]) entry's offset.
   */
  
  int
  fitpair(pag, need)
  char *pag;
  int need;
  {
        register int n;
        register int off;
        register int avail;
        register short *ino = (short *) pag;
  
        off = ((n = ino[0]) > 0) ? ino[n] : PBLKSIZ;
        avail = off - (n + 1) * sizeof(short);
        need += 2 * sizeof(short);
  
        debug(("avail %d need %d\n", avail, need));
  
        return need <= avail;
  }
  
  void
  putpair(pag, key, val)
  char *pag;
  sdbm_datum key;
  sdbm_datum val;
  {
        register int n;
        register int off;
        register short *ino = (short *) pag;
  
        off = ((n = ino[0]) > 0) ? ino[n] : PBLKSIZ;
  /*
   * enter the key first
   */
        off -= key.dsize;
        (void) memcpy(pag + off, key.dptr, key.dsize);
        ino[n + 1] = off;
  /*
   * now the data
   */
        off -= val.dsize;
        (void) memcpy(pag + off, val.dptr, val.dsize);
        ino[n + 2] = off;
  /*
   * adjust item count
   */
        ino[0] += 2;
  }
  
  sdbm_datum
  getpair(pag, key)
  char *pag;
  sdbm_datum key;
  {
        register int i;
        register int n;
        sdbm_datum val;
        register short *ino = (short *) pag;
  
        if ((n = ino[0]) == 0)
                return sdbm_nullitem;
  
        if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0)
                return sdbm_nullitem;
  
        val.dptr = pag + ino[i + 1];
        val.dsize = ino[i] - ino[i + 1];
        return val;
  }
  
  #ifdef SEEDUPS
  int
  duppair(pag, key)
  char *pag;
  sdbm_datum key;
  {
        register short *ino = (short *) pag;
        return ino[0] > 0 && seepair(pag, ino[0], key.dptr, key.dsize) > 0;
  }
  #endif
  
  sdbm_datum
  getnkey(pag, num)
  char *pag;
  int num;
  {
        sdbm_datum key;
        register int off;
        register short *ino = (short *) pag;
  
        num = num * 2 - 1;
        if (ino[0] == 0 || num > ino[0])
                return sdbm_nullitem;
  
        off = (num > 1) ? ino[num - 1] : PBLKSIZ;
  
        key.dptr = pag + ino[num];
        key.dsize = off - ino[num];
  
        return key;
  }
  
  int
  delpair(pag, key)
  char *pag;
  sdbm_datum key;
  {
        register int n;
        register int i;
        register short *ino = (short *) pag;
  
        if ((n = ino[0]) == 0)
                return 0;
  
        if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0)
                return 0;
  /*
   * found the key. if it is the last entry
   * [i.e. i == n - 1] we just adjust the entry count.
   * hard case: move all data down onto the deleted pair,
   * shift offsets onto deleted offsets, and adjust them.
   * [note: 0 < i < n]
   */
        if (i < n - 1) {
                register int m;
                register char *dst = pag + (i == 1 ? PBLKSIZ : ino[i - 1]);
                register char *src = pag + ino[i + 1];
                register int   zoo = dst - src;
  
                debug(("free-up %d ", zoo));
  /*
   * shift data/keys down
   */
                m = ino[i + 1] - ino[n];
  
  #undef DUFF   /* just use memmove. it should be plenty fast. */
  #ifdef DUFF
  #define MOVB  *--dst = *--src
  
                if (m > 0) {
                        register int loop = (m + 8 - 1) >> 3;
  
                        switch (m & (8 - 1)) {
                        case 0: do {
                                MOVB;   case 7: MOVB;
                        case 6: MOVB;   case 5: MOVB;
                        case 4: MOVB;   case 3: MOVB;
                        case 2: MOVB;   case 1: MOVB;
                                } while (--loop);
                        }
                }
  #else
                dst -= m;
                src -= m;
                memmove(dst, src, m);
  #endif
  
  /*
   * adjust offset index up
   */
                while (i < n - 1) {
                        ino[i] = ino[i + 2] + zoo;
                        i++;
                }
        }
        ino[0] -= 2;
        return 1;
  }
  
  /*
   * search for the key in the page.
   * return offset index in the range 0 < i < n.
   * return 0 if not found.
   */
  static int
  seepair(pag, n, key, siz)
  char *pag;
  register int n;
  register char *key;
  register int siz;
  {
        register int i;
        register int off = PBLKSIZ;
        register short *ino = (short *) pag;
  
        for (i = 1; i < n; i += 2) {
                if (siz == off - ino[i] &&
                    memcmp(key, pag + ino[i], siz) == 0)
                        return i;
                off = ino[i + 1];
        }
        return 0;
  }
  
  void
  splpage(pag, new, sbit)
  char *pag;
  char *new;
  long sbit;
  {
        sdbm_datum key;
        sdbm_datum val;
  
        register int n;
        register int off = PBLKSIZ;
        char cur[PBLKSIZ];
        register short *ino = (short *) cur;
  
        (void) memcpy(cur, pag, PBLKSIZ);
        (void) memset(pag, 0, PBLKSIZ);
        (void) memset(new, 0, PBLKSIZ);
  
        n = ino[0];
        for (ino++; n > 0; ino += 2) {
                key.dptr = cur + ino[0]; 
                key.dsize = off - ino[0];
                val.dptr = cur + ino[1];
                val.dsize = ino[0] - ino[1];
  /*
   * select the page pointer (by looking at sbit) and insert
   */
                (void) putpair((exhash(key) & sbit) ? new : pag, key, val);
  
                off = ino[1];
                n -= 2;
        }
  
        debug(("%d split %d/%d\n", ((short *) cur)[0] / 2, 
               ((short *) new)[0] / 2,
               ((short *) pag)[0] / 2));
  }
  
  /*
   * check page sanity: 
   * number of entries should be something
   * reasonable, and all offsets in the index should be in order.
   * this could be made more rigorous.
   */
  int
  chkpage(pag)
  char *pag;
  {
        register int n;
        register int off;
        register short *ino = (short *) pag;
  
        if ((n = ino[0]) < 0 || n > PBLKSIZ / sizeof(short))
                return 0;
  
        if (n > 0) {
                off = PBLKSIZ;
                for (ino++; n > 0; ino += 2) {
                        if (ino[0] > off || ino[1] > off ||
                            ino[1] > ino[0])
                                return 0;
                        off = ino[1];
                        n -= 2;
                }
        }
        return 1;
  }
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm_pair.h
  
  Index: sdbm_pair.h
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  #ifndef SDBM_PAIR_H
  #define SDBM_PAIR_H
  
  /* Mini EMBED (pair.c) */
  #define chkpage sdbm__chkpage
  #define delpair sdbm__delpair
  #define duppair sdbm__duppair
  #define fitpair sdbm__fitpair
  #define getnkey sdbm__getnkey
  #define getpair sdbm__getpair
  #define putpair sdbm__putpair
  #define splpage sdbm__splpage
  
  int fitpair(char *, int);
  void  putpair(char *, sdbm_datum, sdbm_datum);
  sdbm_datum getpair(char *, sdbm_datum);
  int  delpair(char *, sdbm_datum);
  int  chkpage (char *);
  sdbm_datum getnkey(char *, int);
  void splpage(char *, char *, long);
  #ifdef SEEDUPS
  int duppair(char *, sdbm_datum);
  #endif
  
  #endif /* SDBM_PAIR_H */
  
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm_private.h
  
  Index: sdbm_private.h
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * sdbm - ndbm work-alike hashed database library
   * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
   * author: [EMAIL PROTECTED]
   */
  
  #ifndef SDBM_PRIVATE_H
  #define SDBM_PRIVATE_H
  
  #include "apr.h"
  #include "apr_pools.h"
  #include "apr_file_io.h"
  #include "apr_errno.h" /* for apr_status_t */
  
  /* increase the block/page size and what can be inserted */
  
  #if 1
  #define DBLKSIZ 16384
  #define PBLKSIZ 8192
  #define PAIRMAX 8008                  /* arbitrary on PBLKSIZ-N */
  #else
  #define DBLKSIZ 4096
  #define PBLKSIZ 1024
  #define PAIRMAX 1008                  /* arbitrary on PBLKSIZ-N */
  #endif
  #define SPLTMAX       10                      /* maximum allowed splits */
  
  /* for SDBM.flags */
  #define SDBM_RDONLY   0x1            /* data base open read-only */
                                        /* for a single insertion */
  struct SDBM {
      apr_pool_t *pool;
      apr_file_t *dirf;                /* directory file descriptor */
      apr_file_t *pagf;                /* page file descriptor */
      apr_int32_t flags;                       /* status/error flags, see below 
*/
      long maxbno;                     /* size of dirfile in bits */
      long curbit;                     /* current bit number */
      long hmask;                              /* current hash mask */
      long blkptr;                     /* current block for nextkey */
      int keyptr;                              /* current key for nextkey */
      long blkno;                              /* current page to read/write */
      long pagbno;                     /* current page in pagbuf */
      char pagbuf[PBLKSIZ];            /* page file block buffer */
      long dirbno;                     /* current block in dirbuf */
      char dirbuf[DBLKSIZ];            /* directory file block buffer */
  };
  
  apr_status_t sdbm_lock(SDBM *db);
  apr_status_t sdbm_unlock(SDBM *db);
  
  extern const sdbm_datum sdbm_nullitem;
  
  #endif /* SDBM_PRIVATE_H */
  
  
  
  1.1                  apr-util/src/dbm/sdbm/sdbm_tune.h
  
  Index: sdbm_tune.h
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * sdbm - ndbm work-alike hashed database library
   * tuning and portability constructs [not nearly enough]
   * author: [EMAIL PROTECTED]
   */
  
  #ifndef SDBM_TUNE_H
  #define SDBM_TUNE_H
  
  #include "apr_errno.h"
  
  /* ### this might be better off as sizeof(char *) */
  #define BYTESIZ               8
  
  /*
   * important tuning parms (hah)
   */
  
  #define SEEDUPS                       /* always detect duplicates */
  #define BADMESS                       /* generate a message for worst case:
                                   cannot make room after SPLTMAX splits */
  /*
   * misc
   */
  #ifdef DEBUG
  #define debug(x)      printf x
  #else
  #define debug(x)
  #endif
  
  apr_status_t sdbm_fd_lock(int fd, int readonly);
  apr_status_t sdbm_fd_unlock(int fd);
  
  #endif /* SDBM_TUNE_H */
  
  
  
  1.1                  apr-util/src/encoding/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/encoding/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/src/hooks/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/hooks/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/src/uri/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/uri/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/src/xml/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/src/xml/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  
  1.1                  apr-util/test/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  Makefile
  *.lo
  *.la
  .libs
  
  
  
  1.1                  apr-util/test/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  
  top_builddir = @top_builddir@
  include $(top_builddir)/build/rules.mk
  
  
  

Reply via email to