1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License, Version 1.0 only
   6  * (the "License").  You may not use this file except in compliance
   7  * with the License.
   8  *
   9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10  * or http://www.opensolaris.org/os/licensing.
  11  * See the License for the specific language governing permissions
  12  * and limitations under the License.
  13  *
  14  * When distributing Covered Code, include this CDDL HEADER in each
  15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16  * If applicable, add the following below this CDDL HEADER, with the
  17  * fields enclosed by brackets "[]" replaced with your own identifying
  18  * information: Portions Copyright [yyyy] [name of copyright owner]
  19  *
  20  * CDDL HEADER END
  21  */
  22 /*
  23  * Copyright 1989 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  28 /*        All Rights Reserved   */
  29 
  30 /*
  31  * Portions of this source code were derived from Berkeley 4.3 BSD
  32  * under license from the Regents of the University of California.
  33  */
  34 
  35 /*
  36  * Hashed key data base library.
  37  */
  38 
  39 #ifndef _NDBM_H
  40 #define _NDBM_H
  41 
  42 #pragma ident   "%Z%%M% %I%     %E% SMI"
  43 
  44 #include <sys/feature_tests.h>
  45 #include <sys/types.h>
  46 
  47 #ifdef  __cplusplus
  48 extern "C" {
  49 #endif
  50 
  51 /*
  52  * flags to dbm_store()
  53  */
  54 #define DBM_INSERT      0
  55 #define DBM_REPLACE     1
  56 
  57 #define _PBLKSIZ 1024
  58 #define _DBLKSIZ 4096
  59 
  60 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
  61 #define PBLKSIZ _PBLKSIZ
  62 #define DBLKSIZ _DBLKSIZ
  63 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
  64 
  65 typedef struct {
  66         int     dbm_dirf;               /* open directory file */
  67         int     dbm_pagf;               /* open page file */
  68         int     dbm_flags;              /* flags, see below */
  69         long    dbm_maxbno;             /* last ``bit'' in dir file */
  70         long    dbm_bitno;              /* current bit number */
  71         long    dbm_hmask;              /* hash mask */
  72         long    dbm_blkptr;             /* current block for dbm_nextkey */
  73         int     dbm_keyptr;             /* current key for dbm_nextkey */
  74         long    dbm_blkno;              /* current page to read/write */
  75         long    dbm_pagbno;             /* current page in pagbuf */
  76         char    dbm_pagbuf[_PBLKSIZ];   /* page file block buffer */
  77         long    dbm_dirbno;             /* current block in dirbuf */
  78         char    dbm_dirbuf[_DBLKSIZ];   /* directory file block buffer */
  79 } DBM;
  80 
  81 #if defined(_XPG4_2)
  82 typedef struct {
  83         void    *dptr;
  84         size_t  dsize;
  85 } datum;
  86 #else
  87 typedef struct {
  88         char    *dptr;
  89         long    dsize;
  90 } datum;
  91 #endif
  92 
  93 #ifdef  __STDC__
  94 DBM     *dbm_open(const char *, int, mode_t);
  95 void    dbm_close(DBM *);
  96 datum   dbm_fetch(DBM *, datum);
  97 datum   dbm_firstkey(DBM *);
  98 datum   dbm_nextkey(DBM *);
  99 int     dbm_delete(DBM *, datum);
 100 int     dbm_store(DBM *, datum, datum, int);
 101 int     dbm_clearerr(DBM *);
 102 int     dbm_error(DBM *);
 103 #else
 104 DBM     *dbm_open();
 105 void    dbm_close();
 106 datum   dbm_fetch();
 107 datum   dbm_firstkey();
 108 datum   dbm_nextkey();
 109 int     dbm_delete();
 110 int     dbm_store();
 111 int     dbm_clearerr();
 112 int     dbm_error();
 113 #endif
 114 
 115 #define _DBM_RDONLY     0x1     /* data base open read-only */
 116 #define _DBM_IOERR      0x2     /* data base I/O error */
 117 
 118 #define dbm_rdonly(__db)        ((__db)->dbm_flags & _DBM_RDONLY)
 119 #define dbm_error(__db)         ((__db)->dbm_flags & _DBM_IOERR)
 120 /* use this one at your own risk! */
 121 #define dbm_clearerr(__db)      ((__db)->dbm_flags &= ~_DBM_IOERR)
 122 /* for fstat(2) */
 123 #define dbm_dirfno(__db)        ((__db)->dbm_dirf)
 124 #define dbm_pagfno(__db)        ((__db)->dbm_pagf)
 125 
 126 #ifdef  __cplusplus
 127 }
 128 #endif
 129 
 130 #endif  /* _NDBM_H */