Changes necessary to make the Berkeley 1.6 db code work
authorRod Grimes <rgrimes@FreeBSD.org>
Wed, 16 Jun 1993 07:52:14 +0000 (07:52 +0000)
committerRod Grimes <rgrimes@FreeBSD.org>
Wed, 16 Jun 1993 07:52:14 +0000 (07:52 +0000)
14 files changed:
bin/ps/devname.c
include/Makefile
include/db.h
include/mpool.h [new file with mode: 0644]
include/ndbm.h
lib/libc/db/PORT/include/db.h
lib/libc/gen/getpwent.c
lib/libc/gen/ttyname.c
sys/sys/cdefs.h
usr.bin/vacation/vacation.c
usr.sbin/dev_mkdb/dev_mkdb.c
usr.sbin/kvm_mkdb/kvm_mkdb.c
usr.sbin/pwd_mkdb/pwd_mkdb.c
usr.sbin/sendmail/src/alias.c

index c9c2d81..5f2815d 100644 (file)
@@ -55,7 +55,7 @@ devname(dev, type)
        DBT data, key;
 
        if (!db && !failure &&
        DBT data, key;
 
        if (!db && !failure &&
-           !(db = hash_open(_PATH_DEVDB, O_RDONLY, 0, NULL))) {
+           !(db = dbopen(_PATH_DEVDB, O_RDONLY, 0, DB_HASH, NULL))) {
                (void)fprintf(stderr,
                    "warning: no device database %s\n", _PATH_DEVDB);
                failure = 1;
                (void)fprintf(stderr,
                    "warning: no device database %s\n", _PATH_DEVDB);
                failure = 1;
index b854a00..a9fcb72 100644 (file)
@@ -18,7 +18,7 @@ all clean cleandir depend lint tags:
 
 FILES= a.out.h ar.h assert.h bitstring.h ctype.h db.h dirent.h disktab.h \
        fstab.h fts.h glob.h grp.h kvm.h limits.h locale.h math.h memory.h \
 
 FILES= a.out.h ar.h assert.h bitstring.h ctype.h db.h dirent.h disktab.h \
        fstab.h fts.h glob.h grp.h kvm.h limits.h locale.h math.h memory.h \
-       ndbm.h netdb.h nlist.h paths.h pwd.h ranlib.h regexp.h \
+       mpool.h ndbm.h netdb.h nlist.h paths.h pwd.h ranlib.h regexp.h \
        resolv.h setjmp.h sgtty.h stab.h stdarg.h stddef.h stdio.h \
        stdlib.h string.h strings.h struct.h sysexits.h time.h ttyent.h \
        tzfile.h unistd.h utime.h utmp.h varargs.h vis.h
        resolv.h setjmp.h sgtty.h stab.h stdarg.h stddef.h stdio.h \
        stdlib.h string.h strings.h struct.h sysexits.h time.h ttyent.h \
        tzfile.h unistd.h utime.h utmp.h varargs.h vis.h
index 6a30111..2b7de27 100644 (file)
@@ -1,6 +1,6 @@
 /*-
 /*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)db.h        5.10 (Berkeley) 4/2/91
- *
- * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
- * --------------------         -----   ----------------------
- * CURRENT PATCH LEVEL:         1       00093
- * --------------------         -----   ----------------------
- *
- * 27 Feb 93    Charles Hannum         Better byte-swapping macros for
- *                                     i386/i486.
+ *     @(#)db.h        8.1 (Berkeley) 6/2/93
  */
 
 #ifndef _DB_H_
 #define        _DB_H_
 
  */
 
 #ifndef _DB_H_
 #define        _DB_H_
 
-#include <machine/endian.h>
+#include <sys/types.h>
 #include <sys/cdefs.h>
 #include <sys/cdefs.h>
+#include <machine/endian.h>
 
 
-/* flags for DB.put() call */
-#define        R_IBEFORE       1               /* RECNO */
-#define        R_IAFTER        2               /* RECNO */
-#define        R_NOOVERWRITE   3               /* BTREE, HASH, RECNO */
-#define        R_PUT           4               /* BTREE, HASH, RECNO */
+#define        RET_ERROR       -1              /* Return values. */
+#define        RET_SUCCESS      0
+#define        RET_SPECIAL      1
 
 
-/* flags for DB.seq() call */
-#define        R_CURSOR        1               /* BTREE, RECNO */
-#define        R_FIRST         2               /* BTREE, HASH, RECNO */
-#define        R_LAST          3               /* BTREE, RECNO */
-#define        R_NEXT          4               /* BTREE, HASH, RECNO */
-#define        R_PREV          5               /* BTREE, RECNO */
+#define        MAX_PAGE_NUMBER ULONG_MAX       /* >= # of pages in a file */
+typedef u_long pgno_t;
+#define        MAX_PAGE_OFFSET USHRT_MAX       /* >= # of bytes in a page */
+typedef u_short        indx_t;
+#define        MAX_REC_NUMBER  ULONG_MAX       /* >= # of records in a tree */
+typedef u_long recno_t;
 
 
-/* key/data structure -- a data-base thang */
+/* Key/data structure -- a Data-Base Thang. */
 typedef struct {
 typedef struct {
-       void *data;
-       int size;
+       void    *data;                  /* data */
+       size_t   size;                  /* data length */
 } DBT;
 
 } DBT;
 
-/* access method description structure */
+/* Routine flags. */
+#define        R_CURSOR        1               /* del, put, seq */
+#define        __R_UNUSED      2               /* UNUSED */
+#define        R_FIRST         3               /* seq */
+#define        R_IAFTER        4               /* put (RECNO) */
+#define        R_IBEFORE       5               /* put (RECNO) */
+#define        R_LAST          6               /* seq (BTREE, RECNO) */
+#define        R_NEXT          7               /* seq */
+#define        R_NOOVERWRITE   8               /* put */
+#define        R_PREV          9               /* seq (BTREE, RECNO) */
+#define        R_SETCURSOR     10              /* put (RECNO) */
+#define        R_RECNOSYNC     11              /* sync (RECNO) */
+
+typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
+
+#define        __USE_OPEN_FLAGS \
+       (O_CREAT|O_EXCL|O_EXLOCK|O_RDONLY|O_RDWR|O_SHLOCK|O_TRUNC)
+
+/* Access method description structure. */
 typedef struct __db {
 typedef struct __db {
-       void *internal;         /* access method private */
-#define        DB_BTREE        1
-#define        DB_HASH         2
-#define        DB_RECNO        3
-       int type;               /* type of underlying db */
-       int (*close) __P((const struct __db *));
-       int (*del) __P((const struct __db *, const DBT *, unsigned int));
-       int (*get) __P((const struct __db *, DBT *, DBT *, unsigned int));
-       int (*put) __P((const struct __db *, const DBT *, const DBT *,
-               unsigned int));
-       int (*seq) __P((const struct __db *, DBT *, DBT *, unsigned int));
-       int (*sync) __P((const struct __db *));
+       DBTYPE type;                    /* underlying db type */
+       int (*close)    __P((struct __db *));
+       int (*del)      __P((const struct __db *, const DBT *, u_int));
+       int (*fd)       __P((const struct __db *));
+       int (*get)      __P((const struct __db *, const DBT *, DBT *, u_int));
+       int (*put)      __P((const struct __db *, DBT *, const DBT *, u_int));
+       int (*seq)      __P((const struct __db *, DBT *, DBT *, u_int));
+       int (*sync)     __P((const struct __db *, u_int));
+       void *internal;                 /* access method private */
 } DB;
 
 #define        BTREEMAGIC      0x053162
 } DB;
 
 #define        BTREEMAGIC      0x053162
-#define        BTREEVERSION    2
+#define        BTREEVERSION    3
 
 
-/* structure used to pass parameters to the btree routines */
+/* Structure used to pass parameters to the btree routines. */
 typedef struct {
 #define        R_DUP           0x01    /* duplicate keys */
 typedef struct {
 #define        R_DUP           0x01    /* duplicate keys */
-       u_long flags;
-       int cachesize;          /* bytes to cache */
-       int psize;              /* page size */
-       int (*compare)();       /* compare function */
-       int lorder;             /* byte order */
+       u_long   flags;
+       int      cachesize;     /* bytes to cache */
+       int      maxkeypage;    /* maximum keys per page */
+       int      minkeypage;    /* minimum keys per page */
+       int      psize;         /* page size */
+                               /* comparison, prefix functions */
+       int      (*compare)     __P((const DBT *, const DBT *));
+       int      (*prefix)      __P((const DBT *, const DBT *));
+       int      lorder;        /* byte order */
 } BTREEINFO;
 
 #define        HASHMAGIC       0x061561
 } BTREEINFO;
 
 #define        HASHMAGIC       0x061561
-#define        HASHVERSION     1
+#define        HASHVERSION     2
 
 
-/* structure used to pass parameters to the hashing routines */
+/* Structure used to pass parameters to the hashing routines. */
 typedef struct {
 typedef struct {
-       int bsize;              /* bucket size */
-       int ffactor;            /* fill factor */
-       int nelem;              /* number of elements */
-       int cachesize;          /* bytes to cache */
-       int (*hash)();          /* hash function */
-       int lorder;             /* byte order */
+       int      bsize;         /* bucket size */
+       int      ffactor;       /* fill factor */
+       int      nelem;         /* number of elements */
+       int      cachesize;     /* bytes to cache */
+                               /* hash function */
+       int      (*hash) __P((const void *, size_t));
+       int      lorder;        /* byte order */
 } HASHINFO;
 
 } HASHINFO;
 
-/* structure used to pass parameters to the record routines */
+/* Structure used to pass parameters to the record routines. */
 typedef struct {
 #define        R_FIXEDLEN      0x01    /* fixed-length records */
 typedef struct {
 #define        R_FIXEDLEN      0x01    /* fixed-length records */
-       u_long flags;
-       int cachesize;          /* bytes to cache */
-       size_t reclen;          /* record length (fixed-length records) */
-       u_char bval;            /* delimiting byte (variable-length records */
+#define        R_NOKEY         0x02    /* key not required */
+#define        R_SNAPSHOT      0x04    /* snapshot the input */
+       u_long   flags;
+       int      cachesize;     /* bytes to cache */
+       int      psize;         /* page size */
+       int      lorder;        /* byte order */
+       size_t   reclen;        /* record length (fixed-length records) */
+       u_char   bval;          /* delimiting byte (variable-length records */
+       char    *bfname;        /* btree file name */ 
 } RECNOINFO;
 
 } RECNOINFO;
 
-/* key structure for the record routines */
-typedef struct {
-       u_long number;
-       u_long offset;
-       u_long length;
-#define        R_LENGTH        0x01    /* length is valid */
-#define        R_NUMBER        0x02    /* record number is valid */
-#define        R_OFFSET        0x04    /* offset is valid */
-       u_char valid;
-} RECNOKEY;
-
-/* Little endian <--> big endian long swap macros. */
-#define BLSWAP(X) {(X) = __byte_swap_long(X);}
-#define BLSWAP_COPY(X,Y) {(Y) = __byte_swap_long(X);}
-
-/* Little endian <--> big endian short swap macros. */
-#define BSSWAP(X) {(X) = __byte_swap_word(X);}
-#define BSSWAP_COPY(X,Y) {(Y) = __byte_swap_word(X);}
+/*
+ * Little endian <==> big endian long swap macros.
+ *     BLSWAP          swap a memory location
+ *     BLPSWAP         swap a referenced memory location
+ *     BLSWAP_COPY     swap from one location to another
+ */
+#define BLSWAP(a) { \
+       u_long _tmp = a; \
+       ((char *)&a)[0] = ((char *)&_tmp)[3]; \
+       ((char *)&a)[1] = ((char *)&_tmp)[2]; \
+       ((char *)&a)[2] = ((char *)&_tmp)[1]; \
+       ((char *)&a)[3] = ((char *)&_tmp)[0]; \
+}
+#define        BLPSWAP(a) { \
+       u_long _tmp = *(u_long *)a; \
+       ((char *)a)[0] = ((char *)&_tmp)[3]; \
+       ((char *)a)[1] = ((char *)&_tmp)[2]; \
+       ((char *)a)[2] = ((char *)&_tmp)[1]; \
+       ((char *)a)[3] = ((char *)&_tmp)[0]; \
+}
+#define        BLSWAP_COPY(a, b) { \
+       ((char *)&(b))[0] = ((char *)&(a))[3]; \
+       ((char *)&(b))[1] = ((char *)&(a))[2]; \
+       ((char *)&(b))[2] = ((char *)&(a))[1]; \
+       ((char *)&(b))[3] = ((char *)&(a))[0]; \
+}
+
+/*
+ * Little endian <==> big endian short swap macros.
+ *     BSSWAP          swap a memory location
+ *     BSPSWAP         swap a referenced memory location
+ *     BSSWAP_COPY     swap from one location to another
+ */
+#define BSSWAP(a) { \
+       u_short _tmp = a; \
+       ((char *)&a)[0] = ((char *)&_tmp)[1]; \
+       ((char *)&a)[1] = ((char *)&_tmp)[0]; \
+}
+#define BSPSWAP(a) { \
+       u_short _tmp = *(u_short *)a; \
+       ((char *)a)[0] = ((char *)&_tmp)[1]; \
+       ((char *)a)[1] = ((char *)&_tmp)[0]; \
+}
+#define BSSWAP_COPY(a, b) { \
+       ((char *)&(b))[0] = ((char *)&(a))[1]; \
+       ((char *)&(b))[1] = ((char *)&(a))[0]; \
+}
 
 __BEGIN_DECLS
 
 __BEGIN_DECLS
-DB     *btree_open
-           __P((const char *, int, int, const BTREEINFO *));
-DB     *hash_open
-           __P((const char *, int, int, const HASHINFO *));
-DB     *recno_open
-           __P((const char *, int, int, const RECNOINFO *));
+DB *dbopen __P((const char *, int, int, DBTYPE, const void *));
+
+#ifdef __DBINTERFACE_PRIVATE
+DB     *__bt_open __P((const char *, int, int, const BTREEINFO *));
+DB     *__hash_open __P((const char *, int, int, const HASHINFO *));
+DB     *__rec_open __P((const char *, int, int, const RECNOINFO *));
+void    __dbpanic __P((DB *dbp));
+#endif
 __END_DECLS
 __END_DECLS
-
 #endif /* !_DB_H_ */
 #endif /* !_DB_H_ */
diff --git a/include/mpool.h b/include/mpool.h
new file mode 100644 (file)
index 0000000..910e078
--- /dev/null
@@ -0,0 +1,135 @@
+/*-
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)mpool.h     8.1 (Berkeley) 6/2/93
+ */
+
+/*
+ * The memory pool scheme is a simple one.  Each in memory page is referenced
+ * by a bucket which is threaded in three ways.  All active pages are threaded
+ * on a hash chain (hashed by the page number) and an lru chain.  Inactive
+ * pages are threaded on a free chain.  Each reference to a memory pool is
+ * handed an MPOOL which is the opaque cookie passed to all of the memory
+ * routines.
+ */
+#define        HASHSIZE        128
+#define        HASHKEY(pgno)   ((pgno - 1) % HASHSIZE)
+
+/* The BKT structures are the elements of the lists. */
+typedef struct BKT {
+       struct BKT      *hnext;         /* next hash bucket */
+       struct BKT      *hprev;         /* previous hash bucket */
+       struct BKT      *cnext;         /* next free/lru bucket */
+       struct BKT      *cprev;         /* previous free/lru bucket */
+       void            *page;          /* page */
+       pgno_t          pgno;           /* page number */
+
+#define        MPOOL_DIRTY     0x01            /* page needs to be written */
+#define        MPOOL_PINNED    0x02            /* page is pinned into memory */
+       unsigned long   flags;          /* flags */
+} BKT;
+
+/* The BKTHDR structures are the heads of the lists. */
+typedef struct BKTHDR {
+       struct BKT      *hnext;         /* next hash bucket */
+       struct BKT      *hprev;         /* previous hash bucket */
+       struct BKT      *cnext;         /* next free/lru bucket */
+       struct BKT      *cprev;         /* previous free/lru bucket */
+} BKTHDR;
+
+typedef struct MPOOL {
+       BKTHDR  free;                   /* The free list. */
+       BKTHDR  lru;                    /* The LRU list. */
+       BKTHDR  hashtable[HASHSIZE];    /* Hashed list by page number. */
+       pgno_t  curcache;               /* Current number of cached pages. */
+       pgno_t  maxcache;               /* Max number of cached pages. */
+       pgno_t  npages;                 /* Number of pages in the file. */
+       u_long  pagesize;               /* File page size. */
+       int     fd;                     /* File descriptor. */
+                                       /* Page in conversion routine. */
+       void    (*pgin) __P((void *, pgno_t, void *));
+                                       /* Page out conversion routine. */
+       void    (*pgout) __P((void *, pgno_t, void *));
+       void    *pgcookie;              /* Cookie for page in/out routines. */
+#ifdef STATISTICS
+       unsigned long   cachehit;
+       unsigned long   cachemiss;
+       unsigned long   pagealloc;
+       unsigned long   pageflush;
+       unsigned long   pageget;
+       unsigned long   pagenew;
+       unsigned long   pageput;
+       unsigned long   pageread;
+       unsigned long   pagewrite;
+#endif
+} MPOOL;
+
+#ifdef __MPOOLINTERFACE_PRIVATE
+/* Macros to insert/delete into/from hash chain. */
+#define rmhash(bp) { \
+        (bp)->hprev->hnext = (bp)->hnext; \
+        (bp)->hnext->hprev = (bp)->hprev; \
+}
+#define inshash(bp, pg) { \
+       hp = &mp->hashtable[HASHKEY(pg)]; \
+        (bp)->hnext = hp->hnext; \
+        (bp)->hprev = (struct BKT *)hp; \
+        hp->hnext->hprev = (bp); \
+        hp->hnext = (bp); \
+}
+
+/* Macros to insert/delete into/from lru and free chains. */
+#define        rmchain(bp) { \
+        (bp)->cprev->cnext = (bp)->cnext; \
+        (bp)->cnext->cprev = (bp)->cprev; \
+}
+#define inschain(bp, dp) { \
+        (bp)->cnext = (dp)->cnext; \
+        (bp)->cprev = (struct BKT *)(dp); \
+        (dp)->cnext->cprev = (bp); \
+        (dp)->cnext = (bp); \
+}
+#endif
+
+__BEGIN_DECLS
+MPOOL  *mpool_open __P((DBT *, int, pgno_t, pgno_t));
+void    mpool_filter __P((MPOOL *, void (*)(void *, pgno_t, void *),
+           void (*)(void *, pgno_t, void *), void *));
+void   *mpool_new __P((MPOOL *, pgno_t *));
+void   *mpool_get __P((MPOOL *, pgno_t, u_int));
+int     mpool_put __P((MPOOL *, void *, u_int));
+int     mpool_sync __P((MPOOL *));
+int     mpool_close __P((MPOOL *));
+#ifdef STATISTICS
+void    mpool_stat __P((MPOOL *));
+#endif
+__END_DECLS
index 67f0293..a545bca 100644 (file)
@@ -1,6 +1,6 @@
 /*-
 /*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * This code is derived from software contributed to Berkeley by
  * Margo Seltzer.
  *
  * This code is derived from software contributed to Berkeley by
  * Margo Seltzer.
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)ndbm.h      5.6 (Berkeley) 4/3/91
+ *     @(#)ndbm.h      8.1 (Berkeley) 6/2/93
  */
 
 #ifndef _NDBM_H_
 #define        _NDBM_H_
 
  */
 
 #ifndef _NDBM_H_
 #define        _NDBM_H_
 
-#include <sys/cdefs.h>
 #include <db.h>
 
 /* Map dbm interface onto db(3). */
 #include <db.h>
 
 /* Map dbm interface onto db(3). */
@@ -61,6 +60,7 @@ typedef struct {
 } datum;
 
 typedef DB DBM;
 } datum;
 
 typedef DB DBM;
+#define        dbm_pagfno(a)   DBM_PAGFNO_NOT_AVAILABLE
 
 __BEGIN_DECLS
 void    dbm_close __P((DBM *));
 
 __BEGIN_DECLS
 void    dbm_close __P((DBM *));
@@ -71,6 +71,7 @@ long   dbm_forder __P((DBM *, datum));
 datum   dbm_nextkey __P((DBM *));
 DBM    *dbm_open __P((const char *, int, int));
 int     dbm_store __P((DBM *, datum, datum, int));
 datum   dbm_nextkey __P((DBM *));
 DBM    *dbm_open __P((const char *, int, int));
 int     dbm_store __P((DBM *, datum, datum, int));
+int     dbm_dirfno __P((DBM *));
 __END_DECLS
 
 #endif /* !_NDBM_H_ */
 __END_DECLS
 
 #endif /* !_NDBM_H_ */
index b13a1f6..2b7de27 100644 (file)
@@ -38,8 +38,7 @@
 
 #include <sys/types.h>
 #include <sys/cdefs.h>
 
 #include <sys/types.h>
 #include <sys/cdefs.h>
-
-#include "compat.h"
+#include <machine/endian.h>
 
 #define        RET_ERROR       -1              /* Return values. */
 #define        RET_SUCCESS      0
 
 #define        RET_ERROR       -1              /* Return values. */
 #define        RET_SUCCESS      0
index 4d65063..fe1b19c 100644 (file)
@@ -158,7 +158,7 @@ __initdb()
        char *p;
 
        p = (geteuid()) ? _PATH_MP_DB : _PATH_SMP_DB;
        char *p;
 
        p = (geteuid()) ? _PATH_MP_DB : _PATH_SMP_DB;
-       _pw_db = hash_open(p, O_RDONLY, 0, NULL);
+       _pw_db = dbopen(p, O_RDONLY, 0, DB_HASH, NULL);
        if (_pw_db)
                return(1);
        if (!warned)
        if (_pw_db)
                return(1);
        if (!warned)
index 80071f3..3b308a3 100644 (file)
@@ -67,7 +67,7 @@ ttyname(fd)
        if (fstat(fd, &sb) || !S_ISCHR(sb.st_mode))
                return(NULL);
 
        if (fstat(fd, &sb) || !S_ISCHR(sb.st_mode))
                return(NULL);
 
-       if (db = hash_open(_PATH_DEVDB, O_RDONLY, 0, NULL)) {
+       if (db = dbopen(_PATH_DEVDB, O_RDONLY, 0, DB_HASH, NULL)) {
                bkey.type = S_IFCHR;
                bkey.dev = sb.st_rdev;
                key.data = &bkey;
                bkey.type = S_IFCHR;
                bkey.dev = sb.st_rdev;
                key.data = &bkey;
index fbe572a..a04665e 100644 (file)
@@ -1,6 +1,6 @@
 /*
 /*
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)cdefs.h     7.6 (Berkeley) 5/4/91
+ *     @(#)cdefs.h     8.1 (Berkeley) 6/2/93
  */
 
 #ifndef        _CDEFS_H_
  */
 
 #ifndef        _CDEFS_H_
 #endif /* !__GNUC__ */
 #endif /* !(__STDC__ || __cplusplus) */
 
 #endif /* !__GNUC__ */
 #endif /* !(__STDC__ || __cplusplus) */
 
+/*
+ * GCC has extensions for declaring functions as `pure' (always returns
+ * the same value given the same inputs, i.e., has no external state and
+ * no side effects) and `dead' (nonreturning).  These mainly affect
+ * optimization and warnings.  Unfortunately, GCC complains if these are
+ * used under strict ANSI mode (`gcc -ansi -pedantic'), hence we need to
+ * define them only if compiling without this.
+ */
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#define __dead __volatile
+#define __pure __const
+#else
+#define __dead
+#define __pure
+#endif
+
 #endif /* !_CDEFS_H_ */
 #endif /* !_CDEFS_H_ */
index 5a1b950..b60da2e 100644 (file)
@@ -147,8 +147,8 @@ main(argc, argv)
                exit(1);
        }
 
                exit(1);
        }
 
-       db = hash_open(VDB, O_CREAT|O_RDWR | (iflag ? O_TRUNC : 0),
-           S_IRUSR|S_IWUSR, (HASHINFO *)NULL);
+       db = dbopen(VDB, O_CREAT|O_RDWR | (iflag ? O_TRUNC : 0),
+           S_IRUSR|S_IWUSR, DB_HASH, (HASHINFO *)NULL);
        if (!db) {
                syslog(LOG_NOTICE, "vacation: %s: %s\n", VDB, strerror(errno));
                exit(1);
        if (!db) {
                syslog(LOG_NOTICE, "vacation: %s: %s\n", VDB, strerror(errno));
                exit(1);
@@ -345,7 +345,7 @@ setinterval(interval)
        key.size = sizeof(VIT);
        data.data = &interval;
        data.size = sizeof(interval);
        key.size = sizeof(VIT);
        data.data = &interval;
        data.size = sizeof(interval);
-       (void)(db->put)(db, &key, &data, R_PUT);
+       (void)(db->put)(db, &key, &data, 0);
 }
 
 /*
 }
 
 /*
@@ -362,7 +362,7 @@ setreply()
        (void)time(&now);
        data.data = &now;
        data.size = sizeof(now);
        (void)time(&now);
        data.data = &now;
        data.size = sizeof(now);
-       (void)(db->put)(db, &key, &data, R_PUT);
+       (void)(db->put)(db, &key, &data, 0);
 }
 
 /*
 }
 
 /*
index 3e98ea3..46f9cf7 100644 (file)
@@ -92,7 +92,7 @@ main(argc, argv)
 
        (void)snprintf(dbtmp, sizeof(dbtmp), "%s/dev.tmp", _PATH_VARRUN);
        (void)snprintf(dbname, sizeof(dbtmp), "%s/dev.db", _PATH_VARRUN);
 
        (void)snprintf(dbtmp, sizeof(dbtmp), "%s/dev.tmp", _PATH_VARRUN);
        (void)snprintf(dbname, sizeof(dbtmp), "%s/dev.db", _PATH_VARRUN);
-       db = hash_open(dbtmp, O_CREAT|O_WRONLY|O_EXCL, DEFFILEMODE,
+       db = dbopen(dbtmp, O_CREAT|O_RDWR|O_EXCL, DEFFILEMODE, DB_HASH,
            (HASHINFO *)NULL);
        if (!db)
                error(dbtmp);
            (HASHINFO *)NULL);
        if (!db)
                error(dbtmp);
index ff6fa1c..5887276 100644 (file)
@@ -77,8 +77,8 @@ main(argc, argv)
        (void)sprintf(dbtemp, "%s/kvm_%s.tmp", _PATH_VARRUN, nlistname);
        (void)sprintf(dbname, "%s/kvm_%s.db", _PATH_VARRUN, nlistname);
        (void)umask(0);
        (void)sprintf(dbtemp, "%s/kvm_%s.tmp", _PATH_VARRUN, nlistname);
        (void)sprintf(dbname, "%s/kvm_%s.db", _PATH_VARRUN, nlistname);
        (void)umask(0);
-       db = hash_open(dbtemp, O_CREAT|O_WRONLY|O_EXCL,
-           S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, NULL);
+       db = dbopen(dbtemp, O_CREAT|O_RDWR|O_EXCL,
+           S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, DB_HASH, NULL);
        if (!db) {
                (void)fprintf(stderr,
                    "kvm_mkdb: %s: %s\n", dbtemp, strerror(errno));
        if (!db) {
                (void)fprintf(stderr,
                    "kvm_mkdb: %s: %s\n", dbtemp, strerror(errno));
index dd54b73..fdc7bfb 100644 (file)
@@ -114,14 +114,14 @@ main(argc, argv)
 
        /* Open the temporary insecure password database. */
        (void)sprintf(buf, "%s.tmp", _PATH_MP_DB);
 
        /* Open the temporary insecure password database. */
        (void)sprintf(buf, "%s.tmp", _PATH_MP_DB);
-       dp = hash_open(buf, O_WRONLY|O_CREAT|O_EXCL, PERM_INSECURE, NULL);
+       dp = dbopen(buf, O_RDWR|O_CREAT|O_EXCL, PERM_INSECURE, DB_HASH, NULL);
        if (!dp)
                error(buf);
        clean = FILE_INSECURE;
 
        /* Open the temporary encrypted password database. */
        (void)sprintf(buf, "%s.tmp", _PATH_SMP_DB);
        if (!dp)
                error(buf);
        clean = FILE_INSECURE;
 
        /* Open the temporary encrypted password database. */
        (void)sprintf(buf, "%s.tmp", _PATH_SMP_DB);
-       edp = hash_open(buf, O_WRONLY|O_CREAT|O_EXCL, PERM_SECURE, NULL);
+       edp = dbopen(buf, O_RDWR|O_CREAT|O_EXCL, PERM_SECURE, DB_HASH, NULL);
        if (!edp)
                error(buf);
        clean = FILE_SECURE;
        if (!edp)
                error(buf);
        clean = FILE_SECURE;
index 2e26b51..172ba74 100644 (file)
@@ -248,7 +248,7 @@ initaliases(aliasfile, init)
            (void) strcpy(buf, aliasfile);
            (void) strcat(buf, DBEXTENSION);
            if (aliasdb) aliasdb->close (aliasdb);
            (void) strcpy(buf, aliasfile);
            (void) strcat(buf, DBEXTENSION);
            if (aliasdb) aliasdb->close (aliasdb);
-           aliasdb = btree_open (buf, O_RDWR, DBMMODE, 0);
+           aliasdb = dbopen(buf, O_RDWR, DBMMODE, DB_BTREE, 0);
            if (aliasdb == NULL)
              {
                syserr("Cannot open database %s", buf);
            if (aliasdb == NULL)
              {
                syserr("Cannot open database %s", buf);
@@ -281,7 +281,7 @@ initaliases(aliasfile, init)
                        dbminit(aliasfile);
 # endif NDBM
 # ifdef USE_DB
                        dbminit(aliasfile);
 # endif NDBM
 # ifdef USE_DB
-                       aliasdb = btree_open (buf, O_RDWR, DBMMODE, 0);
+                       aliasdb = dbopen(buf, O_RDWR, DBMMODE, DB_BTREE, 0);
                        if (aliasdb == NULL)
                          {
                            syserr("Cannot open database %s", buf);
                        if (aliasdb == NULL)
                          {
                            syserr("Cannot open database %s", buf);
@@ -352,7 +352,7 @@ initaliases(aliasfile, init)
 #endif LOG
                readaliases(aliasfile, TRUE);
 # ifdef USE_DB
 #endif LOG
                readaliases(aliasfile, TRUE);
 # ifdef USE_DB
-               aliasdb->sync (aliasdb);
+               aliasdb->sync (aliasdb, 0);
 # endif USE_DB
        }
 #else /* defined (DBM) || defined (USE_DB) */
 # endif USE_DB
        }
 #else /* defined (DBM) || defined (USE_DB) */
@@ -451,7 +451,7 @@ readaliases(aliasfile, init)
                /* unconditionally remove the database file so that a
                   corrupt file cannot cause the following open to fail */
                unlink (line);
                /* unconditionally remove the database file so that a
                   corrupt file cannot cause the following open to fail */
                unlink (line);
-               aliasdb = btree_open (line, O_RDWR|O_CREAT, DBMMODE, 0);
+               aliasdb = dbopen(line, O_RDWR|O_CREAT, DBMMODE, DB_BTREE, 0);
                if (aliasdb == NULL)
                {
                        syserr("Cannot open database file %s", line);
                if (aliasdb == NULL)
                {
                        syserr("Cannot open database file %s", line);
@@ -599,7 +599,7 @@ readaliases(aliasfile, init)
                        content.size = rhssize;
                        content.data = rhs;
 
                        content.size = rhssize;
                        content.data = rhs;
 
-                       aliasdb->put (aliasdb, &key, &content, R_PUT);
+                       aliasdb->put (aliasdb, &key, &content, 0);
                }
                else
 # endif USE_DB
                }
                else
 # endif USE_DB
@@ -637,7 +637,7 @@ readaliases(aliasfile, init)
 
                key.size = 2;
                key.data = "@";
 
                key.size = 2;
                key.data = "@";
-               aliasdb->put (aliasdb, &key, &key, R_PUT);
+               aliasdb->put (aliasdb, &key, &key, 0);
 
                /* restore the old signal */
                (void) signal(SIGINT, oldsigint);
 
                /* restore the old signal */
                (void) signal(SIGINT, oldsigint);