]> Zhao Yanbai Git Server - minix.git/commitdiff
includes: header files for netbsd db code.
authorBen Gras <ben@minix3.org>
Wed, 14 Jul 2010 14:52:02 +0000 (14:52 +0000)
committerBen Gras <ben@minix3.org>
Wed, 14 Jul 2010 14:52:02 +0000 (14:52 +0000)
include/Makefile
include/db.h [new file with mode: 0644]
include/mpool.h [new file with mode: 0644]
include/ndbm.h [new file with mode: 0644]

index b6958d67ee49005f0bd233618a9c1271b0d8d2e0..dd886a806f92db5d32fd340d357feeab2155db29 100644 (file)
@@ -9,7 +9,7 @@ INCS=   alloca.h ansi.h a.out.h ar.h assert.h configfile.h ctype.h \
        stdint.h stdbool.h stdio.h stdlib.h string.h strings.h sysexits.h \
        syslog.h tar.h termcap.h termios.h time.h timers.h tools.h \
        ttyent.h ucontext.h unistd.h utime.h utmp.h wchar.h wctype.h \
-       hgfs.h tzfile.h util.h fetch.h
+       hgfs.h tzfile.h util.h fetch.h mpool.h ndbm.h db.h
 INCS+= arpa/inet.h
 INCS+= minix/a.out.h minix/bitmap.h minix/callnr.h minix/cdrom.h \
        minix/com.h minix/config.h minix/const.h minix/cpufeature.h \
diff --git a/include/db.h b/include/db.h
new file mode 100644 (file)
index 0000000..7fbc788
--- /dev/null
@@ -0,0 +1,241 @@
+/*     $NetBSD: db.h,v 1.24 2008/08/26 21:18:38 joerg Exp $    */
+
+/*-
+ * Copyright (c) 1990, 1993, 1994
+ *     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. 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.
+ *
+ *     @(#)db.h        8.7 (Berkeley) 6/16/94
+ */
+
+#ifndef _DB_H_
+#define        _DB_H_
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+#include <assert.h>
+
+#include <limits.h>
+
+#include <stdint.h>
+
+#define        RET_ERROR       -1              /* Return values. */
+#define        RET_SUCCESS      0
+#define        RET_SPECIAL      1
+
+#define        MAX_PAGE_NUMBER 0xffffffff      /* >= # of pages in a file */
+typedef uint32_t       pgno_t;
+#define        MAX_PAGE_OFFSET 65535           /* >= # of bytes in a page */
+typedef uint16_t       indx_t;
+#define        MAX_REC_NUMBER  0xffffffff      /* >= # of records in a tree */
+typedef uint32_t       recno_t;
+
+/* Key/data structure -- a Data-Base Thang. */
+typedef struct {
+       void    *data;                  /* data */
+       size_t   size;                  /* data length */
+} DBT;
+
+/* 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;
+
+/*
+ * !!!
+ * The following flags are included in the dbopen(3) call as part of the
+ * open(2) flags.  In order to avoid conflicts with the open flags, start
+ * at the top of the 16 or 32-bit number space and work our way down.  If
+ * the open flags were significantly expanded in the future, it could be
+ * a problem.  Wish I'd left another flags word in the dbopen call.
+ *
+ * !!!
+ * None of this stuff is implemented yet.  The only reason that it's here
+ * is so that the access methods can skip copying the key/data pair when
+ * the DB_LOCK flag isn't set.
+ */
+#if UINT_MAX > 65535
+#define        DB_LOCK         0x20000000      /* Do locking. */
+#define        DB_SHMEM        0x40000000      /* Use shared memory. */
+#define        DB_TXN          0x80000000      /* Do transactions. */
+#else
+#define        DB_LOCK             0x2000      /* Do locking. */
+#define        DB_SHMEM            0x4000      /* Use shared memory. */
+#define        DB_TXN              0x8000      /* Do transactions. */
+#endif
+
+/* Access method description structure. */
+typedef struct __db {
+       DBTYPE type;                    /* Underlying db type. */
+       int (*close)    (struct __db *);
+       int (*del)      (const struct __db *, const DBT *, unsigned int);
+       int (*get)      (const struct __db *, const DBT *, DBT *, unsigned int);
+       int (*put)      (const struct __db *, DBT *, const DBT *, unsigned int);
+       int (*seq)      (const struct __db *, DBT *, DBT *, unsigned int);
+       int (*sync)     (const struct __db *, unsigned int);
+       void *internal;                 /* Access method private. */
+       int (*fd)       (const struct __db *);
+} DB;
+
+#define        BTREEMAGIC      0x053162
+#define        BTREEVERSION    3
+
+/* Structure used to pass parameters to the btree routines. */
+typedef struct {
+#define        R_DUP           0x01    /* duplicate keys */
+       unsigned long   flags;
+       unsigned int    cachesize;      /* bytes to cache */
+       int             maxkeypage;     /* maximum keys per page */
+       int             minkeypage;     /* minimum keys per page */
+       unsigned int    psize;          /* page size */
+       int     (*compare)      /* comparison function */
+               (const DBT *, const DBT *);
+       size_t  (*prefix)       /* prefix function */
+               (const DBT *, const DBT *);
+       int     lorder;         /* byte order */
+} BTREEINFO;
+
+#define        HASHMAGIC       0x061561
+#define        HASHVERSION     2
+
+/* Structure used to pass parameters to the hashing routines. */
+typedef struct {
+       unsigned int    bsize;          /* bucket size */
+       unsigned int    ffactor;        /* fill factor */
+       unsigned int    nelem;          /* number of elements */
+       unsigned int    cachesize;      /* bytes to cache */
+       uint32_t                /* hash function */
+               (*hash)(const void *, size_t);
+       int     lorder;         /* byte order */
+} HASHINFO;
+
+/* Structure used to pass parameters to the record routines. */
+typedef struct {
+#define        R_FIXEDLEN      0x01    /* fixed-length records */
+#define        R_NOKEY         0x02    /* key not required */
+#define        R_SNAPSHOT      0x04    /* snapshot the input */
+       unsigned long   flags;
+       unsigned int    cachesize;      /* bytes to cache */
+       unsigned int    psize;          /* page size */
+       int             lorder;         /* byte order */
+       size_t          reclen;         /* record length (fixed-length records) */
+       uint8_t         bval;           /* delimiting byte (variable-length records */
+       char            *bfname;        /* btree file name */ 
+} RECNOINFO;
+
+#ifdef __DBINTERFACE_PRIVATE
+/*
+ * Little endian <==> big endian 32-bit swap macros.
+ *     M_32_SWAP       swap a memory location
+ *     P_32_SWAP       swap a referenced memory location
+ *     P_32_COPY       swap from one location to another
+ */
+#define        M_32_SWAP(a) {                                                  \
+       uint32_t _tmp = a;                                              \
+       ((char *)(void *)&a)[0] = ((char *)(void *)&_tmp)[3];           \
+       ((char *)(void *)&a)[1] = ((char *)(void *)&_tmp)[2];           \
+       ((char *)(void *)&a)[2] = ((char *)(void *)&_tmp)[1];           \
+       ((char *)(void *)&a)[3] = ((char *)(void *)&_tmp)[0];           \
+}
+#define        P_32_SWAP(a) {                                                  \
+       char  _tmp[4];                                                  \
+       _tmp[0] = ((char *)(void *)a)[0];                               \
+       _tmp[1] = ((char *)(void *)a)[1];                               \
+       _tmp[2] = ((char *)(void *)a)[2];                               \
+       _tmp[3] = ((char *)(void *)a)[3];                               \
+       ((char *)(void *)a)[0] = _tmp[3];                               \
+       ((char *)(void *)a)[1] = _tmp[2];                               \
+       ((char *)(void *)a)[2] = _tmp[1];                               \
+       ((char *)(void *)a)[3] = _tmp[0];                               \
+}
+#define        P_32_COPY(a, b) {                                               \
+       ((char *)(void *)&(b))[0] = ((char *)(void *)&(a))[3];          \
+       ((char *)(void *)&(b))[1] = ((char *)(void *)&(a))[2];          \
+       ((char *)(void *)&(b))[2] = ((char *)(void *)&(a))[1];          \
+       ((char *)(void *)&(b))[3] = ((char *)(void *)&(a))[0];          \
+}
+
+/*
+ * Little endian <==> big endian 16-bit swap macros.
+ *     M_16_SWAP       swap a memory location
+ *     P_16_SWAP       swap a referenced memory location
+ *     P_16_COPY       swap from one location to another
+ */
+#define        M_16_SWAP(a) {                                                  \
+       uint16_t _tmp = a;                                              \
+       ((char *)(void *)&a)[0] = ((char *)(void *)&_tmp)[1];           \
+       ((char *)(void *)&a)[1] = ((char *)(void *)&_tmp)[0];           \
+}
+#define        P_16_SWAP(a) {                                                  \
+       char  _tmp[2];                                                  \
+       _tmp[0] = ((char *)(void *)a)[0];                               \
+       _tmp[1] = ((char *)(void *)a)[1];                               \
+       ((char *)(void *)a)[0] = _tmp[1];                               \
+       ((char *)(void *)a)[1] = _tmp[0];                               \
+}
+#define        P_16_COPY(a, b) {                                               \
+       ((char *)(void *)&(b))[0] = ((char *)(void *)&(a))[1];          \
+       ((char *)(void *)&(b))[1] = ((char *)(void *)&(a))[0];          \
+}
+#endif
+
+__BEGIN_DECLS
+DB *dbopen(const char *, int, mode_t, DBTYPE, const void *);
+
+#ifdef __DBINTERFACE_PRIVATE
+
+#ifndef __minix
+#define _DBMASK(a) (~((1ULL << (sizeof(a) * NBBY)) - 1))
+#define _DBFIT(a, t) assert(((a) & _DBMASK(t)) == 0)
+#else
+#define NBBY 8
+#define _DBMASK(a) (~((1UL << (sizeof(a) * NBBY)) - 1))
+/* When compiled with ack, 1 << 32 does not evalute to 0.
+ * So we need a seperate check for the case when sizeof(t)
+ * is 4. 
+ */
+#define _DBMASK32 0xffffffff
+#define _DBFIT(a, t) \
+       assert((sizeof(t) == 4) ||((sizeof(t) < 4) && (((a) & _DBMASK(t)) == 0)))
+#endif
+
+DB     *__bt_open(const char *, int, mode_t, const BTREEINFO *, int);
+DB     *__hash_open(const char *, int, mode_t, const HASHINFO *, int);
+DB     *__rec_open(const char *, int, mode_t, const RECNOINFO *, int);
+void    __dbpanic(DB *);
+#endif
+__END_DECLS
+#endif /* !_DB_H_ */
diff --git a/include/mpool.h b/include/mpool.h
new file mode 100644 (file)
index 0000000..800efae
--- /dev/null
@@ -0,0 +1,103 @@
+/*     $NetBSD: mpool.h,v 1.13 2008/08/26 21:18:38 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *     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. 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.2 (Berkeley) 7/14/94
+ */
+
+#ifndef _MPOOL_H_
+#define _MPOOL_H_
+
+#include <sys/cdefs.h>
+#include <sys/queue.h>
+
+/*
+ * The memory pool scheme is a simple one.  Each in-memory page is referenced
+ * by a bucket which is threaded in up to two of three ways.  All active pages
+ * are threaded on a hash chain (hashed by page number) and an lru chain.
+ * Inactive pages are threaded on a free chain.  Each reference to a memory
+ * pool is handed an opaque MPOOL cookie which stores all of this information.
+ */
+#define        HASHSIZE        128
+#define        HASHKEY(pgno)   ((pgno - 1) % HASHSIZE)
+
+/* The BKT structures are the elements of the queues. */
+typedef struct _bkt {
+       CIRCLEQ_ENTRY(_bkt) hq;         /* hash queue */
+       CIRCLEQ_ENTRY(_bkt) q;          /* lru queue */
+       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 */
+       uint8_t flags;                  /* flags */
+} BKT;
+
+typedef struct MPOOL {
+       CIRCLEQ_HEAD(_lqh, _bkt) lqh;   /* lru queue head */
+                                       /* hash queue array */
+       CIRCLEQ_HEAD(_hqh, _bkt) hqh[HASHSIZE];
+       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 */
+       unsigned long   pagesize;               /* file page size */
+       int     fd;                     /* file descriptor */
+                                       /* page in conversion routine */
+       void    (*pgin)(void *, pgno_t, void *);
+                                       /* page out conversion routine */
+       void    (*pgout)(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;
+
+__BEGIN_DECLS
+MPOOL  *mpool_open(void *, int, pgno_t, pgno_t);
+void    mpool_filter(MPOOL *, void (*)(void *, pgno_t, void *),
+           void (*)(void *, pgno_t, void *), void *);
+void   *mpool_new(MPOOL *, pgno_t *);
+void   *mpool_get(MPOOL *, pgno_t, unsigned int);
+int     mpool_put(MPOOL *, void *, unsigned int);
+int     mpool_sync(MPOOL *);
+int     mpool_close(MPOOL *);
+#ifdef STATISTICS
+void    mpool_stat(MPOOL *);
+#endif
+__END_DECLS
+
+#endif /* _MPOOL_H_ */
diff --git a/include/ndbm.h b/include/ndbm.h
new file mode 100644 (file)
index 0000000..06e2c75
--- /dev/null
@@ -0,0 +1,98 @@
+/*     $NetBSD: ndbm.h,v 1.15 2010/02/03 15:34:40 roy Exp $    */
+
+/*-
+ * 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.
+ *
+ * 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. 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.
+ *
+ *     @(#)ndbm.h      8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _NDBM_H_
+#define        _NDBM_H_
+
+#include <sys/cdefs.h>
+#ifndef __minix
+#include <sys/featuretest.h>
+#endif
+#include <stdint.h>
+#include <db.h>
+
+#if defined(_NETBSD_SOURCE)
+/* Map dbm interface onto db(3). */
+#define DBM_RDONLY     O_RDONLY
+#endif
+
+/* Flags to dbm_store(). */
+#define DBM_INSERT      0
+#define DBM_REPLACE     1
+
+#if defined(_NETBSD_SOURCE) || defined(_MINIX)
+/*
+ * The db(3) support for ndbm(3) always appends this suffix to the
+ * file name to avoid overwriting the user's original database.
+ */
+#define        DBM_SUFFIX      ".db"
+#endif
+
+typedef struct {
+       void    *dptr;
+       size_t   dsize;         /* XPG4.2 */
+} datum;
+
+typedef DB DBM;
+#if defined(_NETBSD_SOURCE) || defined(_MINIX)
+#define        dbm_pagfno(a)   DBM_PAGFNO_NOT_AVAILABLE
+#endif
+
+/* __BEGIN_DECLS */
+void    dbm_close(DBM *);
+DBM    *dbm_open(const char *, int, mode_t);
+int     dbm_error(DBM *);
+int     dbm_clearerr(DBM *);
+#if defined(_NETBSD_SOURCE) || defined(_MINIX)
+int     dbm_dirfno(DBM *);
+#endif
+#if !defined(__LIBC12_SOURCE__) && !defined(__minix)
+int     dbm_delete(DBM *, datum)               __RENAME(__dbm_delete13);
+datum   dbm_fetch(DBM *, datum)                __RENAME(__dbm_fetch13);
+datum   dbm_firstkey(DBM *)                    __RENAME(__dbm_firstkey13);
+datum   dbm_nextkey(DBM *)                     __RENAME(__dbm_nextkey13);
+int     dbm_store(DBM *, datum, datum, int)    __RENAME(__dbm_store13);
+#endif
+#if defined(__minix)
+int     dbm_delete(DBM *, datum);
+datum   dbm_fetch(DBM *, datum);
+datum   dbm_firstkey(DBM *);
+datum   dbm_nextkey(DBM *);
+int     dbm_store(DBM *, datum, datum, int);
+#endif
+/* __END_DECLS */
+
+#endif /* !_NDBM_H_ */