From: Ben Gras Date: Wed, 14 Jul 2010 14:52:02 +0000 (+0000) Subject: includes: header files for netbsd db code. X-Git-Tag: v3.1.8~238 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/style.css?a=commitdiff_plain;h=4fcd34137ccaa320874fc635ca6efc03e66735d5;p=minix.git includes: header files for netbsd db code. --- diff --git a/include/Makefile b/include/Makefile index b6958d67e..dd886a806 100644 --- a/include/Makefile +++ b/include/Makefile @@ -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 index 000000000..7fbc78836 --- /dev/null +++ b/include/db.h @@ -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 +#include +#include + +#include + +#include + +#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 index 000000000..800efaed7 --- /dev/null +++ b/include/mpool.h @@ -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 +#include + +/* + * 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 index 000000000..06e2c756d --- /dev/null +++ b/include/ndbm.h @@ -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 +#ifndef __minix +#include +#endif +#include +#include + +#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_ */