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 2014 Garrett D'Amore <garrett@damore.org>
  24  *
  25  * Copyright 1989 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29 /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  30 /*        All Rights Reserved   */
  31 
  32 /*
  33  * Portions of this source code were derived from Berkeley 4.3 BSD
  34  * under license from the Regents of the University of California.
  35  */
  36 
  37 /*
  38  * Hashed key data base library.
  39  */
  40 
  41 #ifndef _NDBM_H
  42 #define _NDBM_H
  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 DBM     *dbm_open(const char *, int, mode_t);
  94 void    dbm_close(DBM *);
  95 datum   dbm_fetch(DBM *, datum);
  96 datum   dbm_firstkey(DBM *);
  97 datum   dbm_nextkey(DBM *);
  98 int     dbm_delete(DBM *, datum);
  99 int     dbm_store(DBM *, datum, datum, int);
 100 int     dbm_clearerr(DBM *);
 101 int     dbm_error(DBM *);
 102 
 103 #define _DBM_RDONLY     0x1     /* data base open read-only */
 104 #define _DBM_IOERR      0x2     /* data base I/O error */
 105 
 106 #define dbm_rdonly(__db)        ((__db)->dbm_flags & _DBM_RDONLY)
 107 #define dbm_error(__db)         ((__db)->dbm_flags & _DBM_IOERR)
 108 /* use this one at your own risk! */
 109 #define dbm_clearerr(__db)      ((__db)->dbm_flags &= ~_DBM_IOERR)
 110 /* for fstat(2) */
 111 #define dbm_dirfno(__db)        ((__db)->dbm_dirf)
 112 #define dbm_pagfno(__db)        ((__db)->dbm_pagf)
 113 
 114 #ifdef  __cplusplus
 115 }
 116 #endif
 117 
 118 #endif  /* _NDBM_H */