On Wed, Feb 15, 2006 at 01:47:35AM +0000, Julian Gilbey wrote:
> So (especially as libdb2 is likely to vanish before etch), I attach a
> patch for db1-compat (although I'm not reassigning this bug there),
> which makes it build db_dump185 and conflict/replace libdb2.
> 
> Please could you apply this, Colin?

Shall we try attaching the patch this time? :)

   Julian
diff -u db1-compat-2.1.3/Makefile db1-compat-2.1.3/Makefile
--- db1-compat-2.1.3/Makefile
+++ db1-compat-2.1.3/Makefile
@@ -25,7 +25,7 @@
 CPPFLAGS += -D_GNU_SOURCE
 libdb.so-version=.2
 
-all: libdb1.so$(libdb.so-version)
+all: libdb1.so$(libdb.so-version) db_dump185/db_dump185
 
 %.o: %.c
        $(CC) $(CPPFLAGS) $(CFLAGS) -c -g -o $@ $<
@@ -40,4 +40,8 @@
+db_dump185/db_dump185: db_dump185/db_dump185.c libdb1.so$(libdb.so-version)
+       $(CC) -I. -o $@ $< libdb1.so$(libdb.so-version)
+
 clean:
        rm -f $(patsubst %,%.o,$(libdb1-routines))
        rm -f $(patsubst %,%.os,$(libdb1-routines))
        rm -f libdb1.so$(libdb.so-version) *~
+       rm -f db_dump185/db_dump185
diff -u db1-compat-2.1.3/debian/rules db1-compat-2.1.3/debian/rules
--- db1-compat-2.1.3/debian/rules
+++ db1-compat-2.1.3/debian/rules
@@ -29,9 +29,11 @@
 binary-arch: build
        dh_testdir
        dh_testroot
-       dh_installdirs lib
+       dh_installdirs lib usr/bin usr/share/man/man1
        # match glibc
        install -m644 libdb1.so$(soversion) $(dtmp)/lib/libdb1-2.2.5.so
+       install -m755 db_dump185/db_dump185 $(dtmp)/usr/bin
+       install -m644 db_dump185/db_dump185.1 $(dtmp)/usr/share/man/man1
        ln -s libdb1-2.2.5.so $(dtmp)/lib/libdb1.so$(soversion)
        ln -s libdb1-2.2.5.so $(dtmp)/lib/libdb.so$(soversion)
        dh_installdocs
diff -u db1-compat-2.1.3/debian/changelog db1-compat-2.1.3/debian/changelog
--- db1-compat-2.1.3/debian/changelog
+++ db1-compat-2.1.3/debian/changelog
@@ -1,3 +1,10 @@
+db1-compat (2.1.3-10) unstable; urgency=low
+
+  * Add db_dump185 to this package from the source of db4.3 version 4.3.29
+    and conflict with libdb2-util (Closes: #169830)
+
+ -- Julian Gilbey <[EMAIL PROTECTED]>  Wed, 15 Feb 2006 01:31:29 +0000
+
 db1-compat (2.1.3-9) unstable; urgency=low
 
   * Make binary-arch target depend on build (thanks, Julian Gilbey;
diff -u db1-compat-2.1.3/debian/control db1-compat-2.1.3/debian/control
--- db1-compat-2.1.3/debian/control
+++ db1-compat-2.1.3/debian/control
@@ -8,7 +8,7 @@
 Package: libdb1-compat
 Architecture: any
 Depends: ${shlibs:Depends}
-Replaces: libc6 (<< 2.2.5-13), libc6.1 (<< 2.2.5-13), libc0.3 (<< 2.2.5-13)
+Replaces: libc6 (<< 2.2.5-13), libc6.1 (<< 2.2.5-13), libc0.3 (<< 2.2.5-13), 
libdb2-util
 Description: The Berkeley database routines [glibc 2.0/2.1 compatibility]
  libdb is a library for manipulating database files, developed at Berkeley.
  .
only in patch2:
unchanged:
--- db1-compat-2.1.3.orig/db_dump185/db_dump185.c
+++ db1-compat-2.1.3/db_dump185/db_dump185.c
@@ -0,0 +1,355 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2004
+ *     Sleepycat Software.  All rights reserved.
+ *
+ * $Id: db_dump185.c,v 11.19 2004/01/28 03:36:00 bostic Exp $
+ */
+
+#ifndef lint
+static char copyright[] =
+    "Copyright (c) 1996-2004\nSleepycat Software Inc.  All rights reserved.\n";
+#endif
+
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+
+/* Hash Table Information */
+typedef struct hashhdr185 {            /* Disk resident portion */
+       int             magic;          /* Magic NO for hash tables */
+       int             version;        /* Version ID */
+       u_int32_t       lorder;         /* Byte Order */
+       int             bsize;          /* Bucket/Page Size */
+       int             bshift;         /* Bucket shift */
+       int             dsize;          /* Directory Size */
+       int             ssize;          /* Segment Size */
+       int             sshift;         /* Segment shift */
+       int             ovfl_point;     /* Where overflow pages are being
+                                        * allocated */
+       int             last_freed;     /* Last overflow page freed */
+       int             max_bucket;     /* ID of Maximum bucket in use */
+       int             high_mask;      /* Mask to modulo into entire table */
+       int             low_mask;       /* Mask to modulo into lower half of
+                                        * table */
+       int             ffactor;        /* Fill factor */
+       int             nkeys;          /* Number of keys in hash table */
+} HASHHDR185;
+typedef struct htab185  {              /* Memory resident data structure */
+       HASHHDR185      hdr;            /* Header */
+} HTAB185;
+
+/* Hash Table Information */
+typedef struct hashhdr186 {    /* Disk resident portion */
+       int32_t magic;          /* Magic NO for hash tables */
+       int32_t version;        /* Version ID */
+       int32_t lorder;         /* Byte Order */
+       int32_t bsize;          /* Bucket/Page Size */
+       int32_t bshift;         /* Bucket shift */
+       int32_t ovfl_point;     /* Where overflow pages are being allocated */
+       int32_t last_freed;     /* Last overflow page freed */
+       int32_t max_bucket;     /* ID of Maximum bucket in use */
+       int32_t high_mask;      /* Mask to modulo into entire table */
+       int32_t low_mask;       /* Mask to modulo into lower half of table */
+       int32_t ffactor;        /* Fill factor */
+       int32_t nkeys;          /* Number of keys in hash table */
+       int32_t hdrpages;       /* Size of table header */
+       int32_t h_charkey;      /* value of hash(CHARKEY) */
+#define        NCACHED 32              /* number of bit maps and spare points 
*/
+       int32_t spares[NCACHED];/* spare pages for overflow */
+                               /* address of overflow page bitmaps */
+       u_int16_t bitmaps[NCACHED];
+} HASHHDR186;
+typedef struct htab186  {              /* Memory resident data structure */
+       void *unused[2];
+       HASHHDR186      hdr;            /* Header */
+} HTAB186;
+
+typedef struct _epgno {
+       u_int32_t pgno;                 /* the page number */
+       u_int16_t index;                /* the index on the page */
+} EPGNO;
+
+typedef struct _epg {
+       void    *page;                  /* the (pinned) page */
+       u_int16_t index;                /* the index on the page */
+} EPG;
+
+typedef struct _cursor {
+       EPGNO    pg;                    /* B: Saved tree reference. */
+       DBT      key;                   /* B: Saved key, or key.data == NULL. */
+       u_int32_t rcursor;              /* R: recno cursor (1-based) */
+
+#define        CURS_ACQUIRE    0x01            /*  B: Cursor needs to be 
reacquired. */
+#define        CURS_AFTER      0x02            /*  B: Unreturned cursor after 
key. */
+#define        CURS_BEFORE     0x04            /*  B: Unreturned cursor before 
key. */
+#define        CURS_INIT       0x08            /* RB: Cursor initialized. */
+       u_int8_t flags;
+} CURSOR;
+
+/* The in-memory btree/recno data structure. */
+typedef struct _btree {
+       void     *bt_mp;                /* memory pool cookie */
+
+       void     *bt_dbp;               /* pointer to enclosing DB */
+
+       EPG       bt_cur;               /* current (pinned) page */
+       void     *bt_pinned;            /* page pinned across calls */
+
+       CURSOR    bt_cursor;            /* cursor */
+
+       EPGNO     bt_stack[50];         /* stack of parent pages */
+       EPGNO    *bt_sp;                /* current stack pointer */
+
+       DBT       bt_rkey;              /* returned key */
+       DBT       bt_rdata;             /* returned data */
+
+       int       bt_fd;                /* tree file descriptor */
+
+       u_int32_t bt_free;              /* next free page */
+       u_int32_t bt_psize;             /* page size */
+       u_int16_t bt_ovflsize;          /* cut-off for key/data overflow */
+       int       bt_lorder;            /* byte order */
+                                       /* sorted order */
+       enum { NOT, BACK, FORWARD } bt_order;
+       EPGNO     bt_last;              /* last insert */
+
+                                       /* B: key comparison function */
+       int     (*bt_cmp) __P((DBT *, DBT *));
+                                       /* B: prefix comparison function */
+       size_t  (*bt_pfx) __P((DBT *, DBT *));
+                                       /* R: recno input function */
+       int     (*bt_irec) __P((struct _btree *, u_int32_t));
+
+       FILE     *bt_rfp;               /* R: record FILE pointer */
+       int       bt_rfd;               /* R: record file descriptor */
+
+       void     *bt_cmap;              /* R: current point in mapped space */
+       void     *bt_smap;              /* R: start of mapped space */
+       void     *bt_emap;              /* R: end of mapped space */
+       size_t    bt_msize;             /* R: size of mapped region. */
+
+       u_int32_t bt_nrecs;             /* R: number of records */
+       size_t    bt_reclen;            /* R: fixed record length */
+       u_char    bt_bval;              /* R: delimiting byte/pad character */
+
+/*
+ * NB:
+ * B_NODUPS and R_RECNO are stored on disk, and may not be changed.
+ */
+#define        B_INMEM         0x00001         /* in-memory tree */
+#define        B_METADIRTY     0x00002         /* need to write metadata */
+#define        B_MODIFIED      0x00004         /* tree modified */
+#define        B_NEEDSWAP      0x00008         /* if byte order requires 
swapping */
+#define        B_RDONLY        0x00010         /* read-only tree */
+
+#define        B_NODUPS        0x00020         /* no duplicate keys permitted 
*/
+#define        R_RECNO         0x00080         /* record oriented tree */
+
+#define        R_CLOSEFP       0x00040         /* opened a file pointer */
+#define        R_EOF           0x00100         /* end of input file reached. */
+#define        R_FIXLEN        0x00200         /* fixed length records */
+#define        R_MEMMAPPED     0x00400         /* memory mapped file. */
+#define        R_INMEM         0x00800         /* in-memory file */
+#define        R_MODIFIED      0x01000         /* modified file */
+#define        R_RDONLY        0x02000         /* read-only file */
+
+#define        B_DB_LOCK       0x04000         /* DB_LOCK specified. */
+#define        B_DB_SHMEM      0x08000         /* DB_SHMEM specified. */
+#define        B_DB_TXN        0x10000         /* DB_TXN specified. */
+       u_int32_t flags;
+} BTREE;
+
+void   db_btree __P((DB *, int));
+void   db_hash __P((DB *, int));
+void   dbt_dump __P((DBT *));
+void   dbt_print __P((DBT *));
+int    main __P((int, char *[]));
+int    usage __P((void));
+
+int
+main(argc, argv)
+       int argc;
+       char *argv[];
+{
+       extern char *optarg;
+       extern int optind;
+       DB *dbp;
+       DBT key, data;
+       int ch, pflag, rval;
+
+       pflag = 0;
+       while ((ch = getopt(argc, argv, "f:p")) != EOF)
+               switch (ch) {
+               case 'f':
+                       if (freopen(optarg, "w", stdout) == NULL) {
+                               fprintf(stderr, "db_dump185: %s: %s\n",
+                                   optarg, strerror(errno));
+                               return (EXIT_FAILURE);
+                       }
+                       break;
+               case 'p':
+                       pflag = 1;
+                       break;
+               case '?':
+               default:
+                       return (usage());
+               }
+       argc -= optind;
+       argv += optind;
+
+       if (argc != 1)
+               return (usage());
+
+       if ((dbp = dbopen(argv[0], O_RDONLY, 0, DB_BTREE, NULL)) == NULL) {
+               if ((dbp =
+                   dbopen(argv[0], O_RDONLY, 0, DB_HASH, NULL)) == NULL) {
+                       fprintf(stderr,
+                           "db_dump185: %s: %s\n", argv[0], strerror(errno));
+                       return (EXIT_FAILURE);
+               }
+               db_hash(dbp, pflag);
+       } else
+               db_btree(dbp, pflag);
+
+       /*
+        * !!!
+        * DB 1.85 DBTs are a subset of DB 2.0 DBTs, so we just use the
+        * new dump/print routines.
+        */
+       if (pflag)
+               while (!(rval = dbp->seq(dbp, &key, &data, R_NEXT))) {
+                       dbt_print(&key);
+                       dbt_print(&data);
+               }
+       else
+               while (!(rval = dbp->seq(dbp, &key, &data, R_NEXT))) {
+                       dbt_dump(&key);
+                       dbt_dump(&data);
+               }
+
+       if (rval == -1) {
+               fprintf(stderr, "db_dump185: seq: %s\n", strerror(errno));
+               return (EXIT_FAILURE);
+       }
+       return (EXIT_SUCCESS);
+}
+
+/*
+ * db_hash --
+ *     Dump out hash header information.
+ */
+void
+db_hash(dbp, pflag)
+       DB *dbp;
+       int pflag;
+{
+       HTAB185 *hash185p;
+       HTAB186 *hash186p;
+
+       printf("format=%s\n", pflag ? "print" : "bytevalue");
+       printf("type=hash\n");
+
+       /* DB 1.85 was version 2, DB 1.86 was version 3. */
+       hash185p = dbp->internal;
+       if (hash185p->hdr.version > 2) {
+               hash186p = dbp->internal;
+               printf("h_ffactor=%lu\n", (u_long)hash186p->hdr.ffactor);
+               if (hash186p->hdr.lorder != 0)
+                       printf("db_lorder=%lu\n", (u_long)hash186p->hdr.lorder);
+               printf("db_pagesize=%lu\n", (u_long)hash186p->hdr.bsize);
+       } else {
+               printf("h_ffactor=%lu\n", (u_long)hash185p->hdr.ffactor);
+               if (hash185p->hdr.lorder != 0)
+                       printf("db_lorder=%lu\n", (u_long)hash185p->hdr.lorder);
+               printf("db_pagesize=%lu\n", (u_long)hash185p->hdr.bsize);
+       }
+       printf("HEADER=END\n");
+}
+
+/*
+ * db_btree --
+ *     Dump out btree header information.
+ */
+void
+db_btree(dbp, pflag)
+       DB *dbp;
+       int pflag;
+{
+       BTREE *btp;
+
+       btp = dbp->internal;
+
+       printf("format=%s\n", pflag ? "print" : "bytevalue");
+       printf("type=btree\n");
+#ifdef NOT_AVAILABLE_IN_185
+       printf("bt_minkey=%lu\n", (u_long)XXX);
+       printf("bt_maxkey=%lu\n", (u_long)XXX);
+#endif
+       if (btp->bt_lorder != 0)
+               printf("db_lorder=%lu\n", (u_long)btp->bt_lorder);
+       printf("db_pagesize=%lu\n", (u_long)btp->bt_psize);
+       if (!(btp->flags & B_NODUPS))
+               printf("duplicates=1\n");
+       printf("HEADER=END\n");
+}
+
+static char hex[] = "0123456789abcdef";
+
+/*
+ * dbt_dump --
+ *     Write out a key or data item using byte values.
+ */
+void
+dbt_dump(dbtp)
+       DBT *dbtp;
+{
+       size_t len;
+       u_int8_t *p;
+
+       for (len = dbtp->size, p = dbtp->data; len--; ++p)
+               (void)printf("%c%c",
+                   hex[(*p & 0xf0) >> 4], hex[*p & 0x0f]);
+       printf("\n");
+}
+
+/*
+ * dbt_print --
+ *     Write out a key or data item using printable characters.
+ */
+void
+dbt_print(dbtp)
+       DBT *dbtp;
+{
+       size_t len;
+       u_int8_t *p;
+
+       for (len = dbtp->size, p = dbtp->data; len--; ++p)
+               if (isprint((int)*p)) {
+                       if (*p == '\\')
+                               (void)printf("\\");
+                       (void)printf("%c", *p);
+               } else
+                       (void)printf("\\%c%c",
+                           hex[(*p & 0xf0) >> 4], hex[*p & 0x0f]);
+       printf("\n");
+}
+
+/*
+ * usage --
+ *     Display the usage message.
+ */
+int
+usage()
+{
+       (void)fprintf(stderr, "usage: db_dump185 [-p] [-f file] db_file\n");
+       return (EXIT_FAILURE);
+}
only in patch2:
unchanged:
--- db1-compat-2.1.3.orig/db_dump185/db_dump185.1
+++ db1-compat-2.1.3/db_dump185/db_dump185.1
@@ -0,0 +1,953 @@
+.ds TYPE C
+.\"
+.\" See the file LICENSE for redistribution information.
+.\"
+.\" Copyright (c) 1996, 1997, 1998
+.\"    Sleepycat Software.  All rights reserved.
+.\"
+.\"    @(#)db_dump.so  10.10 (Sleepycat) 4/10/98
+.\"
+.\"
+.\" See the file LICENSE for redistribution information.
+.\"
+.\" Copyright (c) 1997, 1998
+.\"    Sleepycat Software.  All rights reserved.
+.\"
+.\"    @(#)macros.so   10.45 (Sleepycat) 5/4/98
+.\"
+.\" This manpage was originally for db_dump from a later version of
+.\" the DB, so many of these initial macros are now defunct. (jdg, 2/06)
+.\"
+.\" We don't want hyphenation for any HTML documents.
+.ie '\*[HTML]'YES'\{\
+.nh
+\}
+.el\{\
+.ds Hy
+.hy
+..
+.ds Nh
+.nh
+..
+\}
+.\" The alternative text macro
+.\" This macro takes two arguments:
+.\"    + the text produced if this is a "C" manpage
+.\"    + the text produced if this is a "CXX" or "JAVA" manpage
+.\"
+.de Al
+.ie '\*[TYPE]'C'\{\\$1
+\}
+.el\{\\$2
+\}
+..
+.\" Scoped name macro.
+.\" Produces a_b, a::b, a.b depending on language
+.\" This macro takes two arguments:
+.\"    + the class or prefix (without underscore)
+.\"    + the name within the class or following the prefix
+.de Sc
+.ie '\*[TYPE]'C'\{\\$1_\\$2
+\}
+.el\{\
+.ie '\*[TYPE]'CXX'\{\\$1::\\$2
+\}
+.el\{\\$1.\\$2
+\}
+\}
+..
+.\" Scoped name for Java.
+.\" Produces Db.b, for Java, otherwise just b.  This macro is used for
+.\" constants that must be scoped in Java, but are global otherwise.
+.\" This macro takes two arguments:
+.\"    + the class
+.\"    + the name within the class or following the prefix
+.de Sj
+.ie '\*[TYPE]'JAVA'\{\
+.TP 5
+Db.\\$1\}
+.el\{\
+.TP 5
+\\$1\}
+..
+.\" The general information text macro.
+.de Gn
+.ie '\*[TYPE]'C'\{The DB library is a family of groups of functions that 
provides a modular
+programming interface to transactions and record-oriented file access.
+The library includes support for transactions, locking, logging and file
+page caching, as well as various indexed access methods.
+Many of the functional groups (e.g., the file page caching functions)
+are useful independent of the other DB functions,
+although some functional groups are explicitly based on other functional
+groups (e.g., transactions and logging).
+\}
+.el\{The DB library is a family of classes that provides a modular
+programming interface to transactions and record-oriented file access.
+The library includes support for transactions, locking, logging and file
+page caching, as well as various indexed access methods.
+Many of the classes (e.g., the file page caching class)
+are useful independent of the other DB classes,
+although some classes are explicitly based on other classes
+(e.g., transactions and logging).
+\}
+..
+.\" The library error macro, the local error macro.
+.\" These macros take one argument:
+.\"    + the function name.
+.de Ee
+The
+.I \\$1
+.ie '\*[TYPE]'C'\{function may fail and return
+.I errno
+\}
+.el\{method may fail and throw a
+.IR DbException (3)
+.if '\*[TYPE]'CXX'\{
+or return
+.I errno
+\}
+\}
+for any of the errors specified for the following DB and library functions:
+..
+.de Ec
+In addition, the
+.I \\$1
+.ie '\*[TYPE]'C'\{function may fail and return
+.I errno
+\}
+.el\{method may fail and throw a
+.IR DbException (3)
+.ie '\*[TYPE]'CXX'\{or return
+.I errno
+\}
+.el\{encapsulating an
+.I errno
+\}
+\}
+for the following conditions:
+..
+.de Ea
+[EAGAIN]
+A lock was unavailable.
+..
+.de Eb
+[EBUSY]
+The shared memory region was in use and the force flag was not set.
+..
+.de Em
+[EAGAIN]
+The shared memory region was locked and (repeatedly) unavailable.
+..
+.de Ei
+[EINVAL]
+An invalid flag value or parameter was specified.
+..
+.de Es
+[EACCES]
+An attempt was made to modify a read-only database.
+..
+.de Et
+The DB_THREAD flag was specified and spinlocks are not implemented for
+this architecture.
+..
+.de Ep
+[EPERM]
+Database corruption was detected.
+All subsequent database calls (other than
+.ie '\*[TYPE]'C'\{\
+.IR DB->close )
+\}
+.el\{\
+.IR Db::close )
+\}
+will return EPERM.
+..
+.de Ek
+.if '\*[TYPE]'CXX'\{\
+Methods marked as returning
+.I errno
+will, by default, throw an exception that encapsulates the error information.
+The default error behavior can be changed, see
+.IR DbException (3).
+\}
+..
+.\" The SEE ALSO text macro
+.de Sa
+.\" make the line long for nroff.
+.if n .ll 72
+.nh
+.na
+.IR db_archive (1),
+.IR db_checkpoint (1),
+.IR db_deadlock (1),
+.IR db_dump (1),
+.IR db_load (1),
+.IR db_recover (1),
+.IR db_stat (1).
+(Note that on Debian systems, some of these manpages and programs have
+been renamed to things like
+.B db4.3_stat
+to distinguish between the multiple DB versions.)
+.ad
+.Hy
+..
+.\" The function header macro.
+.\" This macro takes one argument:
+.\"    + the function name.
+.de Fn
+.in 2
+.I \\$1
+.in
+..
+.\" The XXX_open function text macro, for merged create/open calls.
+.\" This macro takes two arguments:
+.\"    + the interface, e.g., "transaction region"
+.\"    + the prefix, e.g., "txn" (or the class name for C++, e.g., "DbTxn")
+.de Co
+.ie '\*[TYPE]'C'\{\
+.Fn \\$2_open
+The
+.I \\$2_open
+function copies a pointer, to the \\$1 identified by the
+.B directory
+.IR dir ,
+into the memory location referenced by
+.IR regionp .
+.PP
+If the
+.I dbenv
+argument to
+.I \\$2_open
+was initialized using
+.IR db_appinit ,
+.I dir
+is interpreted as described by
+.IR db_appinit (3).
+\}
+.el\{\
+.Fn \\$2::open
+The
+.I \\$2::open
+.ie '\*[TYPE]'CXX'\{\
+method copies a pointer, to the \\$1 identified by the
+.B directory
+.IR dir ,
+into the memory location referenced by
+.IR regionp .
+\}
+.el\{\
+method returns a \\$1 identified by the
+.B directory
+.IR dir .
+\}
+.PP
+If the
+.I dbenv
+argument to
+.I \\$2::open
+was initialized using
+.IR DbEnv::appinit ,
+.I dir
+is interpreted as described by
+.IR DbEnv (3).
+\}
+.PP
+Otherwise,
+if
+.I dir
+is not NULL,
+it is interpreted relative to the current working directory of the process.
+If
+.I dir
+is NULL,
+the following environment variables are checked in order:
+``TMPDIR'', ``TEMP'', and ``TMP''.
+If one of them is set,
+\\$1 files are created relative to the directory it specifies.
+If none of them are set, the first possible one of the following
+directories is used:
+.IR /var/tmp ,
+.IR /usr/tmp ,
+.IR /temp ,
+.IR /tmp ,
+.I C:/temp
+and
+.IR C:/tmp .
+.PP
+All files associated with the \\$1 are created in this directory.
+This directory must already exist when
+.ie '\*[TYPE]'C'\{
+\\$1_open
+\}
+.el\{\
+\\$2::open
+\}
+is called.
+If the \\$1 already exists,
+the process must have permission to read and write the existing files.
+If the \\$1 does not already exist,
+it is optionally created and initialized.
+..
+.\" The common close language macro, for discarding created regions
+.\" This macro takes one argument:
+.\"    + the function prefix, e.g., txn (the class name for C++, e.g., DbTxn)
+.de Cc
+In addition, if the
+.I dir
+argument to
+.ie '\*[TYPE]'C'\{\
+.ds Va db_appinit
+.ds Vo \\$1_open
+.ds Vu \\$1_unlink
+\}
+.el\{\
+.ds Va DbEnv::appinit
+.ds Vo \\$1::open
+.ds Vu \\$1::unlink
+\}
+.I \\*(Vo
+was NULL
+and
+.I dbenv
+was not initialized using
+.IR \\*(Va ,
+.if '\\$1'memp'\{\
+or the DB_MPOOL_PRIVATE flag was set,
+\}
+all files created for this shared region will be removed,
+as if
+.I \\*(Vu
+were called.
+.rm Va
+.rm Vo
+.rm Vu
+..
+.\" The DB_ENV information macro.
+.\" This macro takes two arguments:
+.\"    + the function called to open, e.g., "txn_open"
+.\"    + the function called to close, e.g., "txn_close"
+.de En
+.ie '\*[TYPE]'C'\{\
+based on the
+.I dbenv
+argument to
+.IR \\$1 ,
+which is a pointer to a structure of type DB_ENV (typedef'd in <db.h>).
+Applications will normally use the same DB_ENV structure (initialized
+by
+.IR db_appinit (3)),
+as an argument to all of the subsystems in the DB package.
+.PP
+References to the DB_ENV structure are maintained by DB,
+so it may not be discarded until the last close function,
+corresponding to an open function for which it was an argument,
+has returned.
+In order to ensure compatibility with future releases of DB, all fields of
+the DB_ENV structure that are not explicitly set should be initialized to 0
+before the first time the structure is used.
+Do this by declaring the structure external or static, or by calling the C
+library routine
+.IR bzero (3)
+or
+.IR memset (3).
+.PP
+The fields of the DB_ENV structure used by
+.I \\$1
+are described below.
+.if '\*[TYPE]'CXX'\{\
+As references to the DB_ENV structure may be maintained by
+.IR \\$1 ,
+it is necessary that the DB_ENV structure and memory it references be valid
+until the
+.I \\$2
+function is called.
+\}
+.ie '\\$1'db_appinit'\{The
+.I dbenv
+argument may not be NULL.
+If any of the fields of the
+.I dbenv
+are set to 0,
+defaults appropriate for the system are used where possible.
+\}
+.el\{If
+.I dbenv
+is NULL
+or any of its fields are set to 0,
+defaults appropriate for the system are used where possible.
+\}
+.PP
+The following fields in the DB_ENV structure may be initialized before calling
+.IR \\$1 :
+\}
+.el\{\
+based on which set methods have been used.
+It is expected that applications will use a single DbEnv object as the
+argument to all of the subsystems in the DB package.
+The fields of the DbEnv object used by
+.I \\$1
+are described below.
+As references to the DbEnv object may be maintained by
+.IR \\$1 ,
+it is necessary that the DbEnv object and memory it references be valid
+until the object is destroyed.
+.ie '\\$1'appinit'\{\
+The
+.I dbenv
+argument may not be NULL.
+If any of the fields of the
+.I dbenv
+are set to 0,
+defaults appropriate for the system are used where possible.
+\}
+.el\{\
+Any of the DbEnv fields that are not explicitly set will default to
+appropriate values.
+\}
+.PP
+The following fields in the DbEnv object may be initialized, using the
+appropriate set method, before calling
+.IR \\$1 :
+\}
+..
+.\" The DB_ENV common fields macros.
+.de Se
+.if '\*[TYPE]'JAVA'\{\
+.TP 5
+DbErrcall db_errcall;
+.ns
+.TP 5
+String db_errpfx;
+.ns
+.TP 5
+int db_verbose;
+The error fields of the DbEnv behave as described for
+.IR DbEnv (3).
+\}
+.ie '\*[TYPE]'CXX'\{\
+.TP 5
+void *(*db_errcall)(char *db_errpfx, char *buffer);
+.ns
+.TP 5
+FILE *db_errfile;
+.ns
+.TP 5
+const char *db_errpfx;
+.ns
+.TP 5
+class ostream *db_error_stream;
+.ns
+.TP 5
+int db_verbose;
+The error fields of the DbEnv behave as described for
+.IR DbEnv (3).
+\}
+.el\{\
+void *(*db_errcall)(char *db_errpfx, char *buffer);
+.ns
+.TP 5
+FILE *db_errfile;
+.ns
+.TP 5
+const char *db_errpfx;
+.ns
+.TP 5
+int db_verbose;
+The error fields of the DB_ENV behave as described for
+.IR db_appinit (3).
+.sp
+\}
+..
+.\" The open flags.
+.de Fm
+The
+.I flags
+and
+.I mode
+arguments specify how files will be opened and/or created when they
+don't already exist.
+The flags value is specified by
+.BR or 'ing
+together one or more of the following values:
+.Sj DB_CREATE
+Create any underlying files, as necessary.
+If the files do not already exist and the DB_CREATE flag is not specified,
+the call will fail.
+..
+.\" DB_THREAD open flag macro.
+.\" This macro takes two arguments:
+.\"    + the open function name
+.\"    + the object it returns.
+.de Ft
+.TP 5
+.Sj DB_THREAD
+Cause the \\$2 handle returned by the
+.I \\$1
+.Al function method
+to be useable by multiple threads within a single address space,
+i.e., to be ``free-threaded''.
+.if '\*[TYPE]'JAVA'\{\
+Threading is assumed in the Java API,
+so no special flags are required,
+and DB functions will always behave as if the DB_THREAD flag was specified.
+\}
+..
+.\" The mode macro.
+.\" This macro takes one argument:
+.\"    + the subsystem name.
+.de Mo
+All files created by the \\$1 are created with mode
+.I mode
+(as described in
+.IR chmod (2))
+and modified by the process' umask value at the time of creation (see
+.IR umask (2)).
+The group ownership of created files is based on the system and directory
+defaults, and is not further specified by DB.
+..
+.\" The application exits macro.
+.\" This macro takes one argument:
+.\"    + the application name.
+.de Ex
+The
+.I \\$1
+utility exits 0 on success, and >0 if an error occurs.
+..
+.\" The application -h section.
+.\" This macro takes one argument:
+.\"    + the application name
+.de Dh
+DB_HOME
+If the
+.B \-h
+option is not specified and the environment variable
+.I DB_HOME
+is set, it is used as the path of the database home, as described in
+.IR db_appinit (3).
+..
+.\" The function DB_HOME ENVIRONMENT VARIABLES section.
+.\" This macro takes one argument:
+.\"    + the open function name
+.de Eh
+DB_HOME
+If the
+.I dbenv
+argument to
+.I \\$1
+was initialized using
+.IR db_appinit ,
+the environment variable DB_HOME may be used as the path of the database
+home for the interpretation of the
+.I dir
+argument to
+.IR \\$1 ,
+as described in
+.IR db_appinit (3).
+.if \\n(.$>1 \{Specifically,
+.I \\$1
+is affected by the configuration string value of \\$2.\}
+..
+.\" The function TMPDIR ENVIRONMENT VARIABLES section.
+.\" This macro takes two arguments:
+.\"    + the interface, e.g., "transaction region"
+.\"    + the prefix, e.g., "txn" (or the class name for C++, e.g., "DbTxn")
+.de Ev
+TMPDIR
+If the
+.I dbenv
+argument to
+.ie '\*[TYPE]'C'\{\
+.ds Vo \\$2_open
+\}
+.el\{\
+.ds Vo \\$2::open
+\}
+.I \\*(Vo
+was NULL or not initialized using
+.IR db_appinit ,
+the environment variable TMPDIR may be used as the directory in which to
+create the \\$1,
+as described in the
+.I \\*(Vo
+section above.
+.rm Vo
+..
+.\" The unused flags macro.
+.de Fl
+The
+.I flags
+parameter is currently unused, and must be set to 0.
+..
+.\" The no-space TP macro.
+.de Nt
+.br
+.ns
+.TP 5
+..
+.\" The return values of the functions macros.
+.\" Rc is the standard two-value return with a suffix for more values.
+.\" Ro is the standard two-value return but there were previous values.
+.\" Rt is the standard two-value return, returning errno, 0, or < 0.
+.\" These macros take one argument:
+.\"    + the routine name
+.de Rc
+The
+.I \\$1
+.ie '\*[TYPE]'C'\{function returns the value of
+.I errno
+on failure,
+0 on success,
+\}
+.el\{method throws a
+.IR DbException (3)
+.ie '\*[TYPE]'CXX'\{or returns the value of
+.I errno
+on failure,
+0 on success,
+\}
+.el\{that encapsulates an
+.I errno
+on failure,
+\}
+\}
+..
+.de Ro
+Otherwise, the
+.I \\$1
+.ie '\*[TYPE]'C'\{function returns the value of
+.I errno
+on failure and 0 on success.
+\}
+.el\{method throws a
+.IR DbException (3)
+.ie '\*[TYPE]'CXX'\{or returns the value of
+.I errno
+on failure and 0 on success.
+\}
+.el\{that encapsulates an
+.I errno
+on failure,
+\}
+\}
+..
+.de Rt
+The
+.I \\$1
+.ie '\*[TYPE]'C'\{function returns the value of
+.I errno
+on failure and 0 on success.
+\}
+.el\{method throws a
+.IR DbException (3)
+.ie '\*[TYPE]'CXX'\{or returns the value of
+.I errno
+on failure and 0 on success.
+\}
+.el\{that encapsulates an
+.I errno
+on failure.
+\}
+\}
+..
+.\" The TXN id macro.
+.de Tx
+.IP
+If the file is being accessed under transaction protection,
+the
+.I txnid
+parameter is a transaction ID returned from
+.IR txn_begin ,
+otherwise, NULL.
+..
+.\" The XXX_unlink function text macro.
+.\" This macro takes two arguments:
+.\"    + the interface, e.g., "transaction region"
+.\"    + the prefix (for C++, this is the class name)
+.de Un
+.ie '\*[TYPE]'C'\{\
+.ds Va db_appinit
+.ds Vc \\$2_close
+.ds Vo \\$2_open
+.ds Vu \\$2_unlink
+\}
+.el\{\
+.ds Va DbEnv::appinit
+.ds Vc \\$2::close
+.ds Vo \\$2::open
+.ds Vu \\$2::unlink
+\}
+.Fn \\*(Vu
+The
+.I \\*(Vu
+.Al function method
+destroys the \\$1 identified by the directory
+.IR dir ,
+removing all files used to implement the \\$1.
+.ie '\\$2'log' \{(The log files themselves and the directory
+.I dir
+are not removed.)\}
+.el \{(The directory
+.I dir
+is not removed.)\}
+If there are processes that have called
+.I \\*(Vo
+without calling
+.I \\*(Vc
+(i.e., there are processes currently using the \\$1),
+.I \\*(Vu
+will fail without further action,
+unless the force flag is set,
+in which case
+.I \\*(Vu
+will attempt to remove the \\$1 files regardless of any processes
+still using the \\$1.
+.PP
+The result of attempting to forcibly destroy the region when a process
+has the region open is unspecified.
+Processes using a shared memory region maintain an open file descriptor
+for it.
+On UNIX systems, the region removal should succeed
+and processes that have already joined the region should continue to
+run in the region without change,
+however processes attempting to join the \\$1 will either fail or
+attempt to create a new region.
+On other systems, e.g., WNT, where the
+.IR unlink (2)
+system call will fail if any process has an open file descriptor
+for the file,
+the region removal will fail.
+.PP
+In the case of catastrophic or system failure,
+database recovery must be performed (see
+.IR db_recover (1)
+or the DB_RECOVER and DB_RECOVER_FATAL flags to
+.IR \\*(Va (3)).
+Alternatively, if recovery is not required because no database state is
+maintained across failures,
+it is possible to clean up a \\$1 by removing all of the
+files in the directory specified to the
+.I \\*(Vo
+.Al function, method,
+as \\$1 files are never created in any directory other than the one
+specified to
+.IR \\*(Vo .
+Note, however,
+that this has the potential to remove files created by the other DB
+subsystems in this database environment.
+.PP
+.Rt \\*(Vu
+.rm Va
+.rm Vo
+.rm Vu
+.rm Vc
+..
+.\" Signal paragraph for standard utilities.
+.\" This macro takes one argument:
+.\"    + the utility name.
+.de Si
+The
+.I \\$1
+utility attaches to DB shared memory regions.
+In order to avoid region corruption,
+it should always be given the chance to detach and exit gracefully.
+To cause
+.I \\$1
+to clean up after itself and exit,
+send it an interrupt signal (SIGINT).
+..
+.\" Logging paragraph for standard utilities.
+.\" This macro takes one argument:
+.\"    + the utility name.
+.de Pi
+.B \-L
+Log the execution of the \\$1 utility to the specified file in the
+following format, where ``###'' is the process ID, and the date is
+the time the utility starting running.
+.sp
+\\$1: ### Wed Jun 15 01:23:45 EDT 1995
+.sp
+This file will be removed if the \\$1 utility exits gracefully.
+..
+.\" Malloc paragraph.
+.\" This macro takes one argument:
+.\"    + the allocated object
+.de Ma
+.if !'\*[TYPE]'JAVA'\{\
+\\$1 are created in allocated memory.
+If
+.I db_malloc
+is non-NULL,
+it is called to allocate the memory,
+otherwise,
+the library function
+.IR malloc (3)
+is used.
+The function
+.I db_malloc
+must match the calling conventions of the
+.IR malloc (3)
+library routine.
+Regardless,
+the caller is responsible for deallocating the returned memory.
+To deallocate the returned memory,
+free each returned memory pointer;
+pointers inside the memory do not need to be individually freed.
+\}
+..
+.\" Underlying function paragraph.
+.\" This macro takes two arguments:
+.\"    + the function name
+.\"    + the utility name
+.de Uf
+The
+.I \\$1
+.Al function method
+is the underlying function used by the
+.IR \\$2 (1)
+utility.
+See the source code for the
+.I \\$2
+utility for an example of using
+.I \\$1
+in a UNIX environment.
+..
+.\" Underlying function paragraph, for C++.
+.\" This macro takes three arguments:
+.\"    + the C++ method name
+.\"    + the function name for C
+.\"    + the utility name
+.de Ux
+The
+.I \\$1
+method is based on the C
+.I \\$2
+function, which
+is the underlying function used by the
+.IR \\$3 (1)
+utility.
+See the source code for the
+.I \\$3
+utility for an example of using
+.I \\$2
+in a UNIX environment.
+..
+.TH DB_DUMP185 1 "April 10, 1998"
+.UC 7
+.SH NAME
+db_dump185 \- dump DB 1.85 legacy database files
+.SH SYNOPSIS
+\fBdb_dump185\fP [\fB-p\fP] [\fB-f output\fP] db_file
+.SH DESCRIPTION
+The
+.I db_dump185
+utility reads the version 1.85 database file
+.I db_file
+and writes it to the standard output using a portable flat-text format
+understood by the
+.IR db_load (1)
+utility.
+The argument
+.I db_file
+must be a file produced using the version 1.85
+.I DB
+library functions.
+.PP
+The options are as follows:
+.TP 5
+.B \-f
+Write to the specified
+.I file
+instead of to the standard output.
+.TP 5
+.B \-p
+If characters in either the key or data items are printing characters
+(as defined by
+.IR isprint (3)),
+use printing characters in
+.I file
+to represent them.
+This option permits users to use standard text editors to modify
+the contents of databases.
+.IP
+Note, different systems may have different notions as to what characters
+are ``printing'', and databases dumped in this manner may be less portable
+to external systems.
+.PP
+Dumping and reloading hash databases that use user-defined hash functions
+will result in new databases that use the default hash function.
+While using the default hash function may not be optimal for the new database,
+it will continue to work correctly.
+.PP
+Dumping and reloading btree databases that use user-defined prefix or
+comparison functions will result in new databases that use the default
+prefix and comparison functions.
+.ft B
+In this case, it is quite likely that the database will be damaged
+beyond repair permitting neither record storage or retrieval.
+.ft R
+.PP
+The only available workaround for either case is to modify the sources
+for the
+.IR db_load (1)
+utility to load the database using the correct hash, prefix and comparison
+functions.
+.PP
+.Ex db_dump
+.SH "OUTPUT FORMATS
+There are two output formats used by
+.IR db_dump .
+.PP
+In both output formats, the first few lines of the output contain
+header information describing the underlying access method, filesystem page
+size and other bookkeeping information.
+This information is output in ``name=value'' pairs, where ``name'' may
+be any of the keywords listed in the
+.IR db_load (1)
+manual page, and ``value'' will be its value.
+While this header information can be edited before the database is
+reloaded,
+there is rarely any reason to do so, as all of this information can be
+overridden by command-line arguments to
+.IR db_load .
+.PP
+Following the header information are the key/data pairs from the database.
+If the database being dumped is of type
+.B btree
+or
+.BR hash ,
+the output will be paired lines of text,
+where the first line of the pair is the key item,
+and the second line of the pair is its corresponding data item.
+If the database being dumped is of type
+.BR recno ,
+the output will be lines of text,
+where each line is a new data item for the database.
+.PP
+If the
+.B \-p
+option was specified, each output line will consist of single characters
+representing any characters from the database that were ``printing'',
+and backslash (``\e'') escaped characters for any that were not.
+Backslash characters appearing in the output mean one of two things:
+if the backslash character precedes another backslash character,
+it means that a literal backslash character occurred in the key or data
+item.
+If the backslash character precedes any other character,
+the next two characters should be interpreted as hexadecimal specification
+of a single character, e.g., ``\e0a'' is a newline character in the ASCII
+character set.
+.PP
+If the
+.B \-p
+option was not specified, each output line will consist of paired hexadecimal
+values, e.g., the line ``726f6f74'' is the string ``root'' in the ASCII
+character set.
+.PP
+In both output formats,
+a single newline character ends both the key and data items.
+.SH "SEE ALSO"
+.IR isprint (3)
+.PP
+.Gn
+.PP
+.Sa

Reply via email to